《Python 基础篇》三:流程控制

news/2024/9/28 23:50:30/文章来源:https://www.cnblogs.com/acatsmiling/p/18438663

Author: ACatSmiling

Since: 2024-09-27

Python 代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次。

流程控制语句分成两大类:条件判断语句,循环语句。

条件判断语句

if

语法:

if 条件表达式: 代码块
  • 执行的流程:if 语句在执行时,会先对条件表达式进行求值判断,如果为 True,则执行 if 后的语句;如果为 False,则不执行。

默认情况下,if 语句只会控制紧随其后的那条语句,如果希望 if 可以控制多条语句,则可以在 if 后跟着一个代码块。

  • 代码块:

    • 代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行。
    • 代码块就是一种为代码分组的机制。
    • 如果要编写代码块,语句就不能紧随在:后边,而是要写在下一行。
    • 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束。
    • 缩进有两种方式,一种是使用 tab 键,一种是使用空格(四个)。
      • Python 代码中使用的缩进方式必须统一。
      • Python 的官方文档中推荐我们使用空格来缩进。
  • 可以使用逻辑运算符来连接多个条件,如果希望所有条件同时满足,则需要使用 and;如果希望只要有一个条件满足即可,则需要使用 or。

示例:

num = input('请输入一个数:')
num = int(num)
if num > 10:print('num比10大!')if 10 < num < 20:print('num比10大,num比20小!')

if - else

语法:

if 条件表达式:代码块1
else:代码块2
  • 执行流程:if - else 语句在执行时,先对 if 后的条件表达式进行求值判断,如果为 True,则执行 if 后的代码块 1;如果为 False,则执行 else 后的代码块 2。

示例:

age = 7
if age > 17:print('你已经成年了~~')
else:print('你还未成年~~')# 如果一个年份可以被 4 整除不能被 100 整除,或者可以被 400 整除,这个年份就是闰年
year = int(input('请输入一个任意的年份:'))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:print(year, '是闰年')
else:print(year, '是平年')

if - elif - else

语法:

if 条件表达式:代码块
elif 条件表达式:代码块
elif 条件表达式:代码块
else:代码块
  • 执行流程:if - elif - else 语句在执行时,会自上向下依次对条件表达式进行求值判断,如果表达式的结果为 True,则执行当前代码块,然后语句结束;如果表达式的结果为 False,则继续向下判断,直到找到 True 为止;如果所有的表达式都是 False,则执行 else 后的代码块。

  • if - elif - else 中只会有一个代码块会执行。

示例:

age = 210if age > 200:print('活的可真久!')
elif age > 100:print('你也是老大不小了!')
elif age >= 60:print('你已经退休了!')
elif age >= 30:print('你已经是中年了!')
elif age >= 18:print('你已经成年了!')
else:print('你还是个小孩!')age = 68if 18 <= age < 30:print('你已经成年了!')
elif 30 <= age < 60:print('你已经中年了!')
else:print('你已经退休了!')

嵌套选择

image-20240928192517659

match

模式匹配:match 语句是 Python 3.10 及以后版本中引入的新特性,它允许你根据对象的模式来检查对象,并执行相应的代码块。

  • match 语句中的每个代码块由一个或多个 case 子句组成。
  • 每个 case 子句后面跟着一个模式和一个代码块。
  • 当模式匹配成功时,会执行相应的代码块。
  • 如果没有任何模式匹配成功,则可以选择使用一个默认的代码块,使用下划线 _ 来表示。

示例:

text = 'hello'match text:case 'hello':print("text is 'hello'")case 'world':print("text is 'world'")case _:  # 匹配所有其他值print("text is neither 'hello' nor 'world'")

循环语句

循环语句可以使指定的代码块重复指定的次数。

循环语句分成两种:while 循环和 for 循环。

while 循环

语法:

while 条件表达式:代码块
else:代码块
  • 执行流程:while 语句在执行时,会先对 while 后的条件表达式进行求值判断,如果判断结果为 True,则执行循环体(代码块),循环体执行完毕,继续对条件表达式进行求值判断,以此类推,直到判断结果为 False,则循环终止,如果循环有对应的 else,则执行 else 后的代码块。
  • 条件表达式恒为 True 的循环语句,称为死循环。

循环的三个要件:

  • 初始化表达式:通过初始化表达式初始化一个变量。
  • 条件表达式:条件表达式用来设置循环执行的条件。
  • 更新表达式:修改初始化变量的值。

示例:

# 创建一个执行十次的循环
i = 0
while i < 10:i += 1print(i, 'hello')
else:print('else中的代码块')# 水仙花数是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。
# 求 1000 以内所有的水仙花数# 获取 1000 以内的三位数
i = 100
while i < 1000:# 假设,i 的百位数是 a,十位数 b,个位数 c# 求 i 的百位数a = i // 100# 求 i 的十位数# b = i // 10 % 10b = (i - a * 100) // 10# 求 i 的个位数字c = i % 10# print(i , a , b , c)# 判断 i 是否是水仙花数if a**3 + b**3 + c**3 == i :print(i)i += 1

