x2 = (randint(0, 1000000))
y2 = (randint(0, 1000000))
ans2 = input("2. Answer to " + str(x2) + "-" + str(y2))
if ans2 == x2 - y2:
print("Correct!")
CorrectAns = CorrectAns + 1
else:
print("Wrong!")
我的目标:在没有用户输入2-2并正确
的情况下提出问题,即1-1的dilemna: 如果被问到的人写了2-2,这是0,这也是1-1的答案,那么计算机认为它是正确的。我如何防止这种情况?
答案 0 :(得分:4)
input(...)
相当于Python 2中的eval(raw_input(...))
,因此您正在评估用户输入的内容。例如,评估后输入'10 - 3'
变为7
。< / p>
将用户输入作为包含raw_input
的字符串,使用内置int
将字符串转换为整数,然后检查x2 - y2
。
答案 1 :(得分:1)
获取输入作为原始输入并将其与结果的字符串转换进行比较:
from random import randint
x2 = (randint(0, 1000000))
y2 = (randint(0, 1000000))
ans2 = raw_input("2. Answer to " + str(x2) + "-" + str(y2))
if ans2 == str(x2 - y2):
print("Correct!")
CorrectAns = CorrectAns + 1
else:
print("Wrong!")
这样他们仍然可以输入您呈现的计算,但不会再评估为数字。通过将str与str进行比较,它们必须与确切的结果相匹配,如果将输入转换为数字进行比较,则可以使用try: except:
来保护文本输入。
转换更宽松:
from random import randint
CorrectAns = 0
x2 = (randint(0, 1000000))
y2 = (randint(0, 1000000))
ans2 = raw_input("2. Answer to " + str(x2) + "-" + str(y2)+"\n")
try:
ansNum = int(ans2)
if ansNum == x2 - y2:
print("Correct!")
CorrectAns = CorrectAns + 1
else:
print("Wrong!")
except ValueError: # catch conversion errors if other things than int inputted
print("Wrong")