Ввод числа в Python: от input() до числовых переменных

Раздел: Основы Python -> Файловый ввод-вывод

Ввод числа в Python: основные методы

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


while True:
    try:
        user_input = input("Введите целое число: ")
        number = int(user_input)
        break
    except ValueError:
        print("Ошибка: введено не целое число. Попробуйте снова.")

ввод программ на python (ввод данных в программе python)

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

Как просто получить целое число, если пользователь гарантированно вводит корректные данные?

Если программа предполагает, что пользователь введет только цифры, можно использовать прямое преобразование:


number = int(input("Введите целое число: "))

Python file io (ввод-вывод файлов в python)

Недостаток: при вводе нечисловых символов возникнет ошибка ValueError, которая остановит программу. Этот вариант подходит для простых учебных скриптов, где ввод заведомо корректен.

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

Как ввести число с плавающей точкой (дробное)?

Для ввода дробных чисел используется функция float():


number = float(input("Введите дробное число: "))

Python temp files (временные файлы в python)

Пользователь может вводить число как с точкой, так и в экспоненциальной записи (например, 1.5e2).

Проблема: если ввести строку, не являющуюся числом, возникнет ValueError. Кроме того, значения типа float могут иметь погрешность при вычислениях (см. decimal ниже). Использование float() без обработки ошибок рискованно.

Как надёжно ввести число, избегая ошибок при некорректном вводе?

Универсальная конструкция с циклом и обработкой исключений:


while True:
    raw = input("Введите число: ")
    try:
        number = int(raw)  # или float(raw)
        break
    except ValueError:
        print("Ошибка: введите корректное число.")

Python index files (индексация файлов в python)

Этот код продолжает запрашивать ввод, пока пользователь не введет число. Можно заменить int на float в зависимости от требуемого типа.

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

Как проверить, что строка состоит только из цифр, перед преобразованием?

Метод строки isdigit() возвращает True, если все символы являются цифрами. Это позволяет избежать исключений:


raw = input("Введите целое положительное число: ")
if raw.isdigit():
    number = int(raw)
else:
    print("Некорректный ввод.")

File python class (класс для работы с файлами в python)

Вариант подходит только для целых неотрицательных чисел (без знака минус и точки).

Проблема: метод isdigit() не распознает отрицательные числа (минус не цифра) и дробные числа (точка не цифра). Для более сложных проверок можно использовать регулярные выражения или try-except.

Как ввести несколько чисел, разделённых пробелами, за один раз?

Функция input() возвращает одну строку. Для ввода нескольких чисел используется метод split() и функция map():


numbers = list(map(int, input("Введите числа через пробел: ").split()))

Python file utf 8 (кодировка utf-8 для файлов в python)

Этот код преобразует каждую часть строки в целое число и создает список. Аналогично для float.

Проблема: если хотя бы один элемент не является числом, возникнет ValueError. Для безопасного ввода нескольких чисел необходимо обрабатывать каждое значение отдельно, например в цикле с try-except.

Как ввести дробное число с сохранением точности (например, для финансовых расчётов)?

Тип float может вносить погрешности. Модуль decimal предоставляет тип Decimal для точных десятичных вычислений:


from decimal import Decimal
raw = input("Введите десятичное число: ")
try:
    number = Decimal(raw)
    print(number)
except:
    print("Некорректный ввод.")

Данный подход полезен при работе с денежными суммами или другими величинами, требующими строгой точности.

Проблема: Decimal также может выбросить исключение InvalidOperation при неверном формате. Кроме того, преобразование строки в Decimal занимает больше времени, чем в float.

Типичные ошибки и способы их решения

  • ValueError при преобразовании - возникает, если строка содержит нечисловые символы (буквы, знаки, пробелы). Решение: использовать try-except или предварительную проверку.
  • Пустой ввод - input() возвращает пустую строку, которая не может быть преобразована в число. Решение: проверить длину строки перед преобразованием или обработать исключение.
  • Проблемы с дробной частью - использование int() для дробной строки вызывает ValueError. Нужно выбирать правильный тип (int или float).
  • Лишние пробелы - строка с пробелами в начале или конце не преобразуется. Решение: применить метод strip() перед преобразованием.
  • Неправильный разделитель - в русской локали десятичная запятая вместо точки может вызывать ошибку. Решение: заменить запятую на точку перед преобразованием.
- Python log file (логирование в файл в python)
- Python file methods (методы работы с файлами в python)
- File models in python (модели файлов в python)

