2015-12-01 4 views
2

Я пытаюсь проверить ввод пользователя. Я хочу, чтобы пользователь мог ввести положительное или отрицательное целое число. Все остальные входы (т. Е. Все с буквами) должны быть отклоненыИспользование регулярного выражения для проверки ввода пользователя является целым числом

У меня есть код внизу в минуту, однако я получаю сообщение об ошибке. Я предполагаю, что это связано с типами данных, но я не уверен, как это исправить.

import re 

number =input("Please enter a number: ") 
number=int(number) 
while not re.match("^[0-9 \-]+$", number): 
    print ("Error! Make sure you only use numbers") 
    number = input("Please enter a number: ") 
print("You picked number "+ number) 
+0

Вы не должны бросить его в ряд, я считаю. Вы получаете * TypeError: ожидаемая строка или буфер *? –

+0

Да, я думал об этом. Я просто предположил, что это число, мне нужно использовать int? –

+0

Регулярные выражения ищут только совпадения в * строках *. –

ответ

1

Регулярные выражения нуждаются в строках в качестве входных данных, а не цифр. Таким образом, вам не нужно указывать строку на номер, и вы можете опустить number=int(number).

Вот working demo:

number = "2" 
if not re.match("^[0-9 -]+$", number): 
    print ("Error! Make sure you only use numbers") 
print("You picked number "+ number) 
6

Если все, что вы заботитесь о том, что вход был действительный числовой литерал, даже не заморачиваться с регулярным выражением. int будет правильно разобрать строку или вызвать исключение.

while True: 
    s = input("Please enter a number: ") 
    try: 
     n = int(s) 
     break 
    except ValueError: 
     print("Error! Make sure you only use numbers") 
print("You picked number " + n) 
+0

Это то, что называется упреждающим мышлением :) –

0
import re 

while True: 
    number =input("Please enter a number: ") 
     # number=int(number) -- This raise an error, for regexp you need use "str" 

    #while not re.match("^[0-9 \-]+$", number): 
    # in [0-9 \-] after 9 you use whitespace 
    # Also in [0-9 \-] if minus at the and, not need use backslash 

if re.match("-?\d+$", number) : # minus may be only in first position 
    break 

print ("Error! Make sure you only use numbers") 
    # deleted  number = input("Please enter a number: ") 

print("You picked number "+ number) 
0
answer = input(" ")#asks the user for an answer 
ansnum = re.match("[0-9 \-]",answer)#checks to see if answer only contains numbers 
while not ansnum: #whilst the answer does not contain numbers do.... 
    answer = input("Enter numbers as your answer: ")#asks the user for a valid answer 
    ansnum = re.match("[0-9 \-]",answer)#checks to see if the answer contains numbers 
+0

Добро пожаловать в SO. В то время как ответы только на код - это ответы, пожалуйста, подумайте об улучшении своей должности, добавив контекст. –