跟老齐学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双向链表实现实例代码
Nov 21 Python
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
python中pygame模块用法实例
Oct 09 Python
python Crypto模块的安装与使用方法
Dec 21 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python中调试或排错的五种方法示例
Sep 12 Python
wxPython多个窗口的基本结构
Nov 19 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
利用Python过滤相似文本的简单方法示例
Feb 03 Python
Python WSGI 规范简介
Apr 11 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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
PHP下判断网址是否有效的代码
2011/10/08 PHP
php实现分页显示
2015/11/03 PHP
一些实用的jQuery代码片段收集
2011/07/12 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
ES6中的类(Class)示例详解
2020/12/09 Javascript
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
对Django url的几种使用方式详解
2019/08/06 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
团组织关系介绍信
2014/01/12 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
学位证书委托书
2014/09/30 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
年终工作总结范文2014
2014/11/27 职场文书
于丹论语心得观后感
2015/06/15 职场文书
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技