Автор оригинала: Guest Contributor.
Получение пользовательского ввода в Python
Вступление
Способ получения и обработки информации является одним из наиболее важных аспектов этики любого языка программирования, особенно для информации, предоставляемой и получаемой от пользователя.
Python, хотя и сравнительно медленный в этом отношении по сравнению с другими языками программирования, такими как C или Java, содержит надежные инструменты для получения, анализа и обработки данных, полученных непосредственно от конечного пользователя.
В этой статье кратко объясняется, как различные функции Python могут быть использованы для получения информации от пользователя через клавиатуру, с помощью некоторых фрагментов кода, которые служат примерами.
Ввод в Python
Для получения информации через клавиатуру Python использует либо функции input ()
, либо raw_input ()
(подробнее о разнице между ними в следующем разделе). Эти функции имеют необязательный параметр, обычно известный как prompt
, который представляет собой строку , которая будет выводиться на экран при каждом вызове функции.
При вызове одной из функций input()
или raw_input()
поток программы останавливается до тех пор, пока пользователь не введет входные данные через командную строку. Чтобы фактически ввести данные, пользователь должен нажать клавишу ENTER после ввода своей строки. При нажатии клавиши ENTER обычно вставляется символ новой строки (“\n”), но в данном случае этого не происходит. Введенная строка будет просто отправлена в заявку.
Любопытно отметить, что мало что изменилось в том, как эта функция работает между версиями Python 2 и 3 , что отражено в работе input()
и raw_input ()
, объясненных в следующем разделе.
Сравнение функций input и raw_input
Разница при использовании этих функций зависит только от того, какая версия Python используется. Для Python 2 функция raw_input()
используется для получения строкового ввода от пользователя через командную строку, в то время как функция input()
возвращает фактическую оценку входной строки и пытается запустить ее как код Python.
В Python 3 функция raw_input()
устарела и заменена функцией input()
и используется для получения строки пользователя с клавиатуры. А функция input()
Python 2 прекращена в версии 3. Чтобы получить ту же функциональность, которая была предоставлена функцией Python 2 input ()
, оператор eval(input())
должен использоваться в Python 3.
Взгляните на пример функции raw_input
в Python 2.
# Python 2 txt = raw_input("Type something to test this out: ") print "Is this what you just said?", txt
Выход
Type something to test this out: Let the Code be with you! Is this what you just said? Let the Code be with you!
Аналогично, взгляните на пример функции ввода в Python 3.
# Python 3 txt = input("Type something to test this out: ") # Note that in version 3, the print() function # requires the use of parenthesis. print("Is this what you just said? ", txt)
Выход
Type something to test this out: Let the Code be with you! Is this what you just said? Let the Code be with you!
Начиная с этого момента в этой статье будет использоваться метод input
из Python 3, если не указано иное.
Строковый и числовой ввод
Функция input()
по умолчанию преобразует всю полученную информацию в строку. Предыдущий пример, который мы показали, демонстрирует это поведение.
С другой стороны, числа должны быть явно обработаны как таковые, поскольку они изначально входят в состав строк. В следующем примере показано, как получают информацию о числовом типе:
# An input is requested and stored in a variable test_text = input ("Enter a number: ") # Converts the string into a integer. If you need # to convert the user input into decimal format, # the float() function is used instead of int() test_number = int(test_text) # Prints in the console the variable as requested print ("The number you entered is: ", test_number)
Выход
Enter a number: 13 The number you entered is: 13
Другой способ сделать то же самое заключается в следующем:
test_number = int(input("Enter a number: "))
Здесь мы непосредственно сохраняем входные данные после немедленного преобразования в переменную.
Имейте в виду, что если пользователь на самом деле не вводит целое число, то этот код вызовет исключение, даже если введенная строка является числом с плавающей запятой.
Обработка входных исключений
Существует несколько способов убедиться, что пользователь вводит достоверную информацию. Одним из способов является обработка всех возможных ошибок, которые могут возникнуть при вводе данных пользователем.
В этом разделе мы продемонстрируем некоторые хорошие методы обработки ошибок при вводе входных данных.
Но сначала вот какой-то небезопасный код:
test2word = input("Tell me your age: ") test2num = int(test2word) print("Wow! Your age is ", test2num)
При запуске этого кода, допустим, вы вводите следующее:
Tell me your age: Three
Здесь, когда функция int()
вызывается со строкой “Три”, возникает исключение ValueError, и программа останавливается и/или аварийно завершает работу.
Теперь давайте посмотрим, как мы сделаем этот код более безопасным для обработки пользовательского ввода:
test3word = input("Tell me your lucky number: ") try: test3num = int(test3word) print("This is a valid number! Your lucky number is: ", test3num) except ValueError: print("This is not a valid number. It isn't a number at all! This is a string, go and try again. Better luck next time!")
Этот кодовый блок будет оценивать новые входные данные. Если входные данные представляют собой целое число, представленное в виде строки, то функция int()
преобразует его в правильное целое число. Если нет, то возникнет исключение, но вместо сбоя приложения оно будет поймано и будет запущен второй оператор print
.
Вот пример этого кода, работающего при возникновении исключения:
Tell me your lucky number: Seven This is not a valid number. It isn't a number at all! This is a string, go and try again. Better luck next time!
Вот как можно обрабатывать ошибки, связанные с вводом данных, в Python. Вы можете объединить этот код с другой конструкцией, например циклом while, чтобы гарантировать, что код будет многократно выполняться до тех пор, пока вы не получите действительный целочисленный ввод, необходимый вашей программе.
Полный Пример
# Makes a function that will contain the # desired program. def example(): # Calls for an infinite loop that keeps executing # until an exception occurs while True: test4word = input("What's your name? ") try: test4num = int(input("From 1 to 7, how many hours do you play in your mobile?" )) # If something else that is not the string # version of a number is introduced, the # ValueError exception will be called. except ValueError: # The cycle will go on until validation print("Error! This is not a number. Try again.") # When successfully converted to an integer, # the loop will end. else: print("Impressive, ", test4word, "! You spent", test4num*60, "minutes or", test4num*60*60, "seconds in your mobile!") break # The function is called example()
Выход будет таким:
What's your name? Francis From 1 to 7, how many hours do you play in your mobile? 3 Impressive, Francis! You spent 180 minutes or 10800 seconds on your mobile!
Вывод
В этой статье мы увидели, как встроенные утилиты Python можно использовать для получения пользовательского ввода в различных форматах. Мы также видели, как мы можем обрабатывать исключения и ошибки, которые могут возникнуть при получении пользовательского ввода.