当前位置: 首页 > news >正文

python学习笔记(3)——控制语句

控制语句

        我们在前面学习的过程中,都是很短的示例代码,没有进行复杂的操作。现在,我们将开始学习流程控制语句。 前面学习的变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字 典、集合),可以看做是数据的组织方式。数据可以看做是“砖块”! 流程控制语句是代码的组织方式,可以看做是“混凝土”。

        一个完整的程序,离不开“砖块”,也离不开“混凝土”。他们的组合,才能让我们建立从小到“一个方法”,大到“操作系统”,这样各种各样的“软件”。

一、选择结构

        选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。

1.单分支选择结构

if 语句单分支结构的语法形式如下:

        if 条件表达式:

                语句/语句块

其中:

        条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。

        语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。

num =input("输入一个数字:")
if int(num)<10:print(num)
条件表达式详解

在选择和循环结构中,条件表达式的值为False的情况如下:

        False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空range对象、空迭代对象。

        其他情况,均为True。

·条件表达式中,不能有赋值操作符“=”

2.双分支选择结构

双分支结构的语法格式如下:

        if 条件表达式 :

                语句1/语句块1

        else:

                语句2/语句块2

三元条件运算符

        Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下:

条件为真时的值 if (条件表达式) else 条件为假时的值

num =input("请输入一个数字")
print( num if int(num)<10 else "数字太大")

3.多分支选择结构

多分支选择结构的语法格式如下:

        if 条件表达式1:

                语句1/语句块1

        elif 条件表达式2:

                语句2/语句块2

                . . .

        elif 条件表达式n:

                语句n/语句块n

        [else:

                语句n+1/语句块n+1

        ]

二、循环结构

        循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果 为True则重复执行循环体里的语句。图示如下:

1.while 循环

例:利用while循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和, 计算1-100之间奇数的累加和。

i = 0
sum = 0
sum_o = 0
sum_e = 0
while i <= 100:sum = sum + iif i % 2 == 1:sum_e = i + sum_eelse:sum_o = sum_o + ii = i + 1
print(sum)
print(sum_e)
print(sum_o)# 5050
# 2500
# 2550

2.for 循环和可迭代对象遍历

        for 循环通常用于可迭代对象的遍历。for循环的语法格式如下:

                for 变量 in 可迭代对象:

                        循环体语句

遍历一个元组或列表:

for x in (20,30,40):print(x*3)
可迭代对象

Python 包含以下几种可迭代对象:

        1. 序列。包含:字符串、列表、元组

        2. 字典

        3. 迭代器对象(iterator)

        4. 生成器函数(generator)

        5. 文件对象

遍历字符串中的字符:

for i in 'love you':print(i)

遍历字典

