Вступление
Способ получения и обработки информации является одним из наиболее важных аспектов в духе любого языка программирования, особенно для информации, предоставляемой и получаемой от пользователя.
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. Чтобы получить ту же
функциональность, которая была предоставлена функцией input()
Python
2, в Python 3 необходимо использовать eval(input())
Взгляните на пример 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 можно использовать для получения пользовательского ввода в различных форматах. Мы также увидели, как мы можем обрабатывать исключения и ошибки, которые могут возникнуть при получении пользовательского ввода.