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

news2024/9/25 23:07:48

控制语句

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

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

一、选择结构

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

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 + i
    if i % 2 == 1:
        sum_e = i + sum_e
    else:
        sum_o = sum_o + i
    i = 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: #遍历字典所有的key
    print(x)
for x in d.keys():#遍历字典所有的key
    print(x)
for x in d.items():#遍历字典所有的"键值对"
    print(x)
for x in d.values():#遍历字典所有的value
    print(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 + i
    i = i + 1
for i in range(1,101,2):
    sum_e = sum_e + i
    i = i + 1
for i in range(2,101,2):
    sum_o = sum_o + i
    i = 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':
        break
    else:
        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("录入完成,退出系统")
        break

    if float(salary) < 0:
        continue

    employee_num = employee_num + 1
    salary_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("录入完成,退出")
        break
    if float(salary) < 0:
        print("输入非法,请重新输入")
        continue
    salary_list.append(float(salary))
    salary_sum += float(salary)
    employee_num += 1
    print("当前录入员工个数为:", employee_num)
    print("当前录入员工工资总和为:", salary_sum)
    print("当前录入员工工资平均数为:", salary_sum / employee_num)
    print("当前录入员工工资列表为:", salary_list)

⑥循环代码优化

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

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

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

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

三、综合练习

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPS在Linux下的使用(war driving的前置学习)

1.ls /dev/tty* 列出所有与 tty 相关的设备文件。这些设备文件通常对应终端设备 ttyUSB0是GPS端口 2.cat /dev/ttyUSB0 用于读取并显示连接到 /dev/ttyUSB0 串口设备发送的原始数据 这种是GPS定位不全的&#xff0c;要拿到更开阔的地方 这种是GPS定位全的 因为会持续输出…

大模型神书《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》读完少走几年弯路!

这几年&#xff0c;自然语言处理&#xff08;NLP&#xff09;绝对是机器学习领域最火的方向。那么今天给大家带来一本 《HuggingFace自然语言处理详解——基于BERT中文模型的任务实战》 这本大模型书籍资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证…

MoveIt控制机械臂的运动实现——机器人抓取系统基础系列(二)

文章目录 概要1 用户接口和代码案例2 不同的规划类型2.1 关节空间规划2.2 工作空间规划2.3 笛卡尔空间规划 3 MoveIt运行实操4 相关资料推荐小结 概要 MoveIt为开发者提供了针对机械臂的集成化开发平台&#xff0c;由一系列操作相关的功能包组成&#xff0c;包括运动规划、操作…

一、人物朝向摄像机移动

一、导入插件Cinemachine 重命名为ThirdPersonCamera Follow和LookAt 选择为player 镜像Y轴&#xff0c;取消X轴 摄像机绑定模式为World Space 二、挂载代码PlayerController using System.Collections; using System.Collections.Generic; using UnityEngine;public class…

查询最近正在执行的sql(DM8 : 达梦数据库)

查询最近正在执行的sql DM8 : 达梦数据库 1 查询最近正在执行的sql2 更多达梦数据库学习使用列表 1 查询最近正在执行的sql 迁移数据时 , 业务无响应 , 查看最近活动的sql , 有没有迁移相关的表 , 通过最后的时间字段 , 判断会话是否正在执行 SELECT SESS_ID, SQL_TEXT, STATE…

三条命令实现linux内核升级

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm 如果报&#xff1a;curl: (35) Peer reports incompatible or unsupported protocol version. 执行命令&#xff1a; yum update -y nss curl libcurl 2.yum --enablerepoelrepo-kernel install …

iOS六大设计原则设计模式

六大设计原则&#xff1a; 一、单一职责原则 一个类或者模块只负责完成一个职责或者功能。 类似于&#xff1a;UIView 和 CALayer 二、开放封闭原则 对扩展开放&#xff0c;对修改封闭。 我们要尽量通过扩展软件实体来解决需求变化&#xff0c;而不是通过修改已有的代码来…

Redis主从集群搭建

一、什么是主从复制 主从复制&#xff0c;是指将一台redis服务的数据复制到集群中其他的redis服务&#xff0c;前者称(Maste)&#xff0c;后者称(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能从主节点复制到从节点&#xff0c;一个主节点可以有多个从节点&#xff0…

【CubeMX学习笔记】关于CAN通信协议

目录 一、CAN通信简介 二、CAN数据帧类型 三、格式帧 四、位同步 传输数据时可能遇到的问题 最小时间单位 硬同步 再同步 波特率的计算 STM32中的CAN外设 一、原理图 二、标识符筛选 三、配置单个邮箱&#xff08;正常模式或自发自收只需要修改模式&#xff09; …

探索 ShellGPT:终端中的 AI 助手

文章目录 探索 ShellGPT&#xff1a;终端中的 AI 助手背景介绍ShellGPT 是什么&#xff1f;如何安装 ShellGPT&#xff1f;简单的库函数使用方法场景应用常见问题及解决方案总结 探索 ShellGPT&#xff1a;终端中的 AI 助手 背景介绍 在当今快速发展的技术领域&#xff0c;命…

人体动捕相关算法

SMPL、SMPLify SMPL&#xff08;Skinned Multi-Person Linear (SMPL) Model&#xff09;Keep it SMPL: Automatic Estimation of 3D Human Pose and Shape from a Single Image&#xff0c;2015 SMPL 关节点数量&#xff1a;K23&#xff0c;其中0号节点&#xff08;不在K之…

一区黏菌算法+双向深度学习+注意力机制!SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 一区黏菌算法双向深度学习注意力机制&#xff01;SMA-BiTCN-BiGRU-Attention黏菌算法优化双向时间卷积双向门控循环单元…

keil的debug功能

文章目录 一.窗口介绍二.功能2.1 debug断点调试和窗口变量2.2 四个花括号功能2.2.1 进去函数和下一步功能2.2.2 跳过函数和跳过该行代码功能2.2.3 函数内部跳出功能2.2.4 执行到光标处 2.3 查看内部寄存器 一.窗口介绍 二.功能 2.1 debug断点调试和窗口变量 先打开下图debug断…

Scanner流程控制语句

1. Scanner类 Scanner的意思是扫描 Scanner是JDK提供的一个类&#xff0c;位于java.util包下&#xff0c;所以我们如果需要使用则必须导包&#xff0c;导包的语句必须在声明包之后&#xff0c;在声明类之前 Scanner类是用来接受用户输入的各种信息 Scanner类提供了用于接受…

Ubuntu中交叉编译armdillo库

网上关于交叉编译armdillo库比较少&#xff0c;借鉴了一些但是在前几天编译时总是磕磕绊绊&#xff0c;于是写一个详细的编译过程。 交叉编译armdillo库包含两个步骤&#xff1a;交叉编译依赖库和交叉编译armdillo库。armdillo官网介绍依赖库如下图所示&#xff1a; 需要注意如…

01【MATLAB】最小二乘系统辨识

目录 1.系统辨识的定义及其分类 1.1 系统辨识的定义 1.2 系统辨识的分类 2.参数模型 3.系统辨识的步骤 一、最小二乘法&#xff08;Least Squares Method&#xff09;一般步骤 二、LSM原理及应用 三、LSM在控制系统建模中的应用 1.系统辨识的定义及其分类 1.1 系统辨识的…

Leetcode面试经典150题-201.数字范围按位与

给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;left 5, right 7 输出&#xff1a;4示例 2&#xff1a; 输入&…

Kolmogorov-Arnold——代替 MLP以提高模型的代表性和性能

前言 论文地址&#xff1a;https://arxiv.org/abs/2409.10594 源码地址&#xff1a;https://github.com/Adamdad/kat.git 传统的变压器模型使用多层感知器&#xff08;MLP&#xff09;来混合通道间的信息&#xff0c;而本文则使用了科尔莫哥罗德网络&#xff08;KAN&#xff0…

微信第三方开发平台接入公众号整体技术方案

1.1 公众号简介 官网地址&#xff1a;微信公众平台 微信公众号 就像是你在微信里的一个“官方小号”&#xff0c;专门用来发布内容、和粉丝互动。用户可以关注你的公众号&#xff0c;收到你发布的消息&#xff0c;就像朋友圈那样。公众号还能提供很多实用功能&#xff0c;比如…

在 React 中模拟输入

需求 与 Bug 项目的 C# 桌面端使用 CefSharp 内嵌了一个三方网站&#xff0c;在外部实现了一个登录控件&#xff0c;外部登录后希望内嵌的三方网站自动登录&#xff0c;实现代码如下&#xff1a; browser.ExecuteScriptAsync($"document.getElementsByName(username)[0]…