我的输入如何不等于答案?

时间:2015-03-23 08:33:48

标签: python string int

从Unity JS切换到Python一点点,一些更好的观点让我想不起为什么这不起作用。 我最好的猜测是变量guess实际上是一个字符串,所以字符串5与整数5不同? 这是发生了什么,以及如何解决这个问题。

import random
import operator

ops = {
    '+':operator.add,
    '-':operator.sub
}
def generateQuestion():
    x = random.randint(1, 10)
    y = random.randint(1, 10)
    op = random.choice(list(ops.keys()))
    a = ops.get(op)(x,y)
    print("What is {} {} {}?\n".format(x, op, y))
    return a

def askQuestion(a):
    guess = input("")
    if guess == a:
        print("Correct!")
    else:
        print("Wrong, the answer is",a)

askQuestion(generateQuestion())

2 个答案:

答案 0 :(得分:3)

是的,"5"5不同,你绝对正确。您可以使用5str(5)转换为字符串。另一种方法是将"5"转换为整数int("5"),但该选项可能会失败,因此可以更好地处理异常。

因此,对您的计划的更改可能是以下内容:

if guess == str(a):

而不是:

if guess == a:

另一个选择是将guess转换为整数,如另一个答案所述。

编辑:这仅适用于Python版本2.x:

但是,您使用的是input(),而不是raw_input()。如果键入整数,input()将返回一个整数(如果键入的文本不是有效的Python表达式,则会失败)。我测试了你的程序并询问了What is 4 - 2?;我输入了2并且它已经Correct!了,所以我看不出你的问题是什么。

您是否注意到,如果您的计划要求What is 9 - 4?,您可以输入9 - 4并说明Correct!?这是因为您使用的是input(),而不是raw_input()。同样,如果您输入例如c,您的计划因NameError

而失败

但我会使用raw_input(),然后将答案与str(correct_answer)

进行比较

答案 1 :(得分:1)

我假设你使用的是python3。

代码的唯一问题是从input()获得的值是字符串而不是整数。所以你需要转换它。

string_input = input('Question?')
try:
    integer_input = int(string_input)
except ValueError:
    print('Please enter a valid number')

现在您将输入作为整数,您可以将其与a

进行比较

编辑代码:

import random
import operator

ops = {
    '+':operator.add,
    '-':operator.sub
}
def generateQuestion():
    x = random.randint(1, 10)
    y = random.randint(1, 10)
    op = random.choice(list(ops.keys()))
    a = ops.get(op)(x,y)
    print("What is {} {} {}?\n".format(x, op, y))
    return a

def askQuestion(a):
    # you get the user input, it will be a string. eg: "5"
    guess = input("")
    # now you need to get the integer
    # the user can input everything but we cant convert everything to an integer so we use a try/except
    try:
        integer_input = int(guess)
    except ValueError:
        # if the user input was "this is a text" it would not be a valid number so the exception part is executed
        print('Please enter a valid number')
        # if the code in a function comes to a return it will end the function
        return
    if integer_input == a:
        print("Correct!")
    else:
        print("Wrong, the answer is",a)

askQuestion(generateQuestion())