零基础 学 python开发 (Genius套餐A)九

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89956977

夜光序言:

 

 

画者说,古风是一眼万水千山、回眸成卷。

晕一滴墨染,临一副水墨嫣然点睛乱;

 

 

 

 

 

正文:

2.6 循环注意事项 
 
2.6.1 目标 
循环语句是程序设计中很重要的一种语句类型,相比顺序语句与条件语句要复杂得多,

我们必须掌握循环语句在使用中的注意事项。
 



2.6.2 for 循环注意事项 


1、循环变量是控制循环次数的变量,它是自动变化的,不要在循环中人为地改变它,
不然会出现逻辑上的混乱,甚至出现意想不到的结果,例如下面的程序: 
 

for i in range(5):
 print(i)
 i=i+1


结果:
0
1
2
3
4



2、应该避免 step=0 的情况出现,如果 step=0 那么变量不变化,一直原地踏步,循环是没有办法进行的。例如: 
 

for i in range(1,5,0):
 print(i)


3、for 循环在正常退出时循环变量的值不会等于 stop 值,例如下面程序判断 n 是否为素数: 

n=input("Enter: ")
n=int(n)
for d in range(2,n):
 if n%d==0:
 break
if d==n:
 print(n,"is a prime")
else:
 print(n,"is not a prime") 


 



结果:
Enter: 7



7 is not a prime


这个程序显然是错误的,程序原本以为 break 退出时会有 d<n,正常退出时必定 d=n,
由此判断 n 是否为素数,但是程序正常退出时 d=n-1,仍然 d<n。

但是用 while 循环是正确的:
 

n=input("Enter: ")
n=int(n)
d=2
while d<n:
 if n%d==0:
 break
 d=d+1
if d==n:
 print(n,"is a prime")
else:
 print(n,"is not a prime")



 
2.6.3 for 与 while 循环比较 


实际上 for 与 while 在大多数情况下是可以互相替代的,例如求 100 内整数的和用 for
循环写:

s=0
for i in range(101):
 s=s+i
print(s)
如果用 while 循环写:
s=0
i=1
while i<=100:
 s=s+i
 i=i+1
print(s)


最大不同的是 while 循环的循环变量在 while 之前要初始化,变量的变化要自己控制,循环条件要自己写。相对来说 for 循环要简单一些,因为 for 循环的变量变化是有规律的等差数列变化,而while循环的变量变化可以时任意的。因此如果循环变量是有规律的变化的,那么建议使用 for 循环,如果循环变量是无规律的,建议使用 while 循环。


2.6.4 【案例】能喝多少瓶啤酒 


1、案例描述 
啤酒 2 元一瓶,4 个啤酒瓶盖子可以免费换 1 瓶啤酒,2 个空瓶子可以免费换 1 瓶啤酒,
现在有 10 元钱,不允许再有别的规则,那么总共可以喝多少瓶啤酒?
2、案例分析 
设置 beers,caps,bottles 变量代表啤酒数、盖子数、瓶子数,用一个循环来进行,只要
beers>0 就表示还没有进行完毕,喝完这 beers 瓶啤酒,再次得到 beers 个盖子与瓶子,加到
原来的 caps,bottles 变量中。 如果 caps>=4 那么可以用它们来换取 caps//4 瓶啤酒,余下
caps%4 个盖子,只要 bottles>=2 就可以换取 bottoles//2 瓶啤酒,余下 bottles%2 个瓶子,当啤
酒喝完,余下的盖子与瓶子都换不出更多的啤酒时就结束。
3、案例代码 

m = 10
beers = m // 2
caps = 0
bottles = 0
count = 0
while beers > 0:
 caps = caps + beers
 bottles = bottles + beers
 count = count + beers
 print("这次喝掉%d 瓶啤酒,总计%d 瓶啤酒" % (beers, count))
 beers = 0
 print(" (%d 瓶啤酒, %d 个盖子, %d 个瓶子)" % (beers, caps, bottles))
 if caps >= 4:
 print(" %d 个盖子换%d 瓶啤酒" % (caps - caps % 4, caps // 4))
 beers = beers + caps // 4
 caps = caps % 4
 if bottles >= 2:
 print(" %d 个瓶子换%d 瓶啤酒" % (bottles - bottles % 2, bottles // 2))
 beers = beers + bottles // 2
 bottles = bottles % 2
 print(" (%d 瓶啤酒, %d 个盖子, %d 个瓶子)" % (beers, caps, bottles))
print("总计喝调%d 瓶啤酒,剩下%d 个盖子和%d 个瓶子" % (count, caps, bottles))


结果:
这次喝掉 5 瓶啤酒,总计 5 瓶啤酒
 (0 瓶啤酒, 5 个盖子, 5 个瓶子)
 4 个盖子换 1 瓶啤酒
 4 个瓶子换 2 瓶啤酒
 (3 瓶啤酒, 1 个盖子, 1 个瓶子)
这次喝掉 3 瓶啤酒,总计 8 瓶啤酒
 (0 瓶啤酒, 4 个盖子, 4 个瓶子)
 4 个盖子换 1 瓶啤酒
 4 个瓶子换 2 瓶啤酒
 (3 瓶啤酒, 0 个盖子, 0 个瓶子)
这次喝掉 3 瓶啤酒,总计 11 瓶啤酒
 (0 瓶啤酒, 3 个盖子, 3 个瓶子)
 2 个瓶子换 1 瓶啤酒
 (1 瓶啤酒, 3 个盖子, 1 个瓶子)
这次喝掉 1 瓶啤酒,总计 12 瓶啤酒
 (0 瓶啤酒, 4 个盖子, 2 个瓶子)
 4 个盖子换 1 瓶啤酒
 2 个瓶子换 1 瓶啤酒
 (2 瓶啤酒, 0 个盖子, 0 个瓶子)
这次喝掉 2 瓶啤酒,总计 14 瓶啤酒
 (0 瓶啤酒, 2 个盖子, 2 个瓶子)
 2 个瓶子换 1 瓶啤酒
 (1 瓶啤酒, 2 个盖子, 0 个瓶子)
这次喝掉 1 瓶啤酒,总计 15 瓶啤酒
 (0 瓶啤酒, 3 个盖子, 1 个瓶子)
 (0 瓶啤酒, 3 个盖子, 1 个瓶子)
总计喝掉 15 瓶啤酒,剩下 3 个盖子和 1 个瓶子


猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89956977