Расширенные примеры ввода чисел в Python

Пример 1. Ввод числа с проверкой диапазона

Программа запрашивает число от 1 до 100, повторяя запрос при неверном вводе.

Пример

def get_number_in_range(min_val, max_val):
    while True:
        raw = input(f"Введите число от {min_val} до {max_val}: ")
        try:
            num = int(raw)
            if min_val <= num <= max_val:
                return num
            else:
                print(f"Число должно быть в диапазоне [{min_val}, {max_val}].")
        except ValueError:
            print("Ошибка: требуется целое число.")

result = get_number_in_range(1, 100)
print(f"Введено: {result}")
Введите число от 1 до 100: 150
Число должно быть в диапазоне [1, 100].
Введите число от 1 до 100: abc
Ошибка: требуется целое число.
Введите число от 1 до 100: 50
Введено: 50

Пример 2. Ввод нескольких чисел с разными разделителями

Пользователь вводит числа, разделённые запятыми или пробелами. Программа автоматически определяет разделитель.

Пример

import re
raw = input("Введите числа, разделённые запятыми или пробелами: ")
# извлекаем все числа (целые и дробные) из строки
numbers = [float(x) for x in re.findall(r'-?\d+\.?\d*', raw)]
print("Числа:", numbers)
Введите числа, разделённые запятыми или пробелами: 10 20.5, -3 0.001
Числа: [10.0, 20.5, -3.0, 0.001]

Регулярное выражение -?\d+\.?\d* находит числа, включая отрицательные и дробные.

Пример 3. Безопасный ввод числа с поддержкой отрицательных и десятичных через регулярное выражение

Позволяет вводить целые и дробные числа, включая отрицательные, с проверкой без исключений.

Пример

import re
pattern = r'^-?\d+(\.\d+)?$'
raw = input("Введите число (целое или дробное): ")
if re.match(pattern, raw):
    if '.' in raw:
        number = float(raw)
    else:
        number = int(raw)
    print(f"Введено: {number}")
else:
    print("Некорректный ввод.")
Введите число (целое или дробное): -45.67
Введено: -45.67

Пример 4. Ввод числа с обработкой локали (запятая как десятичный разделитель)

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

Пример

raw = input("Введите число (допускается запятая): ")
raw = raw.replace(',', '.')
try:
    number = float(raw)
    print(f"Преобразовано: {number}")
except ValueError:
    print("Ошибка: введено не число.")
Введите число (допускается запятая): 3,14
Преобразовано: 3.14

Пример 5. Ввод числа с извлечением первого числа из строки (игнорирование лишнего)

Если пользователь вводит строку, содержащую не только число, например "Ответ 42", программа извлекает первое число.

Пример

import re
raw = input("Введите строку, содержащую число: ")
match = re.search(r'-?\d+\.?\d*', raw)
if match:
    number = float(match.group())
    print(f"Извлечённое число: {number}")
else:
    print("Число не найдено.")
Введите строку, содержащую число: Температура -5.2 градуса
Извлечённое число: -5.2

Пример 6. Ввод нескольких чисел с плавающей точкой, разделённых любыми символами

Использование split() с указанием нескольких разделителей через регулярное выражение.

Пример

import re
raw = input("Введите числа (разделители: пробел, запятая, точка с запятой): ")
# разбиваем по одному или более символам-разделителям
parts = re.split(r'[;,\s]+', raw.strip())
numbers = []
for p in parts:
    if p:
        try:
            numbers.append(float(p))
        except ValueError:
            print(f"Пропущен некорректный элемент: {p}")
print("Числа:", numbers)
Введите числа (разделители: пробел, запятая, точка с запятой): 1;2 3,4.5
Пропущен некорректный элемент: 4.5
Числа: [1.0, 2.0, 3.0]

Обратите внимание: элемент 4.5 был пропущен, так как после запятой в строке 3,4.5 разделителем стала запятая, а 4.5 интерпретируется как отдельное значение, но из-за неверного формата (две точки) оно отброшено.

Пример 7. Использование модуля argparse для ввода чисел из командной строки

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

Пример

import argparse
parser = argparse.ArgumentParser(description="Пример ввода числа.")
parser.add_argument('number', type=int, help="Целое число")
args = parser.parse_args()
print(f"Введено число: {args.number}")
$ python script.py 42
Введено число: 42

Ввод числа в Python - comments

En
Python ввести число (python)