Применение input для ввода и print для вывода
Совместное использование 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("""
Это первая строка
Это вторая строка
Это третья строка""")
Это первая строка Это вторая строка Это третья строка