Пропустить до содержимого

Как использовать ввод целых чисел в Python?

[

Как получить целочисленный ввод в Python

Если вы когда-либо программировали интерактивное текстовое приложение на Python, то, вероятно, вы знаете, что вам нужен надежный способ запросить у пользователя целые числа в качестве ввода. Недостаточно просто отображать приглашение и собирать нажатия клавиш. Вы должны проверить, является ли введенный пользователем ввод действительно целым числом. Если это не так, ваш код должен соответствующим образом реагировать - обычно повторяя запрос.

В этом учебнике вы узнаете, как создать повторно используемую вспомогательную функцию, которая гарантирует ввод корректных целых чисел от интерактивного пользователя. По пути вы узнаете о инструментах Python для получения строки с консоли и преобразования этой строки в целое число.

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

Как получить целочисленные значения ввода в Python

Почему следует быть осторожным с функцией input() в Python 2Отобразить/скрыть

Из-за этой проблемы Python 2 также предоставлял функцию raw_input() в качестве гораздо более безопасной альтернативы, но всегда был риск того, что неподозревающий программист выберет более очевидно названную функцию input().

Python 3 переименовал raw_input() в input() и удалил старую, небезопасную версию input(). В этом учебнике вы будете использовать Python 3, поэтому этот подводный камень не станет проблемой.

Python

>>> number_as_string = input("Пожалуйста, введите целое число: ")
Пожалуйста, введите целое число: 123
>>> number_as_integer = int(number_as_string)
>>> print(f"Значение целого числа: {number_as_integer}")
Значение целого числа: 123

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

Когда пользователь нажимает клавишу Enter, функция возвращает строку, содержащую введенные символы без символа новой строки. Чтобы напомнить себе о том, что полученное значение является строкой, вы назвали переменную number_as_string, которая принимает значение.

Следующая строка пытается разобрать number_as_string как целое число и сохранить результат в number_as_integer. Для преобразования вы используете конструктор класса int(). Наконец, функция print() отображает результат.

Работа с некорректным вводом

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

Одним из способов обнаружения таких случаев является использование исключений. Рассмотрим следующий пример:

Python

>>> number_as_string = input("Пожалуйста, введите целое число: ")
try:
number_as_integer = int(number_as_string)
print(f"Значение целого числа: {number_as_integer}")
except ValueError:
print("Необходимо ввести целочисленное значение")

У вас все еще есть вызов input() для запроса значения у пользователя. Однако теперь вы оборачиваете код, который преобразует строку в целое число, в блок try-except. Если операция преобразования int(number_as_string) генерирует исключение ValueError, значит, введенная строка не может быть преобразована в целое число. В таком случае вместо отображения значения целого числа вы будете печатать сообщение “Необходимо ввести целочисленное значение”.

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

Фильтрация ввода для корректных целых чисел

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

Рассмотрим этот пример:

Python

valid_number = False
while not valid_number:
number_as_string = input("Пожалуйста, введите целое число от 1 до 100: ")
try:
number_as_integer = int(number_as_string)
if 1 <= number_as_integer <= 100:
valid_number = True
print(f"Значение целого числа: {number_as_integer}")
else:
print("Введите целое число в диапазоне от 1 до 100")
except ValueError:
print("Необходимо ввести целочисленное значение")

В этом примере добавлен цикл while, чтобы запросить у пользователя целое число и проверять его на допустимость в диапазоне от 1 до 100. Пока число не входит в этот диапазон, цикл будет продолжаться, и пользователю будет предлагаться вводить число снова.

Вы также добавили блок if-else для проверки значения целого числа после успешного преобразования строки. Если число находится в допустимом диапазоне, переменная valid_number устанавливается в True, и значение отображается. Если число не проходит проверку, выводится сообщение о необходимости ввести число в диапазоне от 1 до 100.

Это пример того, как фильтрация может помочь вам получать только допустимый ввод от пользователя.

Создание вспомогательной функции для чтения корректных целых чисел

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

def read_integer(prompt, error_message):
valid_number = False
while not valid_number:
number_as_string = input(prompt)
try:
number_as_integer = int(number_as_string)
valid_number = True
except ValueError:
print(error_message)
return number_as_integer

Эта функция read_integer() принимает два аргумента: prompt и error_message. prompt - это текстовая строка, которая выводится пользователю для запроса целого числа. error_message - это сообщение об ошибке, которое будет отображаться, если пользователь вводит некорректное значение.

Функция содержит тот же код, что и пример с фильтрацией ввода для корректных целых чисел, но теперь он инкапсулирован в функцию. Вызов этой функции позволяет гарантировать корректный ввод целого числа от пользователя с минимальным повторением кода.

Вот пример использования функции read_integer():

number = read_integer("Пожалуйста, введите целое число от 1 до 100: ", "Необходимо ввести целочисленное значение")

Заключение

В этом учебнике вы узнали, как получить целочисленный ввод в Python и как обрабатывать некорректный ввод с использованием исключений. Вы также узнали, как фильтровать ввод, чтобы получить только корректные целые числа, и как создать вспомогательную функцию для повторного использования этой логики.

Будьте осторожны при использовании целочисленного ввода от пользователей и всегда кодируйте программы оборонительно, чтобы обрабатывать исключительные ситуации. Надеюсь, эта статья помогла вам лучше понять, как работать с целочисленным вводом в Python.


Следующие шаги

  • Практикуйтесь в получении целочисленных значений от пользователей, чтобы стать более уверенным в использовании этой функциональности.

Удалить рекламу