while循环

1.循环语句基础

(1) 循环概述

· 一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件

· python中的循环有while循环和for循环

· 循环次数未知的情况下,建议采用while循环

· 循环次数可以预知的情况下,建议采用for循环

(2) while循环语法结构

· 当需要语句不断地重复执行时,可以使用while循环

while expression:
    while_suite

· 语句while_suite会被连续不断地循环执行,直到表达式的值变成0或False

sum100 = 0
counter = 1

while counter <= 100:
    sum100 += counter
    counter += 1
print ('result is %d' % sum100)
  • 猜数字游戏
import random

# 随机取出100以内的整数,包括1和100
num = random.randint(1, 100)
prompt = "'-' * 20 + '猜数字游戏' + '-' * 20"

while True:
    x = input('请输入1-100的数字:\n')
    if x == '':
        prompt = '请输入!'
        print(prompt)
    else:
        gamer = int(x)
        if 1 <= gamer <= 100:
            if gamer == num:
                prompt = '恭喜猜对了!'
                print(prompt)
                break
            else:
                prompt = '猜大了!' if gamer > num else '猜小了'
                print(prompt)
        else:
            prompt = '输入不合法!'
            print(prompt)

2.循环语句进阶

(1) break语句

· break语句可以结束当前循环然后跳转到下条语句

· 写程序的时候,应尽量避免使用重复的代码,在这种情况下可以使用wihile-break结构

name = input('uname:')
while name != 'tom':
    name = input('uname:')
# 可以替换为
while True:
    name = input('uname:')
    if name == 'tom':
        break

(2) continue语句

· 当遇到continue语句时,程序会终止当前循环,并忽略剩余的语句,然后回到循环的顶端

· 如果仍然满足循环条件,循环体内语句继续执行,否则退出循环

sum100 = 0
counter = 0
while counter <= 100:
    counter += 1
    if counter % 2:
        countinue
    sum100 += counter
print("result is %d" % sum100)

(3) else语句

· python中的while语句也支持else子句

· else子句只在循环完成后执行

· break语句也会跳过else块

sum10 = 0
i = 1
while i <= 10:
    sum10 += i
    i += 1
else:
    print(sum10)

(4) 案例1:完善石头剪刀布小游戏

编写game_02.py,要求如下:

  1. 基于上节game.py程序
  2. 实现循环结构,要求游戏三局两胜
import random
print('-' * 20 + '这是一个猜拳游戏' + '-' * 20)
result = {'pwin': 0, 'rwin': 0}
while result['pwin'] < 2 and result['rwin'] < 2:
    all_choices = ['石头', '剪刀', '布']
    robot = random.choice(all_choices)
    prompt = '''(0) 石头
(1)剪刀
(2) 布
请选择(0/1/2)'''
    index = int(input(prompt))
    player = all_choices[index]
    win_list = [['剪刀', '布'], ['石头', '剪刀'], ['布', '石头']]

    if player in all_choices:
        print('电脑出的是 %s' % (robot))
        if player.__eq__(robot):
            print('平局!')
        elif [player, robot] in win_list:
            print('\033[32;1m你赢了!\033[0m')
            result['pwin'] += 1
        else:
            print('\033[31;1m你输了!\033[0m')
            result['rwin'] += 1
    else:
        print('输入不合法!')
    print('比分为 \033[31;1m%s : %s\033[0m' % (result['pwin'], result['rwin']))
print('\033[31;1m游戏结束!\033[0m')

(5) 猜数程序

编写guess.py,要求如下:

  1. 系统随机生成100以内数字
  2. 要求用户猜生成的数字是多少
  3. 最多猜5次,猜对结束程序
  4. 如果5次全部猜错,则输出正确结果
import random

# 随机取出100以内的整数,包括1和100
num = random.randint(1, 100)
prompt = "'-' * 20 + '猜数字游戏' + '-' * 20"
counter = 0

while counter < 5:
    x = input('请输入1-100的数字:\n')
    if x == '':
        prompt = '请输入!'
        print(prompt)
    else:
        gamer = int(x)
        if 1 <= gamer <= 100:
            if gamer == num:
                prompt = '恭喜猜对了!'
                print(prompt)
                break
            else:
                counter += 1
                prompt = '猜大了!' if gamer > num else '猜小了'
                print(prompt)
        else:
            prompt = '输入不合法!'
            print(prompt)
else:
    print('正确值为 %s' % num)
    
# 使用while的else格式,只有在break不触发时,else才会执行
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容