分享

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

 xfr 2020-09-15

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])#显示1234561234567891011
  •  其中,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)#显示123456日本
英国
法国
吴
承
恩1000.0112345678910111213141516171819202122232425262728293031323334353637383940414243
  • 遍历其他数据集,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天,想他036951015202530354045123456789101112131415161718192021222324252627282930313233343536373839

2 while 循环

  • 格式:

#代码
a = 0                #先定义变量a,并赋值while a < 5:         #设定一个放行条件:a要小于5,才能办事
   a = a + 1  # 满足条件时,就办事:将a+1
   print(a)   # 继续办事:将a+1的结果打印出来
#显示123451234567891011
  •  while是“当”,后面跟的是一个放行条件,条件被满足时,会循环执行while内部的代码。

  • 这里注意有没有字符缩进,属于while内部的代码和不属于的

#代码:输入密码验证:
password = ''  # 变量password用来保存输入的密码while password!='816':
   password=input('尝试输入密码:')print('欢迎回家!')#显示
尝试输入密码:123尝试输入密码:222尝试输入密码:22尝试输入密码:556尝试输入密码:81尝试输入密码:816欢迎回家!12345678910111213

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 = 1while j<4 :
   print('明日何其多,明日何其多。')
   j =j+1#显示
用for..in..循环把诗句打印3遍
明日复明日,明日何其多。
明日复明日,明日何其多。
明日复明日,明日何其多。
用while...循环把诗句打印3遍
明日何其多,明日何其多。
明日何其多,明日何其多。
明日何其多,明日何其多。12345678910111213141516171819

【练习题】

1 循环打印

  • 问题:
    小美想要用今天学到的循环打印数字1-7,不过,她不喜欢4这个数字……

分析:
for …in…;while… 都可

#代码print('# while 循环')n = 0while 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)12345678910111213
 #输出显示:
 
# while 循环123567# for 循环12356712345678910111213141516

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 ...:
       break1234567891011

if前缩进4空格,break前缩进8空格

#例子:while True:
   print('上供一对童男童女')
   t = input('孙悟空来了么?')
   if t == '来了':
       breakprint('齐天大圣来也,制服了鲤鱼精,陈家庄再也不用上供童男童女了')1234567
#输出显示:

上供一对童男童女
孙悟空来了么?k
上供一对童男童女
孙悟空来了么?来了
齐天大圣来也,制服了鲤鱼精,陈家庄再也不用上供童男童女了1234567
  • 2)continue语句

  • continue是“继续”,当某个条件被满足的时候,触发continue语句,将跳过之后的代码,直接回到循环的开始。只能在循环内部使用。一般写法为:

 # continue语句搭配for循环for...in...:
   ...
   if ...:
       continue
   ...#continue语句搭配while循环while...(条件):
   ...
   if ...:
       continue
   ...123456789101112
  • 综合使用continue,break例子:梦姑与虚竹:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从第一题开始重新回答问题。(正确答案:黑暗的冰窖-梦姑-未看清楚)

print('梦姑西夏选驸马的故事:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。')while True:
    q1 = input('第一问:你一生之中,在什么地方最是快乐逍遥?')
    if q1!='黑暗的冰窖':
        continue #直接回到while
    print('答对第一问,下面是第二问:')
    q2 = input('第二问:你生平最爱之人,叫什么名字?')
    if q2!='梦姑':
        continue #直接回到while
    print('答对第二问,还有最后一问:')
    q3 = input('第三问:你最爱的这个人相貌如何?')
    if q3 == '未看清楚':
        breakprint('都答对了,你是虚竹,正是我要挑选的驸马。')1234567891011121314
#输出显示:

