ПРИМЕЧАНИЕ
Sublime Text не запускает программы, запрашивающие входные данные у пользователя . Вы
можете использовать Sublime Text для создания таких программ, но запускать их придется
из терминального окна . См . «Запуск программ Python в терминале», с . 29 .
Содержательные подсказки
Каждый раз, когда в вашей программе используется функция
input()
, вы должны
включать четкую, понятную подсказку, которая точно сообщит пользователю,
какую информацию вы от него хотите получить. Подойдет любое предложение,
которое сообщает пользователю, что нужно вводить. Пример:
greeter.py
name = input("Please enter your name: ")
print("Hello, " + name + "!")
Добавьте пробел в конце подсказки (после двоеточия в предыдущем примере),
чтобы отделить подсказку от данных, вводимых пользователем, и четко показать,
где должен вводиться текст. Пример:
Please enter your name: Eric
Hello, Eric!
Иногда подсказка занимает более одной строки. Например, вы можете сообщить поль-
зователю, для чего программа запрашивает данные. Текст подсказки можно сохранить
в переменной и передать эту переменную функции
input()
: вы строите длинное при-
глашение из нескольких строк, а потом выполняете одну компактную команду
input()
.
greeter.py
prompt = "If you tell us who you are, we can personalize the messages you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print("\nHello, " + name + "!")
В этом примере продемонстрирован один из способов построения длинных строк.
Первая часть длинного сообщения сохраняется в переменной
prompt
. Затем опера-
тор
+=
объединяет текст, хранящийся в
prompt
, с новым фрагментом текста.
Теперь содержимое
prompt
занимает две строки (вопросительный знак снова от-
деляется от ввода пробелом):
If you tell us who you are, we can personalize the messages you see.
What is your first name? Eric
Hello, Eric!
122 Глава 7 • Ввод данных и циклы while
Использование int() для получения числового ввода
При использовании функции
input()
Python интерпретирует все данные, введен-
ные пользователем, как строку. В следующем сеансе интерпретатора программа
запрашивает у пользователя возраст:
>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'
Пользователь вводит число 21, но, когда мы запрашиваем у Python значение
age
, выводится
'21'
— представление введенного числа в строковом формате.
Кавычки, в которые заключены данные, указывают на то, что Python интерпре-
тирует ввод как строку. Но попытка использовать данные как число приведет
к ошибке:
>>> age = input("How old are you? ")
How old are you? 21
>>> age >= 18
Traceback (most recent call last):
File "", line 1, in
TypeError: unorderable types: str() >= int()
Когда вы пытаетесь сравнить введенные данные с числом в точке , Python выдает
ошибку, потому что не может сравнить строку с числом: строка
'21'
, хранящаяся
в
age
, не сравнивается с числовым значением 18; происходит ошибка .
Проблему можно решить при помощи функции
int()
, интерпретирующей строку
как числовое значение. Функция
int()
преобразует строковое представление числа
в само число:
>>> age = input("How old are you? ")
How old are you? 21
>>> age = int(age)
>>> age >= 18
True
В этом примере введенный текст
21
интерпретируется как строка, но затем он
преобразуется в числовое представление вызовом
int()
в точке . Теперь Python
может проверить условие: сравнить переменную
age
(которая теперь содержит
числовое значение 21) с 18. Условие «значение
age
больше или равно 18» выпол-
няется, и результат проверки равен
True
.
Как использовать функцию
int()
в реальной программе? Допустим, программа
проверяет рост пользователя и определяет, достаточен ли он для катания на ат-
тракционе:
rollercoaster.py
height = input("How tall are you, in inches? ")
height = int(height)
Как работает функция input() 123
if height >= 36:
print("\nYou're tall enough to ride!")
else:
print("\nYou'll be able to ride when you're a little older.")
Программа может сравнить
height
с 36, потому что строка
height
=
int(height)
преобразует входное значение в число перед проведением сравнения. Если введен-
ное число больше или равно 36, программа сообщает пользователю, что он прошел
проверку:
How tall are you, in inches? 71
You're tall enough to ride!
Если пользователь вводит числовые данные, которые используются в вашей про-
грамме для вычислений и сравнений, обязательно преобразуйте введенное значение
в его числовой эквивалент.
Оператор вычисления остатка
При работе с числовыми данными может пригодиться оператор вычисления остат-
ка (
%
), который делит одно число на другое и возвращает остаток:
>>> 4 % 3
1
>>> 5 % 3
2
>>> 6 % 3
0
>>> 7 % 3
1
Оператор
%
не сообщает частное от целочисленного деления; он возвращает только
остаток.
Когда одно число нацело делится на другое, остаток равен 0, и оператор
%
возвра-
щает 0. Например, этот факт может использоваться для проверки четности или
нечетности числа:
even_or_odd.py
number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)
if number % 2 == 0:
print("\nThe number " + str(number) + " is even.")
else:
print("\nThe number " + str(number) + " is odd.")
Четные числа всегда делятся на 2. Следовательно, если остаток от деления на 2
равен 0 (
number
%
2
==
0
), число четное, а если нет — нечетное.
Enter a number, and I'll tell you if it's even or odd: 42
The number 42 is even.
124 Глава 7 • Ввод данных и циклы while
Ввод данных в Python 2 .7
Если вы работаете с Python 2.7, для запроса данных у пользователя следует ис-
пользовать функцию
raw_input()
. Эта функция интерпретирует весь ввод как
строку — точно так же, как функция
input()
в Python 3.
В Python 2.7 также есть функция
input()
, но эта функция интерпретирует пользо-
вательский ввод как код Python и пытается выполнить его. В лучшем случае Python
не сможет интерпретировать введенные данные, и вы получите сообщение об ошиб-
ке; в худшем случае будет выполнен код, который вы выполнять не собирались.
Итак, в Python 2.7 вместо функции
input()
используется функция
raw_input()
.
Достарыңызбен бөлісу: |