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

Как использовать int ввод в Python

[

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

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

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

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

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

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

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

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

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

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

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

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

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

Обработка недопустимого ввода

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

При попытке вызвать int() с такой строкой будет вызвано исключение ValueError, так как строка неправильного формата невозможно преобразовать в целое число:

Python

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

Если пользователь вводит не-цифровое значение, его попытка преобразования в целое число завершается неудачей и вызывает исключение ValueError. Результатом будет сообщение об ошибке:

Terminal window
Пожалуйста, введите целое число: abc
ValueError: invalid literal for int() with base 10: 'abc'

Python

number_as_string = input("Please enter an integer: ")
try:
number_as_integer = int(number_as_string)
print(f"The value of the integer is {number_as_integer}")
except ValueError:
print("Invalid input. Please enter an integer.")

Этот код позволяет выполнить попытку преобразования введенного числа в целое число с помощью конструкции try. Если операция завершается успешно, то выводится результат. Однако, если возникает исключение ValueError, то переходим к блоку except, где выводится сообщение о недопустимом вводе.

Фильтрация ввода на допустимые целочисленные значения

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

Python

number_as_string = input("Please enter an integer: ")
if number_as_string.isdigit():
number_as_integer = int(number_as_string)
print(f"The value of the integer is {number_as_integer}")
else:
print("Invalid input. Please enter a valid integer.")

Здесь мы используем метод isdigit() для проверки, содержит ли введенное значение только цифры. Если это так, то выполняем преобразование в целое число и выводим результат. В противном случае выводим сообщение о недопустимом вводе.

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

Один из способов повысить удобство и повторное использование кода - создать утилитную функцию, которая будет обрабатывать запросы пользователя и возвращать только допустимые целые числа. Вот пример такой функции:

Python

def read_integer(prompt):
while True:
number_as_string = input(prompt)
if number_as_string.isdigit():
return int(number_as_string)
else:
print("Invalid input. Please enter a valid integer.")
number = read_integer("Please enter an integer: ")
print(f"The value of the integer is {number}")

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

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

Заключение

В этом руководстве вы узнали, как получать допустимые целочисленные значения от пользователей в Python. При работе с вводом с клавиатуры вам необходимо кодировать защищенный код для обработки недопустимых входных данных. Вы также узнали, как обрабатывать такую ​​ситуацию в наиболее Pythonic способе, используя конструкцию try-except или проверку на допустимые значения перед преобразованием.

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

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

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

  • Python Tutorials - Коллекция учебников и видео по основным концепциям и возможностям Python.
  • Python Books - Коллекция книг по Python, которые помогут вам углубить свои знания и навыки.

Продолжайте учиться и практиковаться! Желаем вам успехов в программировании на Python!