学习了for循环,相信你对循环的“内功心法”已经掌握了。现在我们学习另一种循环——while循环。它还有一个更形象的名字,叫作条件循环,在规定的条件内才会执行循环。
它的基本形式是这样的:
while 判断条件:
执行语句……
一起来看看下面这张图,你会更加清楚明白。只要条件是True,将会一直执行,条件变成False,循环就结束了。
for循环更多的是控制次数,while循环控制的是条件,如果条件成立,就继续循环,否则不再进行循环。
现在使用while循环判断是否上学。
条件是:“今天是工作日”。
周一:今天是周一,是工作日,条件成立,继续上学。
周二:今天是周二,是工作日,条件成立,继续上学。
周三:今天是周三,是工作日,条件成立,继续上学。
周四:今天是周四,是工作日,条件成立,继续上学。
周五:今天是周五,是工作日,条件成立,继续上学。
周六、周日:今天是周末,不是工作日,条件不成立,不继续上学。
从周一循环到周五都要上学,直到遇到了周末才不用上学。
条件循环语句的执行流程为:
进入判断条件,当判断条件为True时,执行语句(语句可以是一条语句或者语句块),执行完语句块,重新进入判断条件。直到判断条件为False,则终止循环。
小朋友们知道1+2+3+4+5+6+…+100等于多少吗?我们通过while循环语句来计算1+2+3+4+5+6+…+100的值。
下面我们来学习怎么用 while循环 计算1~100的和。我们需要用到两个变量total和count来完成这个任务,total将不断地累加,count将不断地增加1。
代码
count = 0 total = 0 while(count <= 100): total = total + count count = count+1 print("1+2+3+4+...+100 = %d" % total)
程序运行结果为:
看看while条件循环的代码解释:
石头剪刀布这个游戏大家都玩过,游戏规则特别简单,两个人猜拳,可以出石头、剪刀、布中的任意一个,石头可以对付剪刀,布可以包裹石头,剪刀将布剪坏。它们真是一物降一物。
我们写一个程序和电脑玩猜拳游戏,当玩家赢了时,继续游戏;当电脑赢了时,游戏终止。需要使用到while循环。
(1)设置电脑的3种手势:
代码
#随机出任何一种手势,用1、2、3表示剪刀、石头或者布 num = random.randint(1, 3) if num == 1: #数字1表示出的是石头手势 finger = "石头" elif num == 2: #数字2表示出的是剪刀手势 finger = "剪刀" elif num == 3: #数字3表示出的是布手势 finger = "布"
(2)设置玩家手势:
代码
text = input('输入 石头、剪刀、布:')
(3)判断玩家的手势是否是剪刀、石头、布,你不能随便给一个手势,这样电脑可能不认识,不认识时是会提醒你的。
代码
blist = ['石头','剪刀','布'] #创建一个手势列表 #如果你出的手势不在手势列表中,则说明不是剪刀、石头、布 if (text not in blist): #提醒你输入错误,重新输入 print ("输入错误,请重新输入!")
(4)判断电脑和玩家谁赢谁输:
代码
#text是玩家的手势,finger是电脑的手势 if (text not in blist): print ("输入错误,请重新输入!") #如果玩家的手势和电脑的手势一样,则是平局 elif text == finger : print ("电脑出了:%s,平局!" % finger) # 现在我们来判断一下玩家会赢的三种情况: # 电脑是布,玩家是剪刀,玩家赢 # 电脑是剪刀,玩家是石头,玩家赢 # 电脑是石头,玩家是布,玩家赢 elif (text == '剪刀' and finger =='布') or (text == '石头' and finger =='剪刀') or (text == '布' and finger =='石头'): print ("电脑出了:%s,你赢了!" % finger) # 现在我们来判断一下玩家会赢的三种情况: # 电脑是布,玩家是剪刀,玩家赢 # 电脑是剪刀,玩家是石头,玩家赢 # 电脑是石头,玩家是布,玩家赢 elif (text == '石头' and finger =='布') or (text == '剪刀' and finger =='石头') or (text == '布' and finger =='剪刀'): print ("电脑出了:%s,你输了!" % finger )
现在我们将代码组合成一个完整的程序。
代码
import random #标识电脑是否赢了,False为输了,True为赢了 isWin = False; while not isWin: num = random.randint(1, 3) if num == 1: finger = "石头" elif num == 2: finger = "剪刀" elif num == 3: finger = "布" text = input('输入 石头、剪刀、布:') blist = ['石头', "剪刀", "布"] if (text not in blist): print ("输入错误,请重新输入!") elif text == finger : print ("电脑出了:%s,平局!" % finger) elif (text == '剪刀' and finger =='布') or (text == '石头' and finger =='剪刀') or (text == '布' and finger =='石头'): print ("电脑出了:%s,你赢了!" % finger) elif (text == '石头' and finger =='布') or (text == '剪刀' and finger =='石头') or (text == '布' and finger =='剪刀'): print ("电脑出了:%s,你输了!" % finger ) isWin = True
程序运行结果为:
在上面的程序中,我们设置了一个变量isWin,来标识电脑是否赢了。当电脑赢了时,游戏退出。while后面的条件判断为not isWin,意思是:电脑没有赢。只要电脑没有赢,while循环的判断条件就是True,就会继续执行循环里的内容,玩家就可以继续游戏。
电脑会随机生成一个数字num,代表电脑的手势,用text接收玩家的。
按照我们制定的游戏规则,如果玩家赢了或者平局,此时while后面的条件判断not isWin为True,则继续执行代码块,继续游戏;如果电脑赢了,则将isWin设置为True,此时while后面的条件判断not isWin为False,退出游戏。具体的逻辑我们绘制成了一张图,你也可以尝试绘制一下。