不知道为什么,但是当我输入正确的答案时,它仍然会说我弄错了

时间:2016-04-02 05:19:58

标签: python

我是python和编码的新手。我有一个问题,我不认为它正确地使用了操作员。我想知道是否有人可以提供帮助。

index.html

2 个答案:

答案 0 :(得分:2)

解决方案

问题在于以下两行:

q3 = input("Answer: ")
correctAnswer = (q3a,q3operator,q3b)

q3获取一个字符串。 correctAnswer获得tuple of strings。当你比较两者时,他们显然永远不会是平等的。

解决此问题的最简单方法是将行更改为以下内容:

q3 = int(raw_input("Answer: ")) # guarantee q3 is treated as an integer
correctAnswer = eval(str(q3a)+q3operator+str(q3b)) # eval treats a string as Python command

这应该可以解决您的问题。

如何运作

eval将字符串转换为Python表达式并对其进行求值 - 类似“5 + 3”的内容将转换为实际表达式5 + 3并进行评估,得到8。

我必须将q3aq3b转换为字符串,以便我可以使用eval - 因此我使用了str(q3a)str(q3b)。< / p>

请注意,raw_input仅适用于Python 2.7 - input是在Python 3中使用的正确选项。

eval如果你无法控制你传递给它的东西也有潜在的危险 - 在这种情况下它很好,但是你必须使用它的事实表明可能有更好的方法来编写这个程序。 :)

如何改进您的计划

编写优秀程序的关键是为它们使用正确的语言结构。

在这种情况下,您可以通过使用两个非常强大的Python功能来改进代码:dictionarieslambda functions。我会留下你花一些时间阅读他们的所作所为。

以下是一个示例,说明您的程序在这些改进后的样子(为了保持简单,假设您只需要简单的加法和减法问题):

functions = {"plus": lambda x, y : x + y, "minus": lambda x, y: x - y}
operation = random.choice(functions.keys())

a,b = random.randint(1,10), random.randint(1,10)
answer = int(raw_input("What is {0} {1} {2}?".format(a,operation,b))

print("Correct!" if answer == functions[operation](a,b) else "Wrong!") 

注意它更短,更清洁,更容易。您可以向functions添加任意函数,并保证程序的其余部分完美运行。

道德:使用正确的工具来做正确的工作。

答案 1 :(得分:1)

以下是问题的previous solution,包括如何将此问题转化为有多个问题的测验!

在您的示例中,您可以轻松使用python的operator模块。将q3operator = "+"替换为q3operator = operator.add,依此类推(请参阅previous solution)。最后,correctAnswer = (q3a,q3operator,q3b)变为correctAnswer = q3operator(q3a,q3b)。 请记住代码顶部的import operator

您还需要在某个时候设置score = 0(在尝试在score = int(score + 1)的右侧使用它之前。