d ={'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}
for x in d: #遍历字典所有的keyprint(x)
for x in d.keys():#遍历字典所有的keyprint(x)
for x in d.items():#遍历字典所有的"键值对"print(x)
for x in d.values():#遍历字典所有的valueprint(x)
①range 对象

        range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:

range(start, end [,step])

        生成的数值序列从start开始到end结束(不包含end)。若没有填写start,则默认从0 开始。step是可选的步长,默认为1。如下是几种典型示例:

        for i in range(10) 产生序列:0123456789

        for i in range(3,10)产生序列:3456789

        for i in range(3,10,2) 产生序列:3 5 7 9

例1.计算累加和

        利用for循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和, 计算1-100之间奇数的累加和。

sum = 0
sum_e = 0
sum_o = 0
for i in range(1,101):sum = sum + ii = i + 1
for i in range(1,101,2):sum_e = sum_e + ii = i + 1
for i in range(2,101,2):sum_o = sum_o + ii = i + 1   
print(sum)
print(sum_e)
print(sum_o)# 5050
# 2500
# 2550
②嵌套循环和综合练习

        一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。

例1.打印如下图案

for i in range(5):for j in range(5):print(i,end = '\t')print( )    #仅用于换行
例2.打印九九乘法表
for i in range(1,10):for j in range(1,i+1):print(j,'*',i,'=',i*j,end = '\t')print( )    #仅用于换行# 1 * 1 = 1
# 1 * 2 = 2       2 * 2 = 4
# 1 * 3 = 3       2 * 3 = 6       3 * 3 = 9
# 1 * 4 = 4       2 * 4 = 8       3 * 4 = 12      4 * 4 = 16
# 1 * 5 = 5       2 * 5 = 10      3 * 5 = 15      4 * 5 = 20      5 * 5 = 25
# 1 * 6 = 6       2 * 6 = 12      3 * 6 = 18      4 * 6 = 24      5 * 6 = 30      6 * 6 = 36
# 1 * 7 = 7       2 * 7 = 14      3 * 7 = 21      4 * 7 = 28      5 * 7 = 35      6 * 7 = 42      7 * 7 = 49
# 1 * 8 = 8       2 * 8 = 16      3 * 8 = 24      4 * 8 = 32      5 * 8 = 40      6 * 8 = 48      7 * 8 = 56      8 * 8 = 64
# 1 * 9 = 9       2 * 9 = 18      3 * 9 = 27      4 * 9 = 36      5 * 9 = 45      6 * 9 = 54      7 * 9 = 63      8 * 9 = 72      9 * 9 = 81

例3.用列表和字典存储下表信息,并打印出表中工资高于15000的数据

例3.用列表和字典存储下表信息,并打印出表中工资高于 15000 的数据
r1= dict(name="高小一",age=18,salary=30000,city="北京")
r2= dict(name="高小二",age=19,salary=20000,city="上海")
r3= dict(name="高小三",age=20,salary=10000,city="深圳")
tb = [r1,r2,r3]
for x in tb:if x.get('salary') > 15000:print(x)#{'name': '高小一', 'age': 18, 'salary': 30000, 'city': '北京'}
#{'name': '高小二', 'age': 19, 'salary': 20000, 'city': '上海'}
③break 语句

        break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。

使用 break 语句结束循环:

while 1:a = input("请输入字母,当输入Q或者q时循环跳出")if a == 'Q' or a == 'q':breakelse:print(a)
④continue 语句

        continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。

        例4.要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪。
employee_num = 0
salary_sum = 0
salary_list = []
while 1:salary = input("请输入员工薪资,当输入q或Q时结束")if salary == "q" or salary == "Q":print("录入完成,退出系统")breakif float(salary) < 0:continueemployee_num = employee_num + 1salary_list.append(salary)salary_sum = salary_sum + float(salary)print("员工总数为:",employee_num)print("员工薪资总数为:",salary_sum)print("员工薪资平均数为:",salary_sum/employee_num)print("员工薪资列表为:",salary_list)
⑤else 语句

        while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。语法格式如下:

        while 条件表达式:

                循环体

        else: 语句块

或者:

        for 变量 in 可迭代对象:

                循环体

        else: 语句块

        例5.员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录入 4 名员工的薪资”。最后,打印输出录入的薪资和平均薪资。
employee_num = 0
salary_sum = 0
salary_list = []
for i in range(4):salary = input("请输入共四名员工的工资(按q或Q退出): ")if salary == 'q' or salary == 'Q':print("录入完成,退出")breakif float(salary) < 0:print("输入非法,请重新输入")continuesalary_list.append(float(salary))salary_sum += float(salary)employee_num += 1print("当前录入员工个数为:", employee_num)print("当前录入员工工资总和为:", salary_sum)print("当前录入员工工资平均数为:", salary_sum / employee_num)print("当前录入员工工资列表为:", salary_list)
⑥循环代码优化

        虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上“斤斤计较”。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

        1. 尽量减少循环内部不必要的计算

        2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

        3. 局部变量查询较快,尽量使用局部变量

三、综合练习

相关文章:

python学习笔记(3)——控制语句

控制语句 我们在前面学习的过程中&#xff0c;都是很短的示例代码&#xff0c;没有进行复杂的操作。现在&#xff0c;我们将开始学习流程控制语句。 前面学习的变量、数据类型&#xff08;整数、浮点数、布尔&#xff09;、序列&#xff08;字符串、列表、元组、字 典、集合&am…...

关系数据库设计之Armstrong公理详解

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、Armstrong公理简介 Armstrong公理是一组在关系数据库理论中用于推导属性依赖的基本规则。这些公理是以著名计算机科学家威廉阿姆斯特朗&…...

【Geoserver使用】SRS处理选项

文章目录 前言一、Geoserver的三种SRS处理二、对Bounding Boxes计算的影响总结 前言 今天来看看Geoserver中发布图层时的坐标参考处理这一项。根据Geoserver官方文档&#xff0c;坐标参考系统 (CRS) 定义了地理参考空间数据与地球表面实际位置的关系。CRS 是更通用的模型&…...

python里面的单引号和双引号的区别

在Python中&#xff0c;单引号&#xff08;‘’&#xff09;和双引号&#xff08;“”&#xff09;在大多数情况下是等价的&#xff0c;没有本质区别。它们都用于创建字符串。以下是一些关键点&#xff1a; 功能相同&#xff1a; 两者都可以用来定义字符串&#xff0c;例如&…...

为什么不要在循环,条件或嵌套函数中调用hooks

为什么不要在循环&#xff0c;条件或嵌套函数中调用hooks 前言useState Hook 的工作原理具体实现1、初始化2、第一次渲染3、后续渲染4、事件处理简单代码实现 为什么顺序很重要Bad Component 第一次渲染Bad Component 第二次渲染 总结 前言 自从 React 推出 hooks 的 API 后&a…...

将成功请求的数据 放入apipost接口测试工具,发送给后端后,部分符号丢失

将成功请求的数据 放入apipost接口测试工具&#xff0c;发送给后端后&#xff0c;部分符号丢失 apipost、接口测试、符号、丢失、错乱、变成空格背景 做CA对接&#xff0c;保存CA系统的校验数据&#xff0c;需要模仿前端请求调起接口&#xff0c;以便测试功能完整性。 问题描…...

N诺计算机考研-错题

B A.LLC,逻辑链路控制子层。一个主机中可能有多个进程在运行,它们可能同时与其他的一些进程(在同一主机或多个主机中)进行通信。因此在一个主机的 LLC子层的一个服务访问点,以便向多个进程提供服务。B.MAC地址,称为物理地址、硬件地址,也称为局域网地址,用来定义网络设…...

vue3 数字滚动组件封装

相关参考文献 干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React) Vue3 插件方式 安装插件: countup.js 封装组件: components/count-up/index.js <template><div class="countup-wrap"><slot name="prefix"></slot&g…...

