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