Python 2.7.10:如何通过输入方程而不是整数来阻止用户利用输入?

时间:2018-02-15 19:10:46

标签: python python-2.7

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的答案,那么计算机认为它是正确的。我如何防止这种情况?

2 个答案:

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