1 判断(分支)语句

1.1 if 语句

1)简单 if 语句

  在Python中,if 语句就是用来判断的,格式如下:

if 要判断的条件:条件成立时,要做的事情...

  例如:

In [1]: age = 19
In [2]: if age >= 18:
In [3]:     print("You are old enough to vote!")Out[3]: You are old enough to vote!

  注意:if 语句及其缩进部分是一个完整的代码块。

2)if-else 语句

  我们经常需要在条件测试通过时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的 if-else 语句。if-else 语句块类似于简单的 if 语句, 但其中的 else 语句能够指定条件测试未通过时要执行的操作。

if 要判断的条件:条件成立时,要做的事情...
else:条件不成立时,要做的事情...

  例如:

In [1]: age = 17
In [2]: if age >= 18:
In [3]:     print("You are old enough to vote!")
In [4]:     print("Have you registered to vote yet?")
In [5]: else:
In [6]:     print("Sorry, you are too young to vote.")
In [7]:     print("Please register to vote as soon as you turn 18!")Out[7]: Sorry, you are too young to vote.Please register to vote as soon as you turn 18!

3)if-elif-else 语句

  我们经常需要检查超过两个的情形,为此可使用Python提供的 if-elif-else 结构。Python只执行 if-elif-else 结构中的一个代码块,它依次检查每个条件测试,直到遇到通过的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。

if 要判断的条件1:条件1成立时,要做的事情...
elif 要判断的条件2:条件2成立时,要做的事情...
elif 要判断的条件3:条件3成立时,要做的事情...
...
else:以上条件都不成立时,要做的事情...

  例如:

In [1]: age = 12
In [2]: if age < 4:
In [3]:     price = 0
In [4]: elif age < 18:
In [5]:     price = 5
In [6]: elif age < 65:
In [7]:     price = 10
In [8]: else:
In [9]:     price = 5
In [10]: print("Your admission cost is $" + str(price) + ".")Out[10]: Your admission cost is $5.

  注意:Python并不要求 if-elif 结构后面必须有 else 代码块。在有些情况下,else 代码块很有用;而在其他一些情况下,使用一条 elif 语句来处理特定的情形更清晰:

age = 12
if age < 4:price = 0
elif age < 18:price = 5
elif age < 65:price = 10
elif age >= 65:price = 5
print("Your admission cost is $" + str(price) + ".")

  else 是一条包罗万象的语句,只要不满足任何 if 或 elif 中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。 如果知道最终要测试的条件,应考虑使用一个 elif 代码块来代替 else 代码块。 这样就可以肯定,仅当满足相应的条件时,代码才会执行。

4)if 语句的嵌套

  我们经常需要在条件测试通过时再增加条件测试,为此可使用嵌套结构。

if 要判断的条件1:条件1成立时,要做的事情...if 条件1成立基础上,要判断的条件2:条件2成立时,要做的事情...else:条件2不成立时,要做的事情...else:条件1不成立时,要做的事情...

1.2 使用 if 语句处理列表

1)检查特殊元素

  下面来研究如何检查列表中的特殊值,并对其做合适的处理。使用比萨店示例:一家比萨店在制作比萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到比萨中的配料,可以以极高的效率编写这样的代码:

In [1]: requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
In [2]: for requested_topping in requested_toppings:
In [3]:     print("Adding " + requested_topping + ".")
In [4]: print("\nFinished making your pizza!")Out[4]: Adding mushrooms.Adding green peppers.Adding extra cheese.Finished making your pizza!

2)确定列表不是空的

  到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行 for 循环前确定列表是否为空很重要。
  下面在制作比萨前检查顾客点的配料列表是否为空。如果列表是空的,就向顾客确认他是否要点普通比萨;如果列表不为空,就像前面的示例那样制作比萨:

In [1]: requested_toppings = []
In [2]: if requested_toppings:
In [3]:     for requested_topping in requested_toppings:
In [4]:         print("Adding " + requested_topping + ".")
In [5]:     print("\nFinished making your pizza!")
In [6]: else:
In [7]:     print("Are you sure you want a plain pizza?")Out[7]: Are you sure you want a plain pizza?

  在 if 语句中将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回True,并在列表为空时返回 False。

2 循环语句

2.1 三种控制结构

2.2 while 循环

  for 循环用于针对集合中的每个元素都执行一个代码块,而 while 循环则不断地运行,直到指定的条件不满足为止。

