Python 正则表达式参数问题



我目前正在创建一个测验来测试孩子们将两个数字加、减和相乘的能力。您可以看到以下代码,了解我到目前为止所开发的内容:

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 函数直接捕获异常来做到这一点,正如其他人指出的那样。

最新更新