我如何在python中返回我的def类对象到我的def ?



我有实现一个程序的代码,该程序计算理解某些文本(您可能知道CS50)所需的年级水平

我尝试实现一个类对象,即使它可能是不必要的。但我正在用它练习。不管怎样,你能不能看一下,告诉我我哪里错了,它不能这样工作?你能给我一些改进吗?

非常感谢你的帮助。

啊,然后代码继续执行一些迭代,从输入中过滤文本(例如读取空格等等)。但首先是关于这个问题。

当我在Read()——>init ()应该返回None,而不是'function'没有值,我得到——>TypeError:阅读。init()缺少3个必需的位置参数:'text_num', 'space_count'和'marks_count'

# import libary
import cs50
def main():
read = Read()
aver_letters_words = round(read.text_num / read.space_count * 100)
aver_sent_words = round(read.marks_count / read.space_count * 100)
# Adding the variables into the Coleman-Liau index formula
index = 0.0588 * aver_letters_words - 0.296 * aver_sent_words - 15.8
#Checking the limits of the grade level via if-statement
if index < 1:
print("Before Grade 1")
elif index >= 16:
print("Grade 16+")
else:
print("Grade", index)

class Read():
def __init__(self, text_num, space_count, marks_count):
self.text_num = text_num
self.space_count = space_count
self.marks_count = marks_count
#read = Read()
#print(read.text_num)
return main

main ()

我觉得python解释器对这里给出的错误描述相当精确。另外,我认为你在这里有两个独立的错误。

第一:init() should return None, not 'function'。在类定义的末尾有一个return main,它返回一个函数main。我不太明白你想要达到什么目的,但是去掉这一行可以解决第一个问题。

对于第二个bug,TypeError: Read.init() missing 3 required positional arguments: 'text_num', 'space_count', and 'marks_count'。您已经用三个参数定义了Read().__init__方法,但是在第6行创建对象时,您尝试在没有任何参数的情况下创建Read()对象。要么在__init__中指定一些默认值,要么在第6行中提供位置参数。

最后,由于您使用Read类仅存储数据,我建议使用dictdataclass(Python 3.7+)代替。对于后者,请参见:https://realpython.com/python-data-classes/。


如果我正确理解了你的意图,你的问题的python解决方案可能如下所示:

class Text():
def __init__(self, text_num, space_count, marks_count):
self.text_num = text_num
self.space_count = space_count
self.marks_count = marks_count

def evaluate():
aver_letters_words = round(read.text_num / read.space_count * 100)
index = 0.0588 * aver_letters_words - 0.296 * aver_sent_words - 15.8
if index < 1:
print("Before Grade 1")
elif index >= 16:
print("Grade 16+")
else:
print("Grade", index)
if __name__ == '__main__':
t = Text(12, 1, 1)  # input here manually for text 'Hello world!'
t.evaluate()        # this prints the output

最新更新