Распознавание ввода номера в python

Я пытаюсь создать скрипт, который задает математическое уравнение, тогда пользователь должен ввести то, что, по их мнению, отвечает, а затем python выдаст ответ

Однако по какой-то причине python не любит raw_input () в корреляции с оператором eval.

Например, код:

print "What's 5+4" a = raw_input() print eval('5+4') 

Если бы я должен был ввести 10 в var 'a', я получил бы это сообщение об ошибке.

 Traceback (most recent call last): File "/tmp/W1SVH/Math.py", line 3, in <module> print eval('5 +4') File "<string>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects 

Но если бы я заменил raw_input на число «5», сценарий выглядит так.

 print "What's 5+4" a = 9 print eval('5+4') 

Тогда оно вернет 9, следовательно 5 + 4 = 9.

В любом случае, чтобы исправить это, чтобы я мог использовать raw_input (), чтобы запросить пользователя?

2 Solutions collect form web for “Распознавание ввода номера в python”

Объект, возвращаемый raw_input() является строкой . Вам необходимо преобразовать его в целое число, прежде чем выполнять арифметику с ним. Вы можете сделать это с помощью встроенной функции.

 print "What's 3+7" a = int(raw_input()) print eval('a +4') 

EDIT :

Как замечает ShadowRanger, использование eval избыточно, когда a является целым числом, поэтому вы можете просто дать Python оценить результат:

 print "What's 3+7" a = int(raw_input()) print(a + 4) 

Это не только легче читать, но и безопаснее . Использование eval на входе, полученном от пользователя, опасно и его следует избегать. Злоумышленник может ввести то, что при оценке может привести к потере данных или использованию ресурсов вашего компьютера.

попробуй это

 print "What's 3+7" a = 5 # system store input as '5' print eval(a +' + 4') # now final string will be '4 + 5' 
  • raw_input () всегда принимает входные данные в формате raw / string.
  • input () аналогичен запросу raw_input, эта функция принимает только числовые входы.

Несколько рекомендаций:

  • используйте input () для числовых входов и raw_input () для запроса имени и других строк.
  • предпочитайте не жестко кодировать свои номера или использовать число внутри строки
  • eval – замечательная функция, но я бы не часто ее использовал. Это требует отдельного выполнения, которое может вызывать ошибки, которые я могу ожидать, и другие.
Python - лучший язык программирования в мире.