for 循环

语法:

for 变量 in 序列 :代码块
  • range()函数可以用来创建一个数字序列,常与 for 循环结合使用来重复执行代码块指定的次数。
  • for 循环除了创建方式以外,其余的都和 while 循环一样,包括 else、break、continue 都可以在 for 循环中使用。

示例:

for i in range(5):print(i)

输出结果:

0
1
2
3
4

循环控制

break

作用:退出循环。

  • 注意:只能跳出距离最近的 while 或者 for 循环。在循环过程中,如果某一个条件满足后,不再希望循环继续执行,可以使用 break 退出循环。

示例:

i = 0
while i < 5:if i == 3:breakprint(i)  # 结束循环,结果:0 1 2i += 1
else:print('循环结束')

输出结果:

0
1
2

continue

作用:跳过本次循环后面的剩余语句,然后继续下一次循环。

  • 注意:只能跳出距离最近的 while 或者 for 循环。

示例:

i = 0
while i < 5:i += 1if i == 2:continue  # 跳出当前循环,结果:1 3 4 5 循环结束print(i)
else:print('循环结束')

输出结果:

1
3
4
5
循环结束

else

else 可以使用在循环语句中,如果没有通过 break 退出循环,循环结束后,会执行 else 的代码。

示例:

num = 1
sum = 0
while num <= 5:sum = sum + numprint(sum)if sum == 10:breaknum += 1
else:print('这是前一个循环,执行了break语句')print('####################################')num = 1
sum = 0
while num <= 3:sum = sum + numprint(sum)if sum == 10:breaknum += 1
else:print('这是后一个循环,没有执行break语句')

输出结果:

1
3
6
10
####################################
1
3
6
这是后一个循环,没有执行break语句

pass

作用:当语句要求不希望任何命令或代码来执行时使用。

  • pass 语句表示一个空操作,在执行时没有任何的响应。
  • pass 的位置最终应该有代码来执行,只不过暂时未写出来,可以使用在流程控制和循环语句中。
  • pass 语句是用来在判断或循环语句中占位的,无实际意义。如果循环体内容没想好怎么写,可以先用 pass 占位,这样不会影响程序执行。

示例:

i = 0
if i < 5:pass

循环嵌套

打印图形:

# 在控制台中打印如下图形
# *****
# *****
# *****
# *****
# *****
## 创建一个循环来控制图形的高度
# 循环嵌套时,外层循环没执行一次,内存循环就要执行一圈
i = 0
while i < 5:# 创建一个内层循环来控制图形的宽度j = 0while j < 5:# print() 默认在结尾打印 \n 换行符,添加 end 参数,打印时不要换行print("* ", end='')j += 1# 每一行打印完毕后,再打印一个换行符print()i += 1#
# *     j<1   i=0
# **    j<2   i=1
# ***   j<3   i=2
# ****  j<4   i=3
# ***** j<5   i=4
#
# *****
# ****
# ***
# **
# *
i = 0
while i < 5:j = 0while j < i + 1:print("* ", end='')j += 1print()i += 1

99 乘法表:

# 打印 99 乘法表
# 1*1=1
# 1*2=2 2*2=4
# 1*3=3 2*3=6 3*3=9
# ...                 9*9=81# 创建一个外层循环来控制图形的高度
i = 0
while i < 9:i += 1# 创建一个内层循环来控制图形的宽度j = 0while j < i:j += 1print(f"{j}*{i}={i*j} ",end="")print()

time() 函数

time():可以用来获取当前的时间,返回的单位是秒

示例:

# 引入一个 time 模块,来统计程序执行的时间
from time import *# 获取程序开始的时间
# 优化前:
#   10000 个数 12.298秒
#   100000 个数 没有结果
# 第一次优化:加 break
#   10000 个数 1.577 秒
#   100000 个数 170.645 秒
# 第二次优化:循环到根号为止
#   10000 个数 0.068 秒
#   100000 个数 1.646 秒
#
# 36 的因数
#   2 18
#   3 12
#   4 9
#   6 6
#   
begin = time()i = 2
while i <= 100000:flag = Truej = 2while j <= i ** 0.5:if i % j == 0:flag = False# 一旦进入判断,则证明 i 一定不是质数,此时内层循环没有继续执行的必要# 使用 break 来退出内层的循环breakj += 1if flag:# print(i)  passi += 1# 获取程序结束的时间
end = time()# 计算程序执行的时间
print("程序执行花费了:", end - begin, "秒")

原文链接

