Способы ввода двух чисел в программу на Python

Раздел: Ввод-вывод -> Файловый ввод-вывод

Основные способы ввода двух чисел в Python

Какое решение является наиболее эффективным для ввода двух чисел в условиях файлового ввода-вывода?

Наиболее эффективный способ ввода двух чисел, когда данные поступают из файла, - это чтение строки, разбиение её по пробелам или другому разделителю и преобразование в числа с обработкой возможных ошибок. Этот подход универсален, позволяет работать с большими объёмами данных и легко адаптируется под разные форматы.


with open('data.txt', 'r', encoding='utf-8') as f:
    line = f.readline().strip()
    if not line:
        raise ValueError('Файл пуст')
    parts = line.split()
    if len(parts) != 2:
        raise ValueError('В строке должно быть ровно два числа')
    try:
        a, b = map(float, parts)  # или int
    except ValueError as e:
        raise ValueError('Не удалось преобразовать в числа: ' + str(e))
print(f'Введены числа: {a} и {b}')
  

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

Возможные проблемы и их решения:

  • Проблема: Файл не существует. Решение: Проверять существование файла перед открытием или оборачивать в try-except (FileNotFoundError).
  • Проблема: В строке больше или меньше двух чисел. Решение: Проверять длину списка и сообщать об ошибке.
  • Проблема: Числа разделены не пробелами, а запятыми или табуляцией. Решение: Использовать line.split(',') или re.split.

Как ввести два числа с клавиатуры (консольный ввод)?

Самый простой способ - использовать функцию input() и разбить строку на части.


input_str = input('Введите два числа через пробел: ')
a, b = map(int, input_str.split())
print(f'Числа: {a}, {b}')
  

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

Типичная ошибка:

Пользователь вводит одно число или буквы. Решение: Обернуть в try-except для ValueError или использовать цикл до получения корректного ввода.

Как ввести два числа из аргументов командной строки?

Этот способ удобен для автоматизации и скриптов. Числа передаются при запуске программы.


import sys
if len(sys.argv) != 3:
    print('Использование: script.py число1 число2')
    sys.exit(1)
try:
    a = float(sys.argv[1])
    b = float(sys.argv[2])
except ValueError:
    print('Аргументы должны быть числами')
    sys.exit(1)
print(f'Числа из командной строки: {a}, {b}')
  

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

Распространённая проблема:

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

Как прочитать два числа из разных строк одного файла?

Если файл содержит по одному числу на строке, строки читаются последовательно.


with open('nums.txt', 'r') as f:
    lines = [line.strip() for line in f if line.strip()]
    if len(lines) < 2:
        raise ValueError('В файле должно быть не менее двух непустых строк')
    try:
        a = float(lines[0])
        b = float(lines[1])
    except ValueError:
        raise ValueError('Не удалось преобразовать строки в числа')
print(f'Числа: {a}, {b}')
  

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

Ошибка:

Пустые строки в начале или конце файла. Решение: Фильтровать пустые строки.

Как записать два числа в файл (вывод) после ввода?

После получения чисел их можно сохранить в файл для дальнейшего использования.


a = 12
b = 34
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write(f'{a} {b}\n')
print('Числа сохранены в output.txt')
  

Проблема с кодировкой:

По умолчанию open использует кодировку системы, что может привести к ошибкам при чтении на другой платформе. Решение: Явно указывать encoding='utf-8'.

- Python config files (конфигурационные файлы в python)
- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)

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

Как организовать ввод двух чисел из файла с поддержкой разных разделителей и типов?

Предположим, файл input.txt содержит строку вида "12;34" или "12,34". Используем регулярные выражения для гибкого разбора.

Пример

import re
with open('input.txt', 'r', encoding='utf-8') as f:
    content = f.read().strip()
numbers = re.findall(r'-?\d+\.?\d*', content)
if len(numbers) != 2:
    raise ValueError('Найдено не два числа')
a, b = map(float, numbers)
print(f'Извлечённые числа: {a}, {b}')
При содержимом файла "12,34" результат: Извлечённые числа: 12.0, 34.0

Как обработать ввод двух чисел, когда они находятся в разных строках и между ними есть комментарии?

Файл может содержать поясняющий текст. Отфильтруем строки с числами.

Пример

import re
with open('mixed_data.txt', 'r', encoding='utf-8') as f:
    num_lines = []
    for line in f:
        line = line.strip()
        if re.match(r'^-?\d+(\.\d+)?$', line):
            num_lines.append(line)
            if len(num_lines) == 2:
                break
if len(num_lines) < 2:
    raise ValueError('Не удалось найти два числа')
a, b = map(float, num_lines)
print(f'Числа: {a}, {b}')
Если файл содержит:
# Вводные данные
12
# следующая строка
34
Результат: Числа: 12.0, 34.0

Как ввести два числа из потока stdin, перенаправленного из файла?

В Linux/Unix можно перенаправить содержимое файла в stdin. Внутри программы используем sys.stdin.

Пример

import sys
data = sys.stdin.read().strip().split()
if len(data) < 2:
    print('Недостаточно данных', file=sys.stderr)
    sys.exit(1)
a, b = map(float, data[:2])
print(f'Прочитаны числа: {a}, {b}')

Запуск: python script.py < data.txt

Если data.txt содержит "7.5 8.2", вывод: Прочитаны числа: 7.5, 8.2

Как ввести два числа с плавающей точкой и сохранить их в файл с фиксированной точностью?

Используем форматирование с заданной точностью.

Пример

a_str = input('Введите первое число: ')
b_str = input('Введите второе число: ')
try:
    a = float(a_str)
    b = float(b_str)
except ValueError:
    print('Ошибка ввода')
    sys.exit(1)
with open('result.txt', 'w', encoding='utf-8') as f:
    f.write('{:.2f}\n{:.2f}\n'.format(a, b))
print('Числа записаны с двумя знаками после запятой')
При вводе 3.1415 и 2.71828 содержимое result.txt:
3.14
2.72

Как ввести два числа из файла с использованием специальных библиотек (например, pandas)?

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

Пример

import pandas as pd
df = pd.read_csv('data.csv', nrows=2, header=None)
if df.shape[0] < 2:
    raise ValueError('Не хватает строк')
a, b = df.iloc[0, 0], df.iloc[1, 0]
print(f'Первые два числа: {a}, {b}')
При data.csv:
10
20
Результат: Первые два числа: 10, 20

Ввод двух чисел в Python - comments

En
ввод двух чисел python (python)