python 2.6琐事游戏,真/假,多选项,随机
几个小时前,我在同一个问题上发布了一个问题。我相信我在寻找答案的过程中已经走得更远了。上面的代码应该是一个包含多项选择和真假问题的琐事游戏。我相信我已经接近解决方案了,我只是无法让它正常运行。 我经常会犯这样的错误:python 2.6琐事游戏,真/假,多选项,随机,python,random,python-2.6,Python,Random,Python 2.6,几个小时前,我在同一个问题上发布了一个问题。我相信我在寻找答案的过程中已经走得更远了。上面的代码应该是一个包含多项选择和真假问题的琐事游戏。我相信我已经接近解决方案了,我只是无法让它正常运行。 我经常会犯这样的错误: import random class Trivia(object): points = 0 def __init__(self, mult_tf, question, options, correct, reason): self.mult_tf
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')
我不太确定这个参数应该是什么,我想show方法会打印我需要它打印的内容。show()
是一个实例方法,所以要调用它,您需要创建琐事类的一个实例,例如:
Trivia.show()
TypeError: unbound method show() must be called with Trivia instance as first argument (got nothing instead)
不过,更广泛地说,你的课毫无意义。举几个例子:
\uuuu init\uuuu
不起作用,因为在最后一行:
trivia = Trivia(mult_tf, question, options, correct, reason)
trivia.show()
这意味着“将block
中的五项解压到其他五个变量中”,名称block
未定义,因此您将得到namererror
。因此,您永远不能创建类实例,其他任何操作都不会运行
next_line
看起来不错,只是您没有self
参数,但它实际上不是一个类或实例方法(它不使用类或实例的任何属性),因此可能不属于该类
问题
有点奇怪;它从文件中获取所有这些值,然后该方法结束时不实际处理它们,而是用块中的任何内容覆盖它们的值。没有任何内容返回或添加到实例中,因此它也可能从未运行过
rand_quest
也有名称错误,因为问题
没有定义(也不是参数)。您可以调用self.questions()
,除非如前所述,它实际上不做任何操作或返回任何内容。函数没有shuffle()
方法,除非您定义了它,而且即使语法正确(random.shuffle(questions)
),您也不能对函数进行洗牌-这意味着什么
在show
中,没有任何东西可以结束while True
循环,因此这将永远运行,除了这样一个事实:您也有一大堆namererror
s(例如mult\u tf
不存在于该范围内,尽管self.mult\u tf
存在)
我认为您需要将其分为三部分:
一个Trivia
类,其中每个实例都是一个问题。它有一个\uuuu init\uuuu
方法(获取属性,不返回任何内容)、一个show
方法(不接受参数,返回字符串)和一个check\u answer
方法(获取字符串,返回布尔值)
一个import_file
函数,它接受一个文件名,并根据文件内容返回一个琐事
实例列表
一个游戏循环,从import\u文件
获取问题列表,然后random.shuffle
s并询问问题
现在我得到:琐事=琐事(多个,问题,选项,正确,原因)名称错误:名称“mult\u tf”不正确defined@AnthonyBarcume好的,是的;您必须实际定义这些变量以传递给类来初始化实例。哦..如果我能弄清楚这意味着什么,那么也许我会修复this@AnthonyBarcume我已经添加了一些注释。您的代码目前非常混乱,实际上没有任何作用hing.谢谢你,伙计,我会继续尝试修复所有这些错误。你总是忘记引用实例变量。例如,questions()
是一种实例方法,因此它应该引用self.mult\u tf
而不是mult\u tf
,self.question
而不是question
,等等。
mult_tf, question, options, correct, reason = block