每篇 Python 都以 Shell 做对比开头,但是确实这样学起来对于我来说是简单也快速了很多,同概念的内容可以加快理解,只是语言格式不同,
while 循环一般都是用数字做比较来控制循环的运行。
while 语法
num = 1
while num <= 5:
print("这是第 " + str(num) + " 次循环")
num+=1
---
# 运行结果
这是第 1 次循环
这是第 2 次循环
这是第 3 次循环
这是第 4 次循环
这是第 5 次循环
while 结合 input()
可以让用户选择何时退出循环,可以想象场景是一个游戏,用户想要继续玩就继续循环,想要退出就输入指定字符串退出
print_info = "输入 quit 退出程序,否则您可以输入任何您想输入的内容:"
message = ""
while message != 'quit':
message = input(print_info)
if message != 'quit':
print(message)
---
# 运行结果
输入 quit 退出程序,否则您可以输入任何您想输入的内容:123
123
输入 quit 退出程序,否则您可以输入任何您想输入的内容:!@%
!@%
输入 quit 退出程序,否则您可以输入任何您想输入的内容:Hello World!
Hello World!
输入 quit 退出程序,否则您可以输入任何您想输入的内容:quit
一开始如果不定义,message 的空变量,程序会报错,因为一开始 message 没有值的话,会导致第一次 while 循环时无法判断不存在的变量
中间如果不加入 if 语句,程序会将 quit 也打印出来。
while 使用标志
在很多场景中,程序也会因为其他的一系列意外事件导致程序异常退出,要判断这么多的时间,要写的判断也相当复杂了
可以通过定义一个变量来显示程序的状态,这个变量就叫标志, 标志为 True 时,程序运行,反之,程序停止,这样 while 只需要判断标志变量即可
print_info = "输入 quit 退出程序,否则您可以输入任何您想输入的内容:"
tag = True
while tag:
message = input(print_info)
if message == 'quit':
tag = False
else:
print(message)
---
# 运行结果
输入 quit 退出程序,否则您可以输入任何您想输入的内容:ads
ads
输入 quit 退出程序,否则您可以输入任何您想输入的内容:asdf
asdf
输入 quit 退出程序,否则您可以输入任何您想输入的内容:quit
while 循环控制
在无限循环(while True)的场景中,适用于退出程序。无限循环这里也不过多解释,我还是从 Shell 学过来的~
循环控制适用于 Python 中的所有循环语句,已知的 for
和 while
break 退出循环
使用 break 控制循环,break 会直接中断并退出循环。
print_info = "请输入你最喜欢的城市(输入quit将退出程序): "
while True:
city = input(print_info)
if city == "quit":
break
else:
print("我最喜欢的城市是" + city + "!\n")
---
# 运行结果
请输入你最喜欢的城市(输入quit将退出程序): 四川达州
我最喜欢的城市是四川达州!
请输入你最喜欢的城市(输入quit将退出程序): Beijing
我最喜欢的城市是Beijing!
请输入你最喜欢的城市(输入quit将退出程序): quit
continue 跳过循环
使用 continue 控制循环,会跳过 continue 之后当次循环的后续操作,继续进行下一次循环
打印数字比较直观的看到 continue 的功能
num = 0
while num < 10:
num += 1
if num == 5:
continue
print(num)
---
# 运行结果
1
2
3
4
6
7
8
9
10
以上示例中并没有打印数字 5,5后面的数字也依然打印输出了,这就是 continue 的功能。
练习
编写一个循环,提示用户输入一系列的披萨配料,并在用户输入 quit 时退出循环
print(,end=’’)表示打印结果后不换行
print_info = "请输入你需要的披萨配料(输入quit将退出程序): "
Ingredients = []
while True:
pizza = input(print_info)
if pizza == 'quit':
break
print("已经将 " + pizza + " 加入您的配料表")
Ingredients.append(pizza)
print("\n请检查您的pizza配料表,分别是:", end='')
for Ingred in Ingredients:
print(Ingred, end=' ')
---
# 运行结果
请输入你需要的披萨配料(输入quit将退出程序): 盐
已经将 盐 加入您的配料表
请输入你需要的披萨配料(输入quit将退出程序): 奶油
已经将 奶油 加入您的配料表
请输入你需要的披萨配料(输入quit将退出程序): 榴莲
已经将 榴莲 加入您的配料表
请输入你需要的披萨配料(输入quit将退出程序): quit
请检查您的pizza配料表,分别是:盐 奶油 榴莲
电影院根据年龄不同,票价不同,写一个循环,用来告诉观众各个年龄段的票价
# 3岁以下免费
# 3-12岁 $10
# 12岁以上 $15
age_info = "请输入你想要知道的年龄段,你将会获得对应的票价:"
active = True
while active:
age_info = int(input(age_info))
if age_info < 3:
print("您好," + str(age_info) + "岁观影是免费的!")
elif 12 >= age_info >= 3:
print("您好," + str(age_info) + "岁对应的票价为 $10")
elif age_info > 12:
print("您好," + str(age_info) + "岁对应的票价为 $15")
active = False
---
# 运行多次结果
请输入你想要知道的年龄段,你将会获得对应的票价:2
您好,2岁观影是免费的!
请输入你想要知道的年龄段,你将会获得对应的票价:3
您好,3岁对应的票价为 $10
请输入你想要知道的年龄段,你将会获得对应的票价:12
您好,12岁对应的票价为 $10
请输入你想要知道的年龄段,你将会获得对应的票价:13
您好,13岁对应的票价为 $15
请输入你想要知道的年龄段,你将会获得对应的票价:56
您好,56岁对应的票价为 $15
while 循环处理列表
for 循环是一种遍历列表的有效方式,但在 for 循环中不应该修改列表,否则将导致 Python 难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用 while 循环。
在真实场景中,一个列表中包含了注册未验证的用户,验证后存入另一个列表
un_users = ['feiyi', 'mupei', 'jinfeng']
in_users = []
while un_users:
# 使用函数pop()弹出列表元素
current_user = un_users.pop()
print('验证用户:' + current_user.title())
in_users.append(current_user)
print('\n已验证的用户如下:')
for user in in_users:
print(user.title())
---
# 运行多次结果
验证用户:Jinfeng
验证用户:Mupei
验证用户:Feiyi
已验证的用户如下:
Jinfeng
Mupei
Feiyi
通过 while 循环删除列表中特定的值
适用于列表中有大量重复值时使用
pets = ['dog', 'cat', 'fish', 'cat', 'rabbit']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
---
# 运行多次结果
['dog', 'cat', 'fish', 'cat', 'rabbit']
['dog', 'fish', 'rabbit']
while 循环处理字典
通过 while 循环的方式做一个简单的调查问卷
# 定义一个空字典
responses = {}
# 设置一个标志,用来结束循环
active = True
while active:
name = input('请输入你的名字:')
response = input("请告诉我你最喜欢的城市:")
responses[name] = response
repeat = input("还要继续调查下一个人吗(yes/no)")
if repeat == 'no':
active = False
print("\n------调查结果------")
for name,response in responses.items():
print(name + ' 最喜欢的城市是 ' + response)
---
# 运行多次结果
请输入你的名字:FeiYi
请告诉我你最喜欢的城市:四川达州
还要继续调查下一个人吗(yes/no)yes
请输入你的名字:MuPei
请告诉我你最喜欢的城市:四川达州
还要继续调查下一个人吗(yes/no)no
------调查结果------
FeiYi 最喜欢的城市是 四川达州
MuPei 最喜欢的城市是 四川达州
练习
定义一个列表 travel_cities,其中包含了城市的名字,用来计划旅游的城市。定义另一个列表 cities_visited,依次去过的城市存入该列表。
travel_cities = ['西安', '达州', '北京', '云南']
cities_visited = []
while travel_cities:
current_city = travel_cities.pop()
print('我已经去过 ' + current_city + ' 了')
cities_visited.append(current_city)
---
# 运行多次结果
我已经去过 云南 了
我已经去过 北京 了
我已经去过 达州 了
我已经去过 西安 了
基于上题,西安一共去了 2 次,以后不再去了,将西安删除
travel_cities = ['西安', '达州', '西安', '北京', '云南']
print('西安已经去过多次,以后不去了!')
while '西安' in travel_cities:
travel_cities.remove('西安')
print(travel_cities)
---
# 运行多次结果
西安已经去过多次,以后不去了!
['达州', '北京', '云南']
while 循环字典的练习,就以上那个够了。