Применение input для ввода и print для вывода

Раздел: Ввод-вывод -> Совместное использование print и input

Совместное использование print и input в Python 3

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

name = input("Введите ваше имя: ")
print("Привет,", name, "!")

Python 3 input print (ввод и вывод в python 3)

Введите ваше имя: Александр
Привет, Александр !

Функция input() выводит строку-приглашение и ожидает ввода с клавиатуры. После нажатия Enter введенный текст возвращается в виде строки. Функция print() принимает несколько аргументов и выводит их через пробел. В примере между аргументами автоматически вставляется пробел.

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

Вместо передачи нескольких аргументов в print() можно использовать f-строки (Python 3.6+).

name = input("Ваше имя: ")
age = input("Ваш возраст: ")
print(f"Вас зовут {name}, вам {age} лет.")
Ваше имя: Анна
Ваш возраст: 25
Вас зовут Анна, вам 25 лет.

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

Проблема: Если переменная не является строкой, f-строка преобразует её автоматически. Однако при использовании input() результат всегда строка, поэтому возраст выше хранится как строка. Для арифметических операций требуется явное преобразование (int() или float()).

age = int(input("Ваш возраст: "))
print(f"Через 5 лет вам будет {age + 5}.")

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

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

Метод split() строки позволяет разделить ввод по пробелам.

data = input("Введите два числа через пробел: ")
a, b = map(int, data.split())
print("Сумма:", a + b)
Введите два числа через пробел: 10 20
Сумма: 30

Функция map() применяет int() к каждому элементу списка, полученного после split(). Результат распаковывается в переменные a и b.

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

try:
    a, b = map(int, input().split())
except ValueError:
    print("Ошибка: введите два целых числа.")

Как вывести данные без перевода строки?

Параметр end функции print() заменяет символ перевода строки по умолчанию.

print("Загрузка", end="")
print("...", end="")
print(" готово!")
Загрузка... готово!

Если указать end="", то после вывода не добавляется новая строка, и следующий print продолжает на той же строке.

Ошибка: Забыв указать end, можно получить разрыв строки там, где это не нужно. Также при многократном использовании end="" без пробела текст слипнется.

Как форматировать вывод с выравниванием и фиксированной шириной?

Метод format() и f-строки поддерживают спецификаторы форматирования.

name = "Иван"
age = 30
print("{0:10} {1:3}".format(name, age))
print(f"{name:10} {age:3}")
Иван             30
Иван             30

Цифры после двоеточия обозначают минимальную ширину поля. По умолчанию текст выравнивается влево, числа – вправо.

Проблема: Если значение длиннее указанной ширины, ширина увеличивается автоматически, что может нарушить ровность колонок. Решение – усечение с помощью точки (например, {0:.5}).

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

Используется бесконечный цикл с условием break.

lines = []
while True:
    line = input("Введите строку (пустая - выход): ")
    if line == "":
        break
    lines.append(line)
print("Введены строки:", lines)
Введите строку (пустая - выход): Привет
Введите строку (пустая - выход): Мир
Введите строку (пустая - выход): 
Введены строки: ['Привет', 'Мир']

Цикл читает строки, пока не будет введена пустая. Затем программа выводит все собранные строки.

Ошибка: Если забыть break, цикл станет бесконечным. Если нужно завершать по другому условию (например, "exit"), следует сравнивать с этой строкой.

Как вывести отладочную информацию в поток ошибок?

Параметр file функции print() позволяет направить вывод в стандартный поток ошибок (stderr).

import sys
print("Ошибка: неверный ввод", file=sys.stderr)

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

Проблема: В среде разработки сообщения stderr могут отображаться красным, а пользователь может не увидеть их в консоли. Рекомендуется дублировать важные сообщения в stdout или использовать логирование.

Расширенные примеры использования input и print

Пример 1: Простой интерактивный калькулятор

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

Пример
def calculator():
    try:
        a = float(input("Введите первое число: "))
        b = float(input("Введите второе число: "))
        op = input("Выберите операцию (+, -, *, /): ")
        if op == "+":
            result = a + b
        elif op == "-":
            result = a - b
        elif op == "*":
            result = a * b
        elif op == "/":
            if b == 0:
                raise ZeroDivisionError("Деление на ноль")
            result = a / b
        else:
            print("Неизвестная операция")
            return
        print(f"Результат: {result}")
    except ValueError:
        print("Ошибка: введите числовые значения")
    except ZeroDivisionError as e:
        print(f"Ошибка: {e}")

if __name__ == "__main__":
    calculator()
Введите первое число: 10
Введите второе число: 3
Выберите операцию (+, -, *, /): /
Результат: 3.3333333333333335

Пример 2: Ввод неизвестного количества чисел через пробел и вычисление суммы

Используется split(), map() и функция sum().

Пример
numbers = input("Введите числа через пробел: ")
nums = list(map(int, numbers.split()))
print("Сумма чисел:", sum(nums))
print("Количество чисел:", len(nums))
Введите числа через пробел: 1 2 3 4 5
Сумма чисел: 15
Количество чисел: 5

Пример 3: Использование sys.stdin.readline для быстрого чтения больших объемов данных

Функция sys.stdin.readline() аналогична input(), но работает быстрее при чтении многих строк. Подходит для олимпиадного программирования.

Пример
import sys
data = sys.stdin.readline().strip()
print("Прочитано:", repr(data))
Пример текста
Прочитано: 'Пример текста'

Пример 4: Вывод таблицы с форматированием и выравниванием

Программа выводит таблицу умножения от 1 до 5 с использованием f-строк и ширины поля.

Пример
for i in range(1, 6):
    for j in range(1, 6):
        print(f"{i*j:4}", end="")
    print()
   1   2   3   4   5
   2   4   6   8  10
   3   6   9  12  15
   4   8  12  16  20
   5  10  15  20  25

Пример 5: Ввод пароля без отображения на экране

Модуль getpass предоставляет функцию getpass(), которая не выводит вводимые символы.

Пример
import getpass
password = getpass.getpass("Введите пароль: ")
print("Пароль введен (длина {} символов)".format(len(password)))
Введите пароль: 
Пароль введен (длина 8 символов)

Пример 6: Отладка с помощью repr() и print

Функция repr() возвращает строковое представление объекта, которое часто включает кавычки и спецсимволы, что полезно для отладки.

Пример
user_input = input("Введите что-нибудь: ")
print("Вы ввели:", repr(user_input))
Введите что-нибудь: Hello   World
Вы ввели: 'Hello   World'

Пример 7: Многострочный вывод одной строки с помощью print

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

Пример
print("""
Это первая строка
Это вторая строка
Это третья строка""")
Это первая строка
Это вторая строка
Это третья строка

Ввод и вывод в Python 3 - comments

En
Python 3 input print (python)