我目前正在创建一个测验来测试孩子们将两个数字加、减和相乘的能力。您可以看到以下代码,了解我到目前为止所开发的内容:
from random import randint
import re
first_number = randint(30,60)
second_number = randint(30,60)
correct_ans = str(first_number - second_number)
while True:
user_input = input("%s - %s = " %(first_number, second_number))
if re.search(r'[d]', user_input):
print("Error. You have entered a non - integer character. The question will be asked again.")
elif re.search(r'[0-9]', user_input):
if (user_input == correct_ans):
print("Correct! Well done!")
break
else:
print("Your answer is incorrect. The correct answer was %s" %(correct_ans))
break
简单解释一下程序——
生成了两个随机数,此函数仅将数字相乘。while 循环要求用户提供正确的结果。现在,第一个正则表达式分析输入,看看它们是否输入了任何非数字字符(标点符号、字母)等。如果有,他们会收到一条消息,并再次询问问题。
现在,if 语句的第二部分然后检查它们是否输入了一个数字,如果有,则程序会检查输入是否正确correct_ans。如果是,他们会收到一条消息,说干得好!程序中断。如果他们弄错了,程序会输出一条消息,他们仍然会弄错。
我遇到的问题是 IDLE 输出第一条消息"错误,您已输入..."一直像这样:
50 - 60 = -10
Error. You have entered a non - integer character. The question will be asked again.
50 - 60 =
我该如何解决这个问题?更重要的是,我怎样才能让计算机接受负值的减法运算,因为它有一个"-"并将其视为标点符号?
只需使用一个也可以处理负数的try/except
:
from random import randint
first_number = randint(30,60)
second_number = randint(30,60)
correct_ans = first_number - second_number
while True:
user_input = input("%s - %s = " %(first_number, second_number))
try:
user_input = int(user_input)
except ValueError:
print("Error. You have entered a non - integer character. The question will be asked again.")
else:
if user_input == correct_ans:
print("Correct! Well done!")
break
else:
print("Your answer is incorrect. The correct answer was %s" %(correct_ans))
break
您的正则表达式只寻找一个数字。您应该考虑在正则表达式中使用重复。
但是,由于您正在寻找整数值,我认为更简单的方法是使用 Python 的 int
函数。
user_input = input("%s - %s = " %(first_number, second_number))
try:
user_input = int(user_input)
except ValueError e:
print("Error. You have entered a non - integer character. The question will be asked again.")
int
接受字符串整数字符串(包括加号和减号,忽略空格),是一种更可靠的验证整数输入的方法。
我不太确定你认为第一个正则表达式在做什么。实际上,它正在做与第二个完全相同的事情,因为[d]
与[0-9]
相同。
你可以改用[^d-]
来检查你所拥有的不是数字或-
字符,但你真正想要的是检查该值是否是一个有效的整数,你可以通过使用 int
函数直接捕获异常来做到这一点,正如其他人指出的那样。