跟老齐学Python之用while来循环


Posted in Python onOctober 02, 2014

在python中,它也有这个含义,不过有点区别的是,“当...时候”这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python做好多事情。就好比这样一段情景:

while 年龄大于60岁:-------->当年龄大于60岁的时候
    退休            -------->凡是符合上述条件就执行的动作
展开想象,如果制作一道门,这道门就是用上述的条件调控开关的,假设有很多人经过这个们,报上年龄,只要年龄大于60,就退休(门打开,人可以出去),一个接一个地这样循环下去,突然有一个人年龄是50,那么这个循环在他这里就停止,也就是这时候他不满足条件了。

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

跟老齐学Python之用while来循环

再做猜数字游戏

本教程有一讲,是跟看官一同做一个小游戏,在里面做了一个猜数的游戏,当时遇到了一个问题,就是只能猜一两次,如果猜不到,程序就不能继续运行了。

前不久,有一个在校的大学生朋友(他叫李航),给我发邮件,让我看了他做的游戏,能够实现多次猜数,直到猜中为止。这是一个多么喜欢学习的大学生呀。

我在这里将他写的程序恭录于此,单元李航同学不要见怪,如果李航同学认为此举侵犯了自己的知识产权,可以告知我,我马上撤下此代码。

#! /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到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,100)
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 and 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
Python 相关文章推荐
Python编程入门的一些基本知识
May 13 Python
Python探索之pLSA实现代码
Oct 25 Python
Python实现基于二叉树存储结构的堆排序算法示例
Dec 08 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
跟老齐学Python之复习if语句
Oct 02 #Python
python中pycurl库的用法实例
Sep 30 #Python
python采用getopt解析命令行输入参数实例
Sep 30 #Python
Python实现115网盘自动下载的方法
Sep 30 #Python
python打开网页和暂停实例
Sep 30 #Python
Python解析网页源代码中的115网盘链接实例
Sep 30 #Python
python网络编程之读取网站根目录实例
Sep 30 #Python
You might like
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP实现文件上传与下载
2020/08/28 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
js实现点击烟花特效
2020/10/14 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
python装饰器使用方法实例
2013/11/21 Python
跟老齐学Python之Python安装
2014/09/12 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python如何统计代码运行的时长
2019/07/24 Python
python 动态调用函数实例解析
2019/10/21 Python
大学生个人简历自我评价
2013/11/16 职场文书
采购部部长岗位职责
2014/02/06 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
一年级评语大全
2014/04/23 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
授权收款委托书
2014/09/23 职场文书
店长岗位职责
2015/02/11 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技