1)简单 while 语句

  while 语句格式如下:

初始条件设置 -- 通常是重复执行的计数器while 条件(判断计数器是否达到目标次数):条件满足时,要做的事情...处理条件(计数器 + 1)

  例如:

In [1]: current_number = 1
In [2]: while current_number <= 5:
In [3]:     print(current_number)
In [4]:     current_number += 1
Out[4]: 12345

  注意:不要忘记在循环内部修改循环的判断条件,否则将导致死循环。

2)定义退出值退出循环

  可使用 while 循环让程序在用户愿意时不断地运行,如下面的程序所示。我们在其中定义了一个退出值,只要用户输入的不是这个值,程序就接着运行:

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "message = ""
while message != 'quit':message = input(prompt)if message != 'quit':print(message)

  首次遇到这个循环时,message 是一个空字符串,因此Python进入这个循环。执行到代码行 message = input(prompt) 时,Python显示提示消息,并等待用户输入。只要用户输入的不是单词 ‘quit’,都将存储到变量 message 中并打印出来;接下来,Python重新检查 while 语句中的条件。只要用户输入的不是单词 ‘quit’,Python就会再次显示提示消息并等待用户输入。等到用户终于输入 ‘quit’ 后,Python停止执行 while 循环,而整个程序也到此结束:

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello everyone!
Hello everyone!Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello again.
Hello again.Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit

3)使用标志退出循环

  在前一个示例中,我们让程序在满足一个指定条件时就执行特定的任务。但在更复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?
  在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志 ,充当了程序的交通信号灯。你可让程序在标志为 True 时继续运行,并在任何事件导致标志的值为 False 时让程序停止运行。这样,在 while 语句中就只需检查一个条件——标志的当前值是否为 True,并将所有测试(是否发生了应将标志设置为 False 的事件) 都放在其他地方,从而让程序变得更为整洁。

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
active = Truewhile active:message = input(prompt)if message == 'quit':active = Falseelse:print(message)

  这个程序的输出与前一个示例相同。在前一个示例中,我们将条件测试直接放在了 while 语句中,而在这个程序中,我们使用了一个标志来指出程序是否处于活动状态,这样如果要添加测试(如 elif 语句) 以检查是否发生了其他导致 active 变为 False 的事件,将很容易。

4)使用 break 退出循环

  要立即退出 while 循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用 break 语句。break 语句用于控制程序流程,可使用它来控制哪些代码行将执行,哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。
  例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,我们可以在用户输入 ‘quit’ 后使用 break 语句立即退出 while 循环:

prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "while True:city = input(prompt)if city == 'quit':breakelse:print("I'd love to go to " + city.title() + "!")

  以 while True 打头的循环将不断运行,直到遇到 break 语句。这个程序中的循环不断输入用户到过的城市的名字,直到他输入 ‘quit’ 为止。用户输入 ‘quit’ 后,将执行 break 语句,导致Python退出循环:

Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) New York
I'd love to go to New York!Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) San Francisco
I'd love to go to San Francisco!Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) quit

  再例如:

In [1]: i = 0
In [2]: while i < 10:
In [3]:     if i == 3:
In [4]:         break
In [5]:     else:
In [6]:         print(i)
In [7]:     i += 1
In [8]: print('over')Out[8]: 012over

  注意:break 只针对当前所在循环有效;在任何Python循环中都可使用 break 语句。例如可使用 break 语句来退出遍历列表或字典的 for 循环。

5)在循环中使用 continue

  要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用 continue 语句,它不像 break 语句那样不再执行余下的代码并退出整个循环。例如,来看一个从1数到10但只打印其中奇数的循环:

In [1]: current_number = 0
In [2]: while current_number < 10:
In [3]:     current_number += 1
In [4]:     if current_number % 2 == 0:
In [5]:         continue
In [6]:     print(current_number)Out[6]: 13579

  注意:使用 continue 时,条件处理部分的代码需要特别注意,容易出现死循环。例如:

current_number = 0
while current_number < 10:if current_number == 5:# 这里在使用 continue 之前,同样需要修改计数器,否则会出现死循环current_number += 1continuecurrent_number += 1print(current_number)

6)while 语句的嵌套

  输出九九乘法表:

row = 1
while row <= 9:col = 1while col <= row:print('%d * %d = %d' % (col, row, col * row), end='\t')col += 1print('')row += 1

