我目前正在创建一个测验,以测试孩子们将两个数字相加,相减和相乘的能力。您可以在下面看到我目前开发的代码:
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 =
我该如何解决这个问题?更重要的是,如何让计算机接受减法运算的负值,因为它有一个' - '并认为这是一个标点符号?
答案 0 :(得分:1)
我相信你的正则表达式只寻找一位数。您应该考虑将repetition与正则表达式一起使用。
但是,由于您正在寻找整数值,我认为更简单的方法是使用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
接受字符串整数字符串(包括加号和减号,并忽略空格),并且是一种更健壮的方式来验证整数输入。
答案 1 :(得分:1)
只需使用会处理负数的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
答案 2 :(得分:0)
我不太确定你认为第一个正则表达式是做什么的。事实上,它与第二个完全相同,因为[\d]
与[0-9]
相同。
您可以使用[^\d-]
来检查您所拥有的是不是数字或-
字符,但您实际想要的是检查值是否为是一个有效的整数,你可以直接使用int
函数并捕获异常,正如其他人所指出的那样。