https://github.com/ACatSmiling/zero-to-zero/blob/main/PythonLanguage/python.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/805456.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机为什么能够打电话上网,一文带你搞懂其原理

我们的手机为什么能够打电话能够上网,这个问题相信 很多人都思考过,为什么在千里之外,他可以借到我拨出的电话,我说话的声音可以清晰地传到他的耳中,在这小小的手机里,我们可以浏览天下所有的资讯。这究竟是怎么样做到的? 这其实是得益于蜂窝移动通信网络的发展。今天我…

[友链] 挚友之链

Mystery0の小站https://blog.mystery0.vip/本文作者:千千寰宇本文链接:https://www.cnblogs.com/johnnyzen关于博文:评论和私信会在第一时间回复,或直接私信我。版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!日常交流:大数据与软件开…

AI Agent应用出路到底在哪?

1 Agent/Function Call 的定义 Overview of a LLM-powered autonomous agent system:Agent学会调用外部应用程序接口,以获取模型权重中缺失的额外信息(预训练后通常难以更改),包括当前信息、代码执行能力、专有信息源访问权限等。 2 从去年到现在有什么进展? Not a resea…

极客大挑战2023-pwn-nc_pwntools WriteUp

主要考查点 Pwntools工具的基本使用方法 解题思路 1.nc 连接题目,得到提示:根据题目,要求发送一个100长度的字符串,而且末尾需要为Syclover bA*92 + bSyclover 2.发送第一个请求后进入第二步要求短时间内计算一个复杂算式,自己算是肯定不可能的,所以pwntools的recv来接收…

pbootcms统计代码标签(如何安装百度统计代码)

要在 PbootCMS 中安装百度统计代码或其他第三方统计代码,可以按照以下步骤操作: 1. 后台安装统计代码登录后台:访问后台地址:你的域名/admin.php。 账号:admin,密码:admin。进入站点信息设置:在后台左侧菜单中选择“基础内容” -> “站点信息”。粘贴统计代码:在“…

PbootCMS后台访问地址及默认帐号密码

如果你在使用PbootCMS时遇到关于后台默认账号密码的问题,以下是一些关键信息: PbootCMS 后台默认访问路径访问路径:你的域名/admin.php将“你的域名”替换为实际的网址。后台初始账号密码初始账号:admin 初始密码:admin示例 假设你的域名为 example.com,则后台访问路径为…

docker 创建私有仓库,并且设置用户名和密码

1. 拉取仓库 docker pull registry2. 安装密码生成工具 sudo apt-get install apache2-utils3. 生成用户名和密码 htpasswd -Bc /etc/docker/registry/passwords dzq4. 启动仓库docker run -d -p 5000:5000 --restart=always --name registry \-e REGISTRY_AUTH=htpasswd…

PbootCMS简单安装教程 – pbootcms基本使用教程

为了帮助用户顺利安装并使用PbootCMS系统,以下是详细的安装步骤和注意事项: 1. 环境要求PHP版本:PbootCMS系统默认采用SQLite数据库,需要PHP 5.4及以上版本,最新系统需要PHP 7.0及以上版本。 服务器环境:确保服务器环境正确配置,使用PHP环境。2. 安装前的准备环境配置:…

pbootcms目录结构解释说明及权限设置

为了确保PbootCMS能够正常运行,需要对一些关键目录设置正确的权限。以下是具体的目录权限设置说明: 1. 数据库目录 (data) 可写路径:/data 权限:755 或 777 命令:bashchmod 755 /path/to/pbootcms/data2. 运行时目录 (runtime) 及子目录可写路径:/runtime 权限:755 或 7…

pbootcms二次开发必须要了解的后台目录结构

下面是PbootCMS后台目录结构的整理表格,方便二次开发人员参考:目录 描述apps 应用目录 admin 后台应用 api API接口应用 common 公共目录 home 前台应用config 配置目录 config.php 系统配置文件 database.php 数据库配置文件 route.php 自定义路由配置…

pbootcms模板 后台升级程序后导致网站打不开 Parse error: syntax error, unexpec

当你在升级PbootCMS模板后台后遇到网站打不开的问题,并且出现如下错误: Parse error: syntax error, unexpected :, expecting { in /www/wwwroot/****/core/function/helper.php on line 745这通常是因为PHP版本不兼容导致的。PbootCMS 3.2版本要求PHP 7及以上版本。以下是具…

小模型(SLM)的效率、性能和潜力

关于小语言模型 小语言模型(slm)是为在桌面、智能手机和可穿戴设备上进行资源高效部署而设计的。 其目标是使先进的机器智能能够为每个人所使用和负担得起,就像人类认知的普遍性一样。 小语言模型(slm)已经广泛集成到商业设备中。例如,最新的谷歌和三星智能手机内置了大型语言…