2.3 使用 while 语句处理列表和字典

  for 循环是一种遍历列表的有效方式,但在 for 循环中不应修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用 while 循环。通过将 while 循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。(参考链接:为什么Python不建议在 for 循环中修改列表?)

1)在列表之间移动元素

  假设有一个列表,其中包含新注册但还未验证的网站用户;验证这些用户后,如何将他们移到另一个已验证用户列表中呢?一种办法是使用一个 while 循环,在验证用户的同时将其从未验证用户列表中提取出来,再将其加入到另一个已验证用户列表中。代码可能类似于下面这样:

# 首先, 创建一个待验证用户列表
# 和一个用于存储已验证用户的空列表
unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []# 验证每个用户, 直到没有未验证用户为止
# 将每个经过验证的列表都移到已验证用户列表中
while unconfirmed_users:current_user = unconfirmed_users.pop()print("Verifying user: " + current_user.title())confirmed_users.append(current_user)# 显示所有已验证的用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:print(confirmed_user.title())

2)删除包含特定值的所有列表元素

  我们使用函数 remove( ) 来删除列表中的特定值,这之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢?
  假设你有一个宠物列表,其中包含多个值为 ‘cat’ 的元素。要删除所有这些元素,可不断运行一个 while 循环,直到列表中不再包含值 ‘cat’,如下所示:

pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)while 'cat' in pets:pets.remove('cat')
print(pets)

3)使用用户输入来填充字典

  可使用 while 循环提示用户输入任意数量的信息。下面来创建一个调查程序,其中的循环每次执行时都提示输入被调查者的名字和回答。我们将收集的数据存储在一个字典中,以便将回答同被调查者关联起来:

responses = {}# 设置一个标志, 指出调查是否继续
polling_active = Truewhile polling_active:# 提示输入被调查者的名字和回答name = input("\nWhat is your name? ")response = input("Which mountain would you like to climb someday? ")# 将答卷存储在字典中responses[name] = response# 看看是否还有人要参与调查repeat = input("Would you like to let another person respond? (yes/ no) ")if repeat == 'no':polling_active = False# 调查结束, 显示结果
print("\n--- Poll Results ---")
for name, response in responses.items():print(name + " would like to climb " + response + ".")

《Python基础知识-4判断和循环语句》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 哪些“双一流”更得华为偏爱?这所高校人数远超清北华五
  2. MySQL------MySQL与SQLServer数据类型的转换
  3. Shell函数详解(函数定义、函数调用)
  4. STM32 电机教程 1 - 用ST Motor Profiler 测量无刷电机参数
  5. div 重新加载_使用React的HOC来完成模块的异步加载
  6. iOS 开发之获取时间到年底可能会踩到的坑
  7. 此处为本人自勉自留地!
  8. 统一沟通-技巧-7-Lync 2010-配置信息-EWS未部署
  9. qam映射c程序_DVB-C系统中QAM调制与解调仿真
  10. 学计算机笔画,学汉字学笔顺电脑版
  11. Eclipse连接小米手机无连接显示解决办法
  12. 名悦集团:开电动车会比开燃油车省钱吗?
  13. 想学python网课哪个好过_python入门:想学python网课哪个好?
  14. PR中视频材料声音大小不一样?1招快速统一音量
  15. 网络协议实验四 ARP 协议分析实验
  16. 常用网络结构:Alex,VGG,Resnet对比
  17. 大白话5分钟带你走进人工智能-第七节梯度下降之梯度概念和梯度迭代过程(2)...
  18. 复杂网络实验报告2019210025曾培圣
  19. Codeblocks 新建操作(单c文件新建和c工程创建)
  20. Zhong__xlrd基本使用

热门文章

  1. ESP32解析ble蓝牙手柄信号,直接通讯,用于控制机器人小车机械臂等
  2. 临床执业助理医师(综合练习)题库【8】
  3. Latex 自定义命令与环境、箱子
  4. Win10中如何把语言栏缩到系统托盘
  5. 手机学习利器Qpython
  6. pandas如何将两个表根据某个数组合并
  7. elementUI之表格排序失效,表格宽度可拖拽变宽变窄
  8. vivo和OPPO兄弟相煎从国内延伸至东南亚市场
  9. 自然语言处理(NLP)入门(二)
  10. 英语字母表及其冠词用法