如何确保消息只被消费一次:Java实现详解

引言 在分布式系统中&#xff0c;消息传递是系统组件间通信的重要方式&#xff0c;而确保消息在传递过程中只被消费一次是一个关键问题。如果一个消息被多次消费&#xff0c;可能会导致业务逻辑重复执行&#xff0c;进而产生数据不一致、错误操作等问题。特别是在金融、电商等…...

Web3技术在元宇宙中的应用:从区块链到智能合约

随着元宇宙的兴起&#xff0c;Web3技术正逐渐成为其基础&#xff0c;推动着数字空间的重塑。元宇宙不仅是一个虚拟世界&#xff0c;它还代表着一个由去中心化技术驱动的新生态系统。在这个系统中&#xff0c;区块链和智能合约发挥着至关重要的作用&#xff0c;为用户提供安全、…...

关于QSizeGrip在ui界面存在布局的情况下的不显示问题

直接重写resizeEvent你会发现&#xff1a;grip并没有显示 void XXXXX::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);this->m_sizeGrip->move(this->width() - this->m_sizeGrip->width() - 3,this->height() - this->m_sizeGrip->…...

开始场景的制作+气泡特效的添加

3D场景或2D场景的切换 1.新建项目时选择3D项目或2D项目 2.如下图操作&#xff1a; 开始前的固有流程 按照如下步骤进行操作&#xff0c;于步骤3中更改Company Name等属性&#xff1a; 本案例分辨率可以如下设置&#xff0c;有能力者可根据需要自行调整&#xff1a; 场景制作…...

位运算--(二进制中1的个数)

位运算是计算机科学中一种高效的操作方式&#xff0c;常用于处理二进制数据。在Java中&#xff0c;位运算通常通过位移操作符和位与操作符实现。 当然位运算还有一些其他的奇淫巧计&#xff0c;今天介绍两个常用的位运算方法&#xff1a;返回整数x的二进制第k位的值和返回x的最…...

使用Docker和Macvlan驱动程序模拟跨主机跨网段通信

以下是使用Docker和Macvlan驱动程序模拟跨主机跨网段通信的架构图&#xff1a; #mermaid-svg-b7wuGoTr6eQYSNHJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-b7wuGoTr6eQYSNHJ .error-icon{fill:#552222;}#mermai…...

RestCloud webservice 流程设计

RestCloud webservice 流程设计 操作步骤 离线数据集成&#xff08;首页&#xff09; → \rightarrow → 示例应用数据集成流程&#xff08;边栏&#xff09; → \rightarrow → 所有数据流程 → \rightarrow → webservice节点获取城市列表 → \rightarrow → 流程设计 …...

从入门到精通:QT 100个关键技术关键词

Qt基础概念 Qt Framework - 一个跨平台的C图形用户界面应用程序开发框架。它不仅提供了丰富的GUI组件&#xff0c;还包括网络、数据库访问、多媒体支持等功能。 Qt Creator - Qt官方提供的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了代码编辑器、项目管理工具、…...

2024年双十一值得入手的好物有哪些?五大性价比拉满闭眼入好物盘点

随着2024年双十一购物狂欢节的临近&#xff0c;消费者们纷纷开始关注各类好物&#xff0c;期待在这一天能够以最优惠的价格入手心仪的商品&#xff0c;在这个特殊的时刻&#xff0c;我们为大家盘点了五大性价比拉满的闭眼入好物&#xff0c;这些产品不仅品质卓越&#xff0c;而…...

Hbase日常运维

1 Hbase日常运维 1.1 监控Hbase运行状况 1.1.1 操作系统 1.1.1.1 IO 群集网络IO&#xff0c;磁盘IO&#xff0c;HDFS IO IO越大说明文件读写操作越多。当IO突然增加时&#xff0c;有可能&#xff1a;1.compact队列较大&#xff0c;集群正在进行大量压缩操作。 2.正在执行…...

鸿蒙开发的基本技术栈及学习路线

随着智能终端设备的不断普及与技术的进步&#xff0c;华为推出的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;迅速引起了全球的关注。作为一个面向多种设备的分布式操作系统&#xff0c;鸿蒙不仅支持手机、平板、智能穿戴设备等&#xff0c;还支持IoT&#xff08;物联网&…...

【算法】反向传播算法

David Rumelhart 是人工智能领域的先驱之一&#xff0c;他与 James McClelland 等人在1986年通过其著作《Parallel Distributed Processing: Explorations in the Microstructure of Cognition》详细介绍了反向传播算法&#xff08;Backpropagation&#xff09;&#xff0c;这一…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...