Python的for...else和while...else语法,这是Python中最不常用,最为误解的语法特性之一。

Python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们不是除正常以外的其他方式退出循环,那么else分支将被执行。也就是在循环体内没有break语句、没有return语句,或者没有异常出现。

1.break情况

下面我们来尝试在循环中执行break退出

lucky_number.py

lucky_num = 19
#首先定义一个幸运数字,这样条理比较清晰
#action = True
guess_count = 0
while guess_count < 3:
#限制用户输入
input_num = int(input("Input the guess num: "))
#if lucky_num == input_num:
#print("Bingo!")
#action = False
#break强制终端循环语句,避免陷入死循环之中
if input_num > lucky_num:
print("The real number is smalller!")
elif input_num < lucky_num:
print("The real number is bigger...")
else:
print("Bjngo!...")
break
guess_count += 1
else:
print("Too many retrys!")
首先我们执行三次没有测对的情况如下:
Input the guess num: 1
The real number is bigger...
Input the guess num: 2
The real number is bigger...
Input the guess num: 100
The real number is smalller!
Too many retrys!
从结果上可以看出,最后执行了else分支语句(Too many retrys!),提示用户输入过多的次数,正常情况下是执行else语句的。下面我们来看
一下非正常退出情况下:
用户猜测正确:
Input the guess num: 1
The real number is bigger...
Input the guess num: 19
Bjngo!...
从上面结果我们可以看出,当用户猜对数字后,break了一下,推出了while...else语句,else语句没有正常执行。
2.return情况 #首先定义一个幸运数字,这样条理比较清晰
#action = True #限制用户输入,如果三次没有猜对则退出循环
def count():
lucky_num = 19
guess_count = 0
while guess_count < 3:
input_num = int(input("Input the guess num: "))
#if lucky_num == input_num:
#print("Bingo!")
#action = False
#break强制终端循环语句,避免陷入死循环之中
if input_num > lucky_num:
print("The real number is smalller!")
elif input_num < lucky_num:
print("The real number is bigger...")
else:
print("Bjngo!...")
return guess_count guess_count += 1
else:
print("Too many retrys!") numbers = count()
print(numbers)
    由于rerturn语句只能在函数和类中使用,因此我定义了一个函数,看我们输入正确的时候是否能够终端else语句。
(1).调用这个函数,输入三次不正确
Input the guess num: 1
  The real number is bigger...
  Input the guess num: 1
  The real number is bigger...
  Input the guess num: 1
  The real number is bigger...
  Too many retrys!
  None
从结果中可以看出来,当我们输入三次的时候,else语句正常运行,因为我们输入的都不正常,不影响else语句
(2).用户猜测正确的情况:
Input the guess num: 1
  The real number is bigger...
  Input the guess num: 19
  Bjngo!...
  1
从结果可以看出,用户第一次猜测错误,第二猜对了,然后把guess_count返回给了变量numbers,没有运行else语句。
结论:如果我们想在用户输入正确的时候退出循环,输入次数太多的时候提示用户,那么可以使用while...else...break语句,在用户
输入次数
超过限制没有答对的时候提醒用户;答对了的时候退出循环,不打印提醒,那么可以在用户输入正确的时候使用break进行中断。
牢记:Python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们
不是除正常以外的其他方式退出循环,那么else分支将被执行
也就是在循环体内没有break语句、没有return语句,或者没有异常出现。
												

Python 中for...esle和while...else语法的更多相关文章

  1. Python中的不同进制的语法和转换

    不同进制的书写方式 八进制(Octal) 0o377 十六进制(Hex) 0xFF 二进制(Binary) 0b11111111 不同进制之间的转换 python提供了三个内置的函数,能够用来在不同进 ...

  2. Python中语法糖及带参语法糖

    在python中,@符号常被称作语法糖(装饰器),在某函数定义时,用以包装该函数,以达到截取,控制该函数的目的. def d(f): print('d...') k=f #此处保留了传进来的原函数 f ...

  3. python学习第九讲,python中的数据类型,字符串的使用与介绍

    目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...

  4. Python中的高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

  5. [Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...

  6. Python 中的三元运算(软件测试中运用)

    前言 在java中,有类似于 (condition) ? a :b 这样的语法,表示如果condition 为真,返回a,反之返回b.我们称之为三元运算. 那Python中,有没有这样的语法呢,非常遗 ...

  7. 第7.4节 Python中与众不同的类

    一.    引言 在较旧的Python版本中,类型和类之间泾渭分明:内置对象是基于类型的,而自定义对象是基于类的.因此,你可以创建类,但不能创建类型.在较新的Python 2版本中,这种差别不那么明显 ...

  8. Python基础之:Python中的异常和错误

    目录 简介 Python中的内置异常类 语法错误 异常 异常处理 抛出异常 异常链 自定义异常 finally 简介 和其他的语言一样,Python中也有异常和错误.在 Python 中,所有异常都是 ...

  9. 简单探讨python中的语句和语法

    python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...

随机推荐

  1. poj3613Cow Relays

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7683   Accepted: 3017 Descri ...

  2. 7.Configurator API 详细介绍

    一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...

  3. 配置ntpd时钟同步服务

    ntpd时钟同步服务 目录 参考: CentOS配置时间同步NTP: http://www.crsay.com/wiki/wiki.php/server/centos/ntp-set 解决ntp的错误 ...

  4. 前端PHP入门-014-参数的引用

    我们学习了变量的引用,我们来回顾一下知识: <?php $a = 10; $b = &$a; $a = 100; echo $a.'---------'.$b; ?> 而函数的参数 ...

  5. sqlserver 2008备份与还原

    一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dside ...

  6. 图论&搜索:K短路-启发式搜索

    判断第k短路的权值是否小于T 直接把队友的代码拿过来了,一定很经典 #include <iostream> #include <queue> #include <cstr ...

  7. HDU 4978 计算 凸包

    有以无限间隔$D$的水平线分割的平面,在上面随机投下一个圆,圆中有一些点,点之间两两成一条线段,问随机投下至少有一条线段于平行线相交的概率. 以下是不严(luan)谨(lai)的思路. 首先都知道对于 ...

  8. 【CodeForces】908 E. New Year and Entity Enumeration

    [题目]E. New Year and Entity Enumeration [题意]给定集合T包含n个m长二进制数,要求包含集合T且满足以下条件的集合S数:长度<=m,非和与的结果都在集合中. ...

  9. indexof()函数

    js 判断字符串是否包含某字符串,String对象中查找子字符,indexOf, 成功,返回索引值,失败返回 -1. 转载: http://www.cnblogs.com/fishtreeyu/arc ...

  10. oozie与sqoop的简单案例

    1:拷贝模板 2:拷贝hive用的jar包 方式一: 3:编辑job.properties # # Licensed to the Apache Software Foundation (ASF) u ...