Python正则表达式参数问题

时间:2014-12-22 11:07:49

标签: python regex

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

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 = 

我该如何解决这个问题?更重要的是,如何让计算机接受减法运算的负值,因为它有一个' - '并认为这是一个标点符号?

3 个答案:

答案 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函数并捕获异常,正如其他人所指出的那样。