3

无法让 python 测验程序工作,当“用户答案”为“正确答案”时,如果循环不能正常工作,并声明它们不相等,即使它们是相等的。我想知道这是否是比较保存在列表中的字符串的问题,但我真的不知道该怎么做才能修复它。任何帮助将非常感激。

谢谢

import sys

print ("Game started")
questions = ["What does RAD stand for?",
            "Why is RAD faster than other development methods?",
            "Name one of the 3 requirements for a user friendly system",
            "What is an efficient design?",
            "What is the definition of a validation method?"]


answers = ["A - Random Applications Development, B - Recently Available Diskspace, C - Rapid Applications Development",
            "A - Prototyping is faster than creating a finished product, B - Through the use of CASE tools, C - As end user evaluates before the dev team",
            "A - Efficient design, B - Intonated design, C - Aesthetic design",
            "A - One which makes best use of available facilities, B - One which allows the user to input data accurately, C - One which the end user is comfortable with",
            "A - A rejection of data which occurs because input breaks predetermined criteria, B - A double entry of data to ensure it is accurate, C - An adaption to cope with a change external to the system"]

correctanswers = ["C", "B", "A", "A", "A"]
score = 0
lives = 4
z = 0

for i in range(len(questions)):
    if lives > 0:
        print (questions[z])
        print (answers[z])
        useranswer = (input("Please enter the correct answer's letter here: "))
        correctanswer = correctanswers[z]
        if (useranswer) is (correctanswer):     //line im guessing the problem occurs on
            print("Correct, well done!")
            score = score + 1
        else:
            print("Incorrect, sorry. The correct answer was;  " + correctanswer)
            lives = lives - 1
            print("You have, " + str(lives) + " lives remaining")
        z = z + 1
    else:
        print("End of game, no lives remaining")
        sys.exit()

print("Well done, you scored" + int(score) + "//" + int(len(questions)))
4

3 回答 3

8

您应该==用于比较:

if useranswer == correctanswer: 

is运算符进行身份比较。并且==, >, 运算符进行值比较,这就是您所需要的。


对于两个对象,obj1obj2

obj1 is obj2  iff id(obj1) == id(obj2)  # iff means `if and only if`.
于 2013-02-18T21:32:39.203 回答
7

对象身份的运算符isis not测试:是当且仅当是同一个对象。而运算符、、、、和比较两个对象的x is ytrue xy <>==>=<=!=

所以...

    if (useranswer) is (correctanswer):     //line im guessing the problem occurs on

应该...

    if useranswer == correctanswer:

由于您要检查用户的答案是否与正确答案匹配。它们在内存中不是同一个对象。

于 2013-02-18T21:32:30.333 回答
1

is操作员测试对象身份。检查文档。我希望这个 SO 线程也可能有所帮助。

于 2013-02-18T21:38:28.807 回答