购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 循环招式升级while

学习了for循环,相信你对循环的“内功心法”已经掌握了。现在我们学习另一种循环——while循环。它还有一个更形象的名字,叫作条件循环,在规定的条件内才会执行循环。

它的基本形式是这样的:

while 判断条件:

执行语句……

一起来看看下面这张图,你会更加清楚明白。只要条件是True,将会一直执行,条件变成False,循环就结束了。

for循环更多的是控制次数,while循环控制的是条件,如果条件成立,就继续循环,否则不再进行循环。

现在使用while循环判断是否上学。

条件是:“今天是工作日”。

周一:今天是周一,是工作日,条件成立,继续上学。

周二:今天是周二,是工作日,条件成立,继续上学。

周三:今天是周三,是工作日,条件成立,继续上学。

周四:今天是周四,是工作日,条件成立,继续上学。

周五:今天是周五,是工作日,条件成立,继续上学。

周六、周日:今天是周末,不是工作日,条件不成立,不继续上学。

从周一循环到周五都要上学,直到遇到了周末才不用上学。

条件循环语句的执行流程为:

进入判断条件,当判断条件为True时,执行语句(语句可以是一条语句或者语句块),执行完语句块,重新进入判断条件。直到判断条件为False,则终止循环。

1.1+2+3+4+5+6+…+100等于多少

小朋友们知道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条件循环的代码解释:

2.石头剪刀布游戏

石头剪刀布这个游戏大家都玩过,游戏规则特别简单,两个人猜拳,可以出石头、剪刀、布中的任意一个,石头可以对付剪刀,布可以包裹石头,剪刀将布剪坏。它们真是一物降一物。

我们写一个程序和电脑玩猜拳游戏,当玩家赢了时,继续游戏;当电脑赢了时,游戏终止。需要使用到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,退出游戏。具体的逻辑我们绘制成了一张图,你也可以尝试绘制一下。 HkWwhhCBVVro2OpdNgi42z7sT2ypEvazPhW1UNyXBN0v8Lf0tBPsFuTdnBRvdt8u

点击中间区域
呼出菜单
上一章
目录
下一章
×