目录
第7章 用户输入和while循环
7.1 函数input()的工作原理
message = input('Tell me something, and I will repeat it back to you:')
print(message)
Tell me something, and I will repeat it back to you: i love you
i love you
7.1.1 编写清晰的程序
name = input('Please enter your name: ')
print(f"\nHello, {name}!")
Please enter your name: Amicia
Hello, Amicia!
prompt = 'If you tell us who you are, we can personalize the message you see.'
prompt += '\nWhat is your first name? '
name = input(prompt)
print(f"\nHello, {name}!")
If you tell us who you are, we can personalize the message you see.
What is your first name? Eric
Hello, Eric!
7.1.2 使用int()来获取数值输入
age = input('How old are you? ')
print(age)
How old are you? 21
21
age = input('How old are you? ')
print(age)
print(age >= 18)
print(age >= 18)
TypeError: '>=' not supported between instances of 'str' and 'int'
age = input('How old are you? ')
age = int(age)
print(age)
print(age >= 18)
How old are you? 21
21
True
height = input('How tall are you, in inches? ')
height = int(height)
if height >= 48:
print("\nYou're tall enough to ride!")
else:
print("\nYou'll be able to ride when you're a little older.")
How tall are you, in inches? 100
You're tall enough to ride!
7.1.3 求模运算符
number = input("Enter a numeber, and I'll tell you if it's even or odd: ")
number = int(number)
if number % 2 == 0:
print(f"\nThe number {number} is even.")
else:
print(f"\nThe number {number} is odd.")
Enter a numeber, and I'll tell you if it's even or odd: 8
The number 8 is even.
7.2 while循环
7.2.1 使用while循环
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1
1
2
3
4
5
7.2.2 让用户选择何时退出
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':
message = input(prompt)
print(message)
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. hello
hello
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. nihao
nihao
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit
quit
我们将变量message的初始值设置为空字符串"",让Python首次执行while代码行时有可供检查的东西。Python首次执行while语句时,需要将message的值与“quit”进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法继续运行程序。为解决这个问题,必须给变量message指定初始值。虽然这个初始值只是一个空字符串,但符合要求,能够让Python执行while循环所需的比较。
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':
message = input(prompt)
if message != 'quit':
print(message)
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. dear
dear
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. you
you
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit
7.2.3 使用标志
在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态,这个变量称为标志,充当程序的交通信号灯。
prompt = "\nTell me something, and I will repeat it back to you."
prompt += "\nEnter 'quit' to end the program. "
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
Tell me something, and I will repeat it back to you.
Enter 'quit' to end the program. hi
hi
Tell me something, and I will repeat it back to you.
Enter 'quit' to end the program. uit
uit
Tell me something, and I will repeat it back to you.
Enter 'quit' to end the program. quit
7.2.4 使用break退出循环
prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "
while True:
city = input(prompt)
if city == 'quit':
break
else:
print(f"I'd love to go to {city.title()}!")
Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) paris
I'd love to go to Paris!
Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) beijing
I'd love to go to Beijing !
Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) quit
在任何Python循环中都可使用break语句。
7.2.5 在循环中使用continue
current_number = 0
while current_number < 10:
current_number += 1
if current_number % 2 == 0:
continue
print(current_number)
1
3
5
7
9
7.2.6 避免无限循环
x = 1
while x <= 5:
print(x)
x += 1
1
2
3
4
5
如果遗漏代码,程序将无限执行!
x = 1
while x <= 5:
print(x)
7.3 使用while循环处理列表和字典
for循环是一种遍历列表的有效方式,但不应在for循环中修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用while循环。通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。
7.3.1 在列表之间移动元素
# 首先,创建一个待验证用户列表
# 和一个用于存储已验证用户的空列表
unconfirmed_users = ['alice', 'brain', 'candace']
confirmed_users = []
# 验证每个用户,直到没有未验证用户为止
# 将每个经过验证的用户都移到已验证用户列表中
while unconfirmed_users:
current_user = unconfirmed_users.pop()
print(f"Verifying user: {current_user.title()}")
confirmed_users.append(current_user)
# 显示所有已验证的用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
print(confirmed_user.title())
Verifying user: Candace
Verifying user: Brain
Verifying user: Alice
The following users have been confirmed:
Candace
Brain
Alice
7.3.2 删除为特定值的所有列表元素
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
7.3.3 使用用户输入来填充字典
responses = {}
# 设置一个标志,指出调查是否继续
polling_active = True
while polling_active:
# 提示输入被调查者的名字和回答
name = input("\nWhat is you name? ")
response = input("Which mountain would you like to climb someday? ")
# 将回答存储在字典中
responses[name] = response
# 看看是否还有人要参与调查
repeat = input("Would you like to let anothert person respond? (yes / no) ")
if repeat == 'no':
polling_active = False
# 调查结束,显示结果
print("\n--- Pool Results ---")
for name, response in responses.items():
print(f"{name} would like to climb {response}.")
What is you name? Jim
Which mountain would you like to climb someday? huaguoshan
Would you like to let anothert person respond? (yes / no) yes
What is you name? tom
Which mountain would you like to climb someday? ximalaya
Would you like to let anothert person respond? (yes / no) no
--- Pool Results ---
Jim would like to climb huaguoshan.
tom would like to climb ximalaya.