梦姑西夏选驸马的故事:只有连续答对三个问题,才能判定他就是西夏公主的意中人;否则,只要有任何一题错,都要换人从头开始回答问题。
第一问:你一生之中,在什么地方最是快乐逍遥?家里
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:第二问:你生平最爱之人,叫什么名字?莫莫
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:第二问:你生平最爱之人,叫什么名字?梦姑
答对第二问,还有最后一问:第三问:你最爱的这个人相貌如何?美丽动人
第一问:你一生之中,在什么地方最是快乐逍遥?黑暗的冰窖
答对第一问,下面是第二问:第二问:你生平最爱之人,叫什么名字?梦姑
答对第二问,还有最后一问:第三问:你最爱的这个人相貌如何?未看清楚
都答对了,你是虚竹,正是我要挑选的驸马。123456789101112131415161718
  • 3)pass语句

  • pass是“跳过”,占据一个位置表示“满足条件时,什么都不做”,避免代码报错。

a = int(input('请输入一个整数:'))if a >= 100:
    passelse:
    print('你输入了一个小于100的数字')12345
#输出显示:

请输入一个整数:20你输入了一个小于100的数字
Process finished with exit code 0请输入一个整数:200Process finished with exit code 012345678
  • 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语句不会生效。')    
        breakelse:
    print('5次循环你都错过了,else语句生效了。')1234567
# 把之前这段for循环的代码改成while循环,要求运行效果相同
i=0while i<5:
    i=i+1
    a = int(input('请输入0结束循环,你有5次机会:'))
    if a == 0:
        print('你触发了break语句,导致else语句不会生效。')    
        breakelse:
    print('5次循环你都错过了,else语句生效了。')12345678910
#输出显示:

请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:2请输入0结束循环,你有5次机会:35次机会你都错过了,else语句生效了。
# 把之前这段for循环的代码改成while循环,运行效果相同
请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:1请输入0结束循环,你有5次机会:2请输入0结束循环,你有5次机会:35次机会你都错过了,else语句生效了。123456789101112131415

break,continue必须与if语句连用,pass常在if下。

‘:循环游戏:猜大小游戏编程:’

  • 一个小游戏:一个人在心里想好一个数,比如24,然后让另一个人猜。如果他猜的数比24小,告诉他“太小了”,如果他猜的数比24大,告诉他“太大了”。不确定猜多少次,直到猜对为止,输出恭喜你猜对了。

print('猜数字大小游戏开始:')a=24while True:
    answer =int(input('你来猜我想的数字是什么?'))
    if answer<a:
        print('猜小了,再猜')
    if answer>a:
        print('猜大了,再猜')
    if answer ==a:
        print('恭喜你猜对了')
        break123456789101112
#输出显示:

猜数字大小游戏开始:你来猜我想的数字是什么?1猜小了,再猜
你来猜我想的数字是什么?50猜大了,再猜
你来猜我想的数字是什么?25猜大了,再猜
你来猜我想的数字是什么?23猜小了,再猜
你来猜我想的数字是什么?24恭喜你猜对了12345678910111213
  • 改一下题目:这个游戏只能猜3次,3次都猜不中,就告诉他“失败了”。

print('猜数字大小游戏开始,你来猜我想的数字是什么?')a=24for i in range(1,4):
    print('这是第' + str(i) + '次猜哟!')
    answer =int(input('输入数字:'))
    if answer==a:
        print('恭喜你猜对了呢!')
        break
    elif answer>a:
        print('猜大了,再猜')
    elif answer<a:
        print('猜小了,再猜')else:
    print('你已经猜错三次了,失败了,正确答案是'+str(a))1234567891011121314
#输出显示:

猜数字大小游戏开始,你来猜我想的数字是什么?
这是第1次猜哟!
输入数字:1猜小了,再猜
这是第2次猜哟!
输入数字:3猜小了,再猜
这是第3次猜哟!
输入数字:23猜小了,再猜
你已经猜错三次了,失败了,正确答案是2412345678910111213

【练习题】

1 囚徒困境

  • 问题:
    假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。

请写个代码:当两人都抵赖时,打印判决,代码结束;若为其他结果,则在打印判决后继续循环。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多