python while 循环

用while来循环

while,翻译成中文是“当...的时候”,这个单词在英语中,常常用来做为时间状语,while ... someone do somthing,这种类型的说法是有的。在python中,它也有这个含义,不过有点区别的是,“当...时候”这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python做好多事情。就好比这样一段情景:

while 年龄大于60岁:-------->当年龄大于60岁的时候
    退休            -------->凡是符合上述条件就执行的动作

这就是while循环。写一个严肃点的流程,可以看下图:

image.png

再做猜数字游戏

一个猜数的游戏。

#! /usr/bin/env python
#coding:UTF-8           

import random

i=0
while i < 4:
    print'********************************'
    num = input('请您输入0到9任一个数:')       #python3

    xnum = random.randint(0,9)

    x = 3 - i

    if num == xnum:
        print'运气真好,您猜对了!'
        break
    elif num > xnum:
        print'''您猜大了!\n哈哈,正确答案是:%s\n您还有%s次机会!''' %(xnum,x)
    elif num < xnum:
        print'''您猜小了!\n哈哈,正确答案是:%s\n您还有%s次机会!''' %(xnum,x)
    print'********************************'

    i += 1

我们就用这段程序来分析一下,首先看while i<4,这是程序中为猜测限制了次数,最大是三次,请看官注意,在while的循环体中的最后一句:i +=1,这就是说每次循环到最后,就给i增加1,当bool(i<4)=False的时候,就不再循环了。

当bool(i<4)=True的时候,就执行循环体内的语句。在循环体内,让用户输入一个整数,然后程序随机选择一个整数,最后判断随机生成的数和用户输入的数是否相等,并且用if语句判断三种不同情况。

根据上述代码,看官看看是否可以修改?

为了让用户的体验更爽,不妨把输入的整数范围扩大,在1到100之间吧。

num_input = raw_input("please input one integer that is in 1 to 100:")    #我用的是python2.7,在输入指令上区别于李同学

程序用num_input变量接收了输入的内容。但是,请列位看官一定要注意,看到这里想睡觉的要打起精神了,我要分享一个多年编程经验,请牢记:任何用户输入的内容都是不可靠的。这句话含义深刻,但是,这里不做过多的解释,需要各位在随后的编程生涯中体验了。为此,我们要检验用户输入的是否符合我们的要求,我们要求用户输入的是1到100之间的整数,那么就要做如下检验:

  1. 输入的是否是整数
  2. 如果是整数,是否在1到100之间。

为此,要做:

if not num_input.isdigit():     #str.isdigit()是用来判断字符串是否纯粹由数字组成
    print "Please input interger."
elif int(num_input)<0 and int(num_input)>=100:
    print "The number should be in 1 to 100."
else:
    pass       #这里用pass,意思是暂时省略,如果满足了前面提出的要求,就该执行此处语句

再看看程序,在循环体内产生一个随机的数字,这样用户每次输入,面对的都是一个新的随机数字。这样的猜数字游戏难度太大了。我希望是程序产生一个数字,直到猜中,都是这个数字。所以,要把产生随机数字这个指令移动到循环之前。

import random

number = random.randint(1,100)

while True:             #不限制用户的次数了
    ...

观察程序,还有一点需要向列位显明的,那就是在条件表达式中,两边最好是同种类型数据,上面的程序中有:num>xnum样式的条件表达式,而一边是程序生成的int类型数据,一边是通过输入函数得到的str类型数据。在某些情况下可以运行,为什么?看官能理解吗?都是数字的时候,是可以的。但是,这样不好。

那么,按照这种思路,把这个猜数字程序重写一下:

#!/usr/bin/env python
#coding:utf-8

import random

number = random.randint(1,101)

guess = 0

while True:

    num_input = raw_input("please input one integer that is in 1 to 100:")
    guess +=1

    if not num_input.isdigit():
        print "Please input interger."
    elif int(num_input)<0 or int(num_input)>=100:
        print "The number should be in 1 to 100."
    else:
        if number==int(num_input):
            print "OK, you are good.It is only %d, then you successed."%guess
            break
        elif number>int(num_input):
            print "your number is more less."
        elif number<int(num_input):
            print "your number is bigger."
        else:
            print "There is something bad, I will not work"

以上供参考,还可改进。

break和continue

break,在上面的例子中已经出现了,其含义就是要在这个地方中断循环,跳出循环体。下面这个简要的例子更明显:

#!/usr/bin/env python
#coding:utf-8

a = 8
while a:
    if a%2==0:
        break
    else:
        print "%d is odd number"%a
        a = 0 
print "%d is even number"%a

a=8的时候,执行循环体中的break,跳出循环,执行最后的打印语句,得到结果:

8 is even number

如果a=9,则要执行else里面的的print,然后a=0,循环就在执行一次,又break了,得到结果:

9 is odd number
0 is even number

而continue则是要从当前位置(即continue所在的位置)跳到循环体的最后一行的后面(不执行最后一行),对一个循环体来讲,就如同首尾衔接一样,最后一行的后面是哪里呢?当然是开始了。

#!/usr/bin/env python
#coding:utf-8

a = 9
while a:
    if a%2==0:
        a -=1
        continue    #如果是偶数,就返回循环的开始
    else:
        print "%d is odd number"%a #如果是奇数,就打印出来
        a -=1

其实,对于这两东西,我个人在编程中很少用到。我有一个固执的观念,尽量将条件在循环之前做足,不要在循环中跳来跳去,不仅可读性下降,有时候自己也糊涂了。

while...else

这两个的配合有点类似if ... else,只需要一个例子列为就理解了,当然,一遇到else了,就意味着已经不在while循环内了。

#!/usr/bin/env python

count = 0
while count < 5:
    print count, " is  less than 5"
    count = count + 1
else:
    print count, " is not less than 5"

执行结果:

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • Python While 循环语句 作者:杨梦鸽 校对:翟舒青 Python 编程中 while 语句用于循环执行...
    木易林1阅读 544评论 0 1
  • num=0;while num<10: num += 1 print("while 循环") break #...
    讠纟纟阅读 275评论 0 0
  • 简单易写的一个字,但却最令人拜倒的一种情~ 一句“老公”“老婆”不只是一个名词让你敷衍。它是你演绎人生的一个角色,...
    阴间一颗孤独的心阅读 217评论 0 0
  • 有一个故事说张三看见一个老婆婆天天愁眉苦脸,天天唉声叹气的,就问老婆婆怎么回事。老婆婆说她有两个儿子,大儿子是做果...
    华869f阅读 1,198评论 11 8
  • 当我真正开始爱自己, 我才认识到, 所有的痛苦和情感的折磨, 都只是提醒我: 活着,不要违背自己的本心。 今天我明...
    梓杭阅读 323评论 0 0