Безопасно ли использовать функцию ввода (), как я с моим калькулятором?

1

Привет, я новичок в программировании, и я работал над программой калькулятора. Это еще не закончено, но мой вопрос сегодня, опасно ли использовать функцию input(), как я? Я провел много исследований, и я могу найти, где он говорит, чтобы не использовать функцию ввода с python 2, потому что это опасно и использовать raw_input, но этот модуль не работает, как мне это нужно. Есть ли более безопасный способ сделать это. Вот мой код калькулятора (его простой и простой)

while True: 
  print '\nWhat do you want to multiply/divide/add/subtract ?', 
  calc = input(" ---> " )
  print '\nThe answer is %s\n' %(calc)

Кроме того, я бы мог добавить код, который, если будет введено что-либо, кроме проблемы с умножением, добавлением, делением или вычитанием, будет указано неверный ввод и продолжит аналогично тому, как этот код работает, если что-либо, кроме "y" или "y", n 'вводится? как этот код ниже. (Извините, я не мог добавить это в заголовок, потому что это было бы долго.

while True:
    y = 'y'
    n = 'n'

    answer = raw_input('Run again? (y/n): ')
    if answer in ('y', 'n'):
        break
    print 'Invalid input.'

if answer == y:
    continue
else:
    print 'Goodbye'
    break       

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

Теги:
python-2.7

2 ответа

1

В Python 2.x raw_input() возвращает строку, тогда как input() оценивает ввод в контексте. input() эквивалентно eval(raw_input(prompt)). input() не вызывает ошибок пользователя. Если вход недействителен, он просто вызывает SyntaxError, в отличие от функции raw_input().

  • 0
    Спасибо, я пытался сделать это, но я не мог заставить это работать, возможно я напечатал это неправильно прежде. Но спасибо, что работает. Это безопаснее, чем просто ввод? И есть ли способ, что если некоторые введут что-то, что вызовет ошибку, он скажет неверный ввод и запустится снова вместо необходимости перезапуска вручную. Еще раз спасибо.
  • 0
    Вы можете попробовать использовать try и кроме блоков для ValueError. Преобразуйте ввод в определенный тип данных, если он не работает, код переместится в блок исключений.
0

Python2 input() оценивает его содержимое, а raw_input() возвращает его как строку.

# Python 2
input()
>>> 2+2
4

raw_input()
>>> 2+2
"2+2"

Неправильно будет input() ошибки при неправильном использовании, но он также может позволить пользователю программы выполнять неожиданные операции, некоторые из которых могут быть опасными.

  • 0
    Спасибо, это то, что я нашел, но безопаснее ли использовать опцию eval (raw_input ("--->")), потому что я изменил его на это, и он работает так же, как input (). Спасибо за ответ.
  • 0
    @wyattwalden нет, это не безопаснее, это эквивалентно.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню