风变编程python 笔记-【风变编程-python语法】第五、六关(消灭该死的重复)-循环-笔记...

【风变编程-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

资源链接

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值