【风变编程-python语法】第五、六关(消灭该死的重复)-循环-笔记
python基础语法–循环语句的使用
1 for…in…循环
1.1 空房间
1.2 range()函数
2 while 循环语句
2.1 放行条件
2.2 两种循环对比
- [ 练习作业]
(题1) 选择性打印数字
(题 2) 换座位
3 用数据做判断
3.1 布尔运算:用数据做逻辑判断
3.2 布尔值:True (真)和False(假)
4 四个新语句
4.1 break 语句
4.2 continue 语句
4.3 pass 语句
4.4 else 语句
- [ 练习作业]
(题1) 囚徒困境
(题 2) 囚徒困境(2)
(题 3) 查字典
循环语句使得计算机能够重复性地、自动地执行指令
1 for…in…循环语句
格式:
#代码
list=[1,2,3,4,5,6]
for i in range(6):
print(list[i])
#显示
1
2
3
4
5
61
2
3
4
5
6
7
8
9
10
11
其中,i看作空房间,而list中的元素一次排队进入空房间;for结束后,i等于最后进入的元素
list可以是列表、字典、字符串
#代码
#列表取元素
for i in [1,2,3,4,5,6]:
print(i)
#列表取键值
dict = {"日本":"东京","英国":"伦敦","法国":"巴黎"}
for i in dict:
print(i)
#字符串取每个字符(整数、浮点数都是字符串)
for i in "吴承恩":
print(i)
a = "100"
b = "0.01"
for i in a:
print(i)
for i in b:
print(i)
#显示
1
2
3
4
5
6
日本
英国
法国
吴
承
恩
1
0
0
0
.
0
11
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
遍历其他数据集,range()函数:
1)range(X):生成0-X-1的整数序列;;range(a,b) 可生成了一个【取头不取尾】的整数序列
应用于 ①固定代码的重复 、②取数间隔
#代码
#固定代码重复:
for i in range(3):
print("我很棒")
for i in range(8):
print("书桓走的第"+str(i)+"天,想他")
# 取数间隔:
for i in range(0,10,3):
print(i)
# 用for循环完成1-100分别乘以5的计算
for i in range(1,10):
print(i*5)
#显示
我很棒
我很棒
我很棒
书桓走的第0天,想他
书桓走的第1天,想他
书桓走的第2天,想他
书桓走的第3天,想他
书桓走的第4天,想他
书桓走的第5天,想他
书桓走的第6天,想他
书桓走的第7天,想他
0
3
6
9
5
10
15
20
25
30
35
40
451
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2 while 循环
格式:
#代码
a = 0 #先定义变量a,并赋值
while a < 5: #设定一个放行条件:a要小于5,才能办事
a = a + 1 # 满足条件时,就办事:将a+1
print(a) # 继续办事:将a+1的结果打印出来
#显示
1
2
3
4
51
2
3
4
5
6
7
8
9
10
11
while是“当”,后面跟的是一个放行条件,条件被满足时,会循环执行while内部的代码。
这里注意有没有字符缩进,属于while内部的代码和不属于的
#代码:输入密码验证:
password = "" # 变量password用来保存输入的密码
while password!="816":
password=input("尝试输入密码:")
print("欢迎回家!")
#显示
尝试输入密码:123
尝试输入密码:222
尝试输入密码:22
尝试输入密码:556
尝试输入密码:81
尝试输入密码:816
欢迎回家!1
2
3
4
5
6
7
8
9
10
11
12
13
for…in…与while…循环对比:
工作量确定时,用for…in…循环;不确定时,适合用while…循环;
for循环和while循环都可以【把一件事情做N遍】,for更加简洁;
#代码
print("用for..in..循环把诗句打印3遍")
for i in range(1,4) :
print("明日复明日,明日何其多。")
print("用while...循环把诗句打印3遍")
j = 1
while j<4 :
print("明日何其多,明日何其多。")
j =j+1
#显示
用for..in..循环把诗句打印3遍
明日复明日,明日何其多。
明日复明日,明日何其多。
明日复明日,明日何其多。
用while...循环把诗句打印3遍
明日何其多,明日何其多。
明日何其多,明日何其多。
明日何其多,明日何其多。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
【练习题】
1 循环打印
问题:
小美想要用今天学到的循环打印数字1-7,不过,她不喜欢4这个数字……
分析:
for …in…;while… 都可
#代码
print("# while 循环")
n = 0
while n < 7:
n = n+1
if n != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(n)
print("# for 循环")
for num in range(1,8): # 为同时能运行两个循环,新取参数 num。
if num != 4: # 当num != 4,执行打印语句;等于4时不打印。
print(num)1
2
3
4
5
6
7
8
9
10
11
12
13
#输出显示:
# while 循环
1
2
3
5
6
7
# for 循环
1
2
3
5
6
71
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3 用数据做判断
计算机的逻辑判断,只有两种:True(“真”)和False(“假”),叫做【布尔运算】。
while循环要执行,while后的条件必须为“真”!!
①while 条件判断: 先判断,若条件为真,顺利执行直到条件更为假;若条件恒为假不执行,恒为真一直执行。
②while False:不执行;while True: 一直执行
san
4 四个新语句
1) break 语句
break是“打破”,用来跳出并结束循环,一般写作if…break
(如果满足了某一个条件,就提前结束循环。)只能在循环内部使用。写法为:
# break语句搭配for循环
for...in...:
...
if ...:
break
#break语句搭配while循环
while...(条件):
...
if ...:
break1
2
3
4
5
6
7
8
9
10
11
if前缩进4空格,break前缩进8空格
#例子:
while True:
print("上供一对童男童女")
t = input("孙悟空来了么?")
if t == "来了":
break
print("齐天大圣来也,制服了鲤鱼精,陈家庄再也不用上供童男童女了")1
2
3
4
5
6
7
#输出显示:
上供一对童男童女
孙悟空来了么?k
上供一对童男童女
孙悟空来了么?来了
齐天大圣来也,制服了鲤鱼精,陈家庄再也不用上供童男童女了1
2
3
4
5
6
7
2)continue语句
continue是“继续”,当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。只能在循环内部使用。一般写法为:
# continue语句搭配for循环
for...in...:
...
if ...:
continue
...
#continue语句搭配while循环
while...(条件):
...
if ...:
continue
...1
2
3
4
5
6
7
8
9
10
11
12
综合使用continue,break例子:梦姑与虚竹:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从第一题开始重新回答问题。(正确答案:黑暗的冰窖-梦姑-未看清楚)
print("梦姑西夏选驸马的故事:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。")
while True:
q1 = input("第一问:你一生之中,在什么地方最是快乐逍遥?")
if q1!="黑暗的冰窖":
continue #直接回到while
print("答对第一问,下面是第二问:")
q2 = input("第二问:你生平最爱之人,叫什么名字?")
if q2!="梦姑":
continue #直接回到while
print("答对第二问,还有最后一问:")
q3 = input("第三问:你最爱的这个人相貌如何?")
if q3 == "未看清楚":
break
print("都答对了,你是虚竹,正是我要挑选的驸马。")1
2
3
4
5
6
7
8
9
10
11
12
13
14
#输出显示:
梦姑西夏选驸马的故事:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。
第一问:你一生之中,在什么地方最是快乐逍遥?家里
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:
第二问:你生平最爱之人,叫什么名字?莫莫
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:
第二问:你生平最爱之人,叫什么名字?梦姑
答对第二问,还有最后一问:
第三问:你最爱的这个人相貌如何?美丽动人
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:
第二问:你生平最爱之人,叫什么名字?梦姑
答对第二问,还有最后一问:
第三问:你最爱的这个人相貌如何?未看清楚
都答对了,你是虚竹,正是我要挑选的驸马。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3)pass语句
pass是“跳过”,占据一个位置表示“满足条件时,什么都不做”,避免代码报错。
a = int(input("请输入一个整数:"))
if a >= 100:
pass
else:
print("你输入了一个小于100的数字")1
2
3
4
5
#输出显示:
请输入一个整数:20
你输入了一个小于100的数字
Process finished with exit code 0
请输入一个整数:200
Process finished with exit code 01
2
3
4
5
6
7
8
4)else语句
else是“否则”,在条件判断语句见过【if …else…】,其实,else还能跟for循环和while循环配合使用。 用在循环语句后,如果没遇到break,正常结束循环就执行else。
for i in range(5):
a = int(input("请输入0结束循环,你有5次机会:"))
if a == 0:
print("你触发了break语句,导致else语句不会生效。")
break
else:
print("5次循环你都错过了,else语句生效了。")1
2
3
4
5
6
7
# 把之前这段for循环的代码改成while循环,要求运行效果相同
i=0
while i<5:
i=i+1
a = int(input("请输入0结束循环,你有5次机会:"))
if a == 0:
print("你触发了break语句,导致else语句不会生效。")
break
else:
print("5次循环你都错过了,else语句生效了。")1
2
3
4
5
6
7
8
9
10
#输出显示:
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:2
请输入0结束循环,你有5次机会:3
5次机会你都错过了,else语句生效了。
# 把之前这段for循环的代码改成while循环,运行效果相同
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:1
请输入0结束循环,你有5次机会:2
请输入0结束循环,你有5次机会:3
5次机会你都错过了,else语句生效了。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
break,continue必须与if语句连用,pass常在if下。
":循环游戏:猜大小游戏编程:’
一个小游戏:一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。不确定猜多少次,直到猜对为止,输出恭喜你猜对了。
print("猜数字大小游戏开始:")
a=24
while True:
answer =int(input("你来猜我想的数字是什么?"))
if answer
print("猜小了,再猜")
if answer>a:
print("猜大了,再猜")
if answer ==a:
print("恭喜你猜对了")
break1
2
3
4
5
6
7
8
9
10
11
12
#输出显示:
猜数字大小游戏开始:
你来猜我想的数字是什么?1
猜小了,再猜
你来猜我想的数字是什么?50
猜大了,再猜
你来猜我想的数字是什么?25
猜大了,再猜
你来猜我想的数字是什么?23
猜小了,再猜
你来猜我想的数字是什么?24
恭喜你猜对了1
2
3
4
5
6
7
8
9
10
11
12
13
改一下题目:这个游戏只能猜3次,3次都猜不中,就告诉他“失败了”。
print("猜数字大小游戏开始,你来猜我想的数字是什么?")
a=24
for i in range(1,4):
print("这是第" + str(i) + "次猜哟!")
answer =int(input("输入数字:"))
if answer==a:
print("恭喜你猜对了呢!")
break
elif answer>a:
print("猜大了,再猜")
elif answer
print("猜小了,再猜")
else:
print("你已经猜错三次了,失败了,正确答案是"+str(a))1
2
3
4
5
6
7
8
9
10
11
12
13
14
#输出显示:
猜数字大小游戏开始,你来猜我想的数字是什么?
这是第1次猜哟!
输入数字:1
猜小了,再猜
这是第2次猜哟!
输入数字:3
猜小了,再猜
这是第3次猜哟!
输入数字:23
猜小了,再猜
你已经猜错三次了,失败了,正确答案是241
2
3
4
5
6
7
8
9
10
11
12
13
【练习题】
1 囚徒困境
问题:
假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。
请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。
分析:
|--------|B认罪 |B不认|
|A认罪|A10B10|A1B20|
|A不认|A20B1 |A3B3 |
#代码
while True:
A = input("囚犯A,你认罪了么?请答:认罪/不认")
B = input("囚犯B,你认罪了么?请答:认罪/不认")
if A=="认罪"and B=="认罪":
print("A、B都认罪;判处结果:A判10年,B判10年")
elif A=="认罪"and B=="不认":
print("A认罪、B不认罪;判处结果:A判1年,B判20年")
elif A=="不认"and B=="认罪":
print("A不认罪,B认罪;判处结果:A判20年,B判1年")
else:
print("A、B都不认罪;判处结果:A判3年,B判3年")
break1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#输出显示:
囚犯A,你认罪了么?请答:认罪/不认不认
囚犯B,你认罪了么?请答:认罪/不认认罪
A不认罪,B认罪;判处结果:A判20年,B判1年
囚犯A,你认罪了么?请答:认罪/不认认罪
囚犯B,你认罪了么?请答:认罪/不认认罪
A、B都认罪;判处结果:A判10年,B判10年
囚犯A,你认罪了么?请答:认罪/不认不认
囚犯B,你认罪了么?请答:认罪/不认不认
A、B都不认罪;判处结果:A判3年,B判3年1
2
3
4
5
6
7
8
9
10
11
2 囚徒困境(2)
问题:
基于上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:
两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。
现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。。
分析:
在上一个基础上,使用列表或者字典存放每一对实验者的选择情况,当两个都不认停止统计;最后显示每一对的结果。
#代码
n=0
list_result=[]
while True:
n=n+1
A = input("囚犯A,你认罪了么?请答:认罪/不认")
B = input("囚犯B,你认罪了么?请答:认罪/不认")
list_result.append([A,B])
if A=="认罪"and B=="认罪":
print("A、B都认罪;判处结果:A判10年,B判10年")
elif A=="认罪"and B=="不认":
print("A认罪、B不认罪;判处结果:A判1年,B判20年")
elif A=="不认"and B=="认罪":
print("A不认罪,B认罪;判处结果:A判20年,B判1年")
else:
print("A、B都不认罪;判处结果:A判3年,B判3年")
break
print("第"+str(n)+"对实验者出现均不认罪的情况,调查停止!")
for i in range(n):
print("第"+str(i+1)+"对实验者的情况是:"+str(list_result[i]))1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#输出显示:
囚犯A,你认罪了么?请答:认罪/不认认罪
囚犯B,你认罪了么?请答:认罪/不认不认
A认罪、B不认罪;判处结果:A判1年,B判20年
囚犯A,你认罪了么?请答:认罪/不认不认
囚犯B,你认罪了么?请答:认罪/不认认罪
A不认罪,B认罪;判处结果:A判20年,B判1年
囚犯A,你认罪了么?请答:认罪/不认认罪
囚犯B,你认罪了么?请答:认罪/不认认罪
A、B都认罪;判处结果:A判10年,B判10年
囚犯A,你认罪了么?请答:认罪/不认不认
囚犯B,你认罪了么?请答:认罪/不认认罪
A不认罪,B认罪;判处结果:A判20年,B判1年
囚犯A,你认罪了么?请答:认罪/不认认罪
囚犯B,你认罪了么?请答:认罪/不认认罪
A、B都认罪;判处结果:A判10年,B判10年
囚犯A,你认罪了么?请答:认罪/不认不认
囚犯B,你认罪了么?请答:认罪/不认不认
A、B都不认罪;判处结果:A判3年,B判3年
第6对实验者出现均不认罪的情况,调查停止!
第1对实验者的情况是:["认罪", "不认"]
第2对实验者的情况是:["不认", "认罪"]
第3对实验者的情况是:["认罪", "认罪"]
第4对实验者的情况是:["不认", "认罪"]
第5对实验者的情况是:["认罪", "认罪"]
第6对实验者的情况是:["不认", "不认"]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
3 查字典
问题:
练习目标
通过这个练习,你会学会综合使用循环、数据提取和条件判断。
练习要求
我很喜欢看电影,我回忆了一下,这两年我觉得还不错的国产电影。
下面,会将电影的影片名和主演放在字典里,如movie = {"妖猫传’:["黄轩’,"染谷将太’]}。
需要你补充一些代码,让其他人只要输入演员名,就打印出:××出演了电影××。
分析:
在上一个基础上,使用列表或者字典存放每一对实验者的选择情况,当两个都不认停止统计;最后显示每一对的结果。
#代码
list_movie={"妖猫传":["黄轩","染谷将太","刘昊然"],"无问西东":["章子怡","王力宏","祖峰"],"超时空同居":["佟丽娅","雷佳音"],"花木兰":["刘亦菲"]}
while True:
actor = input("你想查询哪位演员?")
for movie in list_movie:
actor_list=list_movie[movie]
if actor in actor_list:
print(actor+"出演了电影"+movie)1
2
3
4
5
6
7
8
9
10
#输出显示:
你想查询哪位演员?刘亦菲
刘亦菲出演了电影花木兰
你想查询哪位演员?黄轩
黄轩出演了电影妖猫传
你想查询哪位演员?佟丽娅
佟丽娅出演了电影超时空同居
你想查询哪位演员?章子怡
章子怡出演了电影无问西东
你想查询哪位演员?1
2
3
4
5
6
7
8
9
10
11
资源链接
、