用while来循环python
while,翻译成中文是“当...的时候”,这个单词在英语中,经常用来作为时间状语,while ... someone do somthing,这种类型的说法是有的。在python中,它也有这个含义,不过有点区别的是,“当...时候”这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python作好多事情。就比如这样一段情景:git
while 年龄大于60岁:-------->当年龄大于60岁的时候 退休 -------->凡是符合上述条件就执行的动做
这就是while循环。写一个严肃点的流程,能够看下图:编程
再作猜数字游戏
一个猜数的游戏less
#! /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的时候,就再也不循环了。dom
当bool(i<4)=True的时候,就执行循环体内的语句。在循环体内,让用户输入一个整数,而后程序随机选择一个整数,最后判断随机生成的数和用户输入的数是否相等,而且用if语句判断三种不一样状况。函数
根据上述代码,看官看看是否能够修改?spa
为了让用户的体验更爽,不妨把输入的整数范围扩大,在1到100之间吧翻译
num_input = raw_input("please input one integer that is in 1 to 100:")
程序用num_input变量接收了输入的内容。可是,请列位看官必定要注意,看到这里想睡觉的要打起精神了,我要分享一个多年编程经验,请牢记:任何用户输入的内容都是不可靠的。这句话含义深入,可是,这里不作过多的解释,须要各位在随后的编程生涯中体验了。为此,咱们要检验用户输入的是否符合咱们的要求,咱们要求用户输入的是1到100之间的整数,那么就要作以下检验:code
输入的是不是整数
若是是整数,是否在1到100之间。
为此,要作:blog
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"