import random
class Trivia(object):
points = 0
def __init__(self, mult_tf, question, options, correct, reason):
self.mult_tf = mult_tf
self.question = question
self.options = options
self.correct = correct
self.reason = reason
mult_tf, question, options, correct, reason = block
def next_line(the_file):
line = the_file.readline()
line = line.replace('/', '\n')
return line
def questions(self, block):
file_name = open('Trivia_Questions.txt', 'r')
while True:
mult_tf = next_line(file_name)
question = next_line(file_name)
options = []
if mult_tf == 'Multiple Choice':
for i in range(4):
options.append(next_line(file_name))
else:
for i in range(2):
options.append(next_line(file_name))
correct = next_line(file_name)
reason = next_line(file_name)
mult_tf, question, options, correct, reason = block
file_name.close()
def rand_quest(self):
for block in questions():
questions.shuffle()
return questions
def show(self):
while True:
print mult_tf
print question
print options
guess = raw_input('\nWhich do you choose? ')
if guess == correct:
print '\nCorrect!'
points += 10
else:
print '\nIncorrect!'
print reason
print '\nYou completed the game!'
print '\nYou got', points, 'points!'
Trivia.show()
raw_input('\n\nPress enter to exit')
几小时前我在同一个问题上发了一个问题。我相信我在寻找答案时已经进一步了解。上面的代码应该是一个有多种选择和真/假问题的琐事游戏。我相信我接近解决方案我无法让它正常运行。 我经常遇到这个错误:
Trivia.show()
TypeError: unbound method show() must be called with Trivia instance as first argument (got nothing instead)
不太确定争论应该是什么,我认为show方法会打印我需要打印的内容。
答案 0 :(得分:2)
show()
是实例方法,因此要调用它,您需要创建Trivia
类的实例,例如:
trivia = Trivia(mult_tf, question, options, correct, reason)
trivia.show()
但更广泛地说,你的课程没有任何意义。几个例子:
__init__
无效,因为在最后一行:
mult_tf, question, options, correct, reason = block
表示“将block
中的五个项目解压缩到其他五个变量中”,未定义名称block
,因此您将获得NameError
。因此,您永远不能创建类实例,也不会运行其他任何内容。
next_line
似乎很好,除了你没有self
参数,但它实际上不是一个类或实例方法(它不使用类或实例的任何属性)所以可能不属于班级。
questions
有点奇怪;它从文件中获取所有这些值,然后方法结束而不实际对它们做任何事情,用block
中的任何内容覆盖它们的值。没有任何东西被返回或添加到实例中,因此它可能永远不会运行。
rand_quest
也有名称错误,因为questions
未定义(也不是参数)。您可以调用self.questions()
,除非实际上没有做或返回任何内容,如上所述。除非你定义函数,否则函数没有shuffle()
方法,即使你的语法正确(random.shuffle(questions)
)你也无法改变函数 - 这甚至意味着什么?
在show
中,没有任何内容可以结束while True
循环,所以这只会永远运行,除了你有NameError
的整个负载这一事实(例如,虽然mult_tf
,但该范围内不存在self.mult_tf
。
我认为你需要把它分成三件事:
Trivia
类,其中每个实例都是一个问题。这有一个__init__
方法(获取属性,不返回任何内容),一个show
方法(不带参数,返回一个字符串)和一个check_answer
方法(接受一个字符串,返回一个布尔值) )。import_file
函数,它接受文件名并根据文件内容返回Trivia
个实例列表。import_file
然后random.shuffle
获取问题列表并询问他们。