python 2.6琐事游戏,真/假,多选,随机

时间:2014-03-27 17:01:54

标签: python random python-2.6

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方法会打印我需要打印的内容。

1 个答案:

答案 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


我认为你需要把它分成三件事:

  1. 一个Trivia类,其中每个实例都是一个问题。这有一个__init__方法(获取属性,不返回任何内容),一个show方法(不带参数,返回一个字符串)和一个check_answer方法(接受一个字符串,返回一个布尔值) )。
  2. import_file函数,它接受文件名并根据文件内容返回Trivia个实例列表。
  3. 游戏循环,从import_file然后random.shuffle获取问题列表并询问他们。