python基础语法--顺序结构
Python中的顺序结构主要包括流程控制语句,如 if、while 和 for 语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。
if 语句
if 语句用于根据某个条件来决定是否执行一段代码。if 语句的基本语法如下:
if condition:# 如果条件为真,则执行这里的代码
此外,还可以加上 elif(else if)和 else 子句来扩展 if 语句的功能。
if 语句可以使用逻辑运算符 and、or 和 not 来组合多个条件表达式,从而实现更复杂的逻辑判断。下面详细介绍这些逻辑运算符的用法:
运算符
1. and 运算符
and 运算符用于连接两个条件表达式,只有当两个条件都为真时,整个表达式的结果才为真。
示例
expression1 and expression2
假设我们要判断一个人是否成年且是否有驾照:
age = 20
has_license = Trueif age >= 18 and has_license:print("成年且有驾照")
else:print("未成年后/或没有驾照")
在这个例子中,只有当 age >= 18 和 has_license 都为 True 时,才会执行 print("成年且有驾照")。
2. or 运算符
or 运算符用于连接两个条件表达式,只要有一个条件为真,整个表达式的结果就为真。
示例
expression1 or expression2
假设我们需要判断一个人是否符合以下任一条件:年龄大于等于18岁或有驾照:
age = 17
has_license = Trueif age >= 18 or has_license:print("符合条件")
else:print("不符合条件")
在这个例子中,只要 age >= 18 或 has_license 中至少有一个为 True,就会执行 print("符合条件")。
3. not 运算符
not 运算符用于取反一个条件表达式的结果,即如果原条件为真,则取反后为假;如果原条件为假,则取反后为真。
示例
not expression
假设我们需要判断一个人是否未成年:
age = 17if not age >= 18:print("未成年")
else:print("成年")
在这个例子中,age >= 18 为 False,取反后为 True,因此执行 print("未成年")。
综合示例
下面是一个综合示例,演示如何使用 and、or 和 not 运算符来组合多个条件表达式:
age = 17
has_license = False
is_student = True# 判断是否符合以下条件之一:成年且有驾照,或者未成年的学生
if (age >= 18 and has_license) or (age < 18 and is_student):print("符合条件")
else:print("不符合条件")
在这个例子中,我们使用了 and 和 or 来组合多个条件:
- 如果
age >= 18且has_license,则符合条件。 - 如果
age < 18且is_student,则符合条件。
优先级
逻辑运算符的优先级如下:
notandor
这意味着 not 的优先级最高,其次是 and,最后是 or。如果需要改变优先级,可以使用括号 () 来明确表达式的顺序。
示例
age = 20
has_license = False
is_student = Trueif (age >= 18 and not has_license) or is_student:print("符合条件")
else:print("不符合条件")
在这个例子中,not has_license 的优先级高于 and 运算符,因此先计算 not has_license。
总结
使用 and、or 和 not 运算符可以组合多个条件表达式,从而实现更复杂的逻辑判断。这些逻辑运算符的合理使用可以使你的代码更加清晰和高效。
and:所有条件都为真时,整个表达式为真。or:只要有一个条件为真,整个表达式为真。not:取反条件表达式的结果。
示例代码
常见用法
x = 10if x > 0:print("x 是正数")
elif x == 0:print("x 是零")
else:print("x 是负数")
直接将结果赋值给一个变量

在一个条件表达式内可以嵌套另一个条件表达式
a = 6
b = 8
print('a大于b' if a > b else ('a小于b' if a < b else 'a等于b'))
# a小于b
题目
关于条件表达式的一些题目:

对于A选项:

在Python中,if语句通常后面可以跟着elif(else if)和else来构成完整的条件语句。在这种情况下,else应该跟在if语句的后面,而不是在其中间,作为另一个条件分支的开始。所以这个选项是错误的。
正确的语法应该是:
if x < y:print('foo')
else:print('bar')
在这个语法中,如果 x 小于 y,则打印 'foo',否则打印 'bar'。这样,每个分支都有清晰的开始和结束,遵循了Python语法的规定。
对于D选项:
这个Python语句是一个简单的条件语句,用于比较两个变量x和y的大小关系。如果x小于y,则会执行冒号后面的代码块,否则不执行。让我们逐步解析这个语句:
-
if x < y:这是一个条件语句的开始,检查条件是否成立。条件是 x < y,如果x小于y,则条件成立,执行接下来的代码块。 -
print('foo');print('bac');print('baz'):这是条件成立时执行的代码块。它包含三个独立的打印语句,每个语句后面都有一个分号。这表示这三个打印语句是一行内的连续语句,不需要使用缩进或换行符来分隔。在条件成立时,将按顺序执行这三个打印语句。
综上所述,如果变量x小于变量y,则会依次打印 'foo'、'bac'和'baz',否则不执行任何操作。


while 循环
while 循环用于在满足某个条件时重复执行一段代码。while 循环的基本语法如下:
while condition:# 如果条件为真,则执行这里的代码
需要注意的是,在 while 循环中,必须确保循环条件最终会变为假,否则会导致无限循环。
示例代码
count = 0
while count < 5:print("Count:", count)count += 1
题目

def avg_input():total = 0count = 0while True:x = input()if x == '': # 如果输入为空字符串,则结束循环breaktotal += float(x)count += 1if count == 0:return 'N/A'else:return round(total / count, 1)print(avg_input())
for 循环
for 循环用于遍历序列(如列表、元组、字符串等)中的元素。for 循环的基本语法如下:
for variable in iterable:# 对于 iterable 中的每个元素,执行这里的代码
for 循环也可以使用 range() 函数来生成一系列数字。
示例代码
# 遍历列表
numbers = [1, 2, 3, 4, 5]
for number in numbers:print(number)# 使用 range() 生成数字序列
for i in range(5):print(i)
-
如果循环体内不需要使用自定义的变量,可以将自定义对象替换为
_; -
for - in循环语句通常用来遍历range、列表、元组、字符串等序列;
# 使用range返回值作为迭代对象for number in range(1, 4):print(number)# 不需要使用自定义变量,用_替代
for _ in range(1, 4): # 打印三次 helloprint('hello')# 遍历字典, 变量返回的是key值
d = { 'Fruits':86, 'Books':83, 'Videos':2 }
for elem in d:print(elem)
# 遍历字典,返回value值
for value in d.values():print(value)
# 遍历字典,返回key,value值
for key, value in d.items():print(key, '->', value)
- 如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象;
worlds = ['Java', 'Python', 'C++', 'MySql']
# 将长度大于3的字符串移除
for world in worlds[:]:if len(world) > 3:worlds.remove(world)
print(worlds)
- 如果在遍历序列的过程中需要访问元素的索引,有以下几种实现方式:
L = ['Java','Python','Swift','Kotlin']# 第1种实现方式
index = 0
for item in L:print('L[{}] = {}'.format(index,item))index += 1# 第2种实现方式
for index in range(len(L)):print('L[{}] = {}'.format(index,L[index]))# 第3种方法
index = 0
while index < len(L):print('L[{}] = {}'.format(index, L[index])index += 1# 第4种方法
# 可以调用内置函数enumerate(类enumerate的构造方法)将要遍历的序列转换为enumerate对象。
print(enumerate(L)) # <enumerate object at 0x103b03a20>print(list(enumerate(L)))
# [(0,Java'),(1,'Python'),(2,'Swift'),(3,'Kotlin')]
# 还可以指定索引的起始值
print(list(enumerate(L, 1))
# [(1,Java'),(2,'Python'),(3,'Swift'),(4,'Kotlin')]for index, item in list(enumerate(L)):print('L[{}] = {}'.format(index,item))
# 或者
for index, item in enumerate(L):print('L[{}] = {}'.format(index,item))
- 并行遍历–>同时遍历多个可迭代对象
例如:列表names中存放姓名,列表ages中存放对应的年龄。如果想同时遍历这两个列表,打印出所有的姓名及对应的年龄,可以这样实现:
实现一:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
for i in range(len(names)):print(names[i],'的年龄是:', ages[i])
实现二:
如果需要同时遍历多个可迭代对象,可以调用内置函数zip(类zi的构造方法)将多个可迭代对象打包压缩成zip对象:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
print(list(zip(names, ages)))
# [('Jack', 16), ('Mike', 32), ('Tom', 43)]
或:
for name, age in zip(names, ages):print(name, '->', age)
# Jack -> 16
# Mike -> 32
# Tom -> 43
可以使用 * 进行解压操作:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = list(zip(names, ages)) # 将zip对象转换为列表
print(a) # [('Jack', 16), ('Mike', 32), ('Tom', 43)]x, y = zip(*a) # 直接使用zip结果解压
print(list(x)) # ['Jack', 'Mike', 'Tom']
print(list(y)) # [16, 32, 43]
错误示例:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = zip(names, ages) # a此时是一个zip对象
print(list(a)) # [('Jack', 16), ('Mike', 32), ('Tom', 43)]
# 内容被清空了
x, y= zip(*a)
print(list(x))
print(list(y))
运行报错:

问题出在 zip 函数的使用上。在代码中,当执行 print(list(a)) 后,a 已经被消耗完了。这是因为 zip 函数是一个迭代器,一旦被迭代完,它的内容就会被清空。
因此,当你尝试解压 a 的时候,a 已经为空,导致解压失败。
题目

这段代码意图是将列表 x 中的每个字符串转换为大写,但实际上它并没有起到预期的作用。
原因在于 upper() 方法并不会修改原字符串,而是返回一个新的字符串,该字符串是原字符串的大写版本。因此,在你的代码中,调用 i.upper() 并没有对原列表 x 中的字符串进行修改,而是返回了大写版本的字符串,但并没有进行任何操作。正确写法,如下:
# 方法一:使用列表推导式
x = [i.upper() for i in x]
print(x) # ['AB', 'CD']# 方法二:修改原列表
for i in range(len(x)):x[i] = x[i].upper()
print(x) # ['AB', 'CD']


- 在
for循环中,我们遍历列表a中的每一个元素。循环的迭代器是a[-1],即列表a中的最后一个元素。 - 在每一次迭代中,我们将列表
a中的最后一个元素赋值给a[-1]。由于a[-1]指向列表中的最后一个元素,因此这实际上是在修改列表中的元素。 - 然后,我们打印出
a[-1]的值。由于a[-1]在每次迭代中都会被重新赋值为列表a中的当前元素,因此打印的结果是[0, 1, 2, 3]中的每一个元素。

这段代码的目的是将列表 x 中的每个字符串转换为大写,并将转换后的字符串添加到列表 x 的末尾。然而,这段代码会导致意外的结果。
- 在
for循环中,你正在遍历列表x中的元素,并对每个元素执行i.upper()来将其转换为大写。然后,你尝试将转换后的字符串添加到列表 x 的末尾,这会改变正在遍历的列表,导致无限循环。 - 具体来说,当循环执行到第一个元素
'ab'时,它会将其转换为大写形式'AB'并将其添加到x的末尾。然后,循环继续下一个元素,但此时列表x已经改变了,它现在包含了额外的大写字符串'AB',因此循环将永远不会结束。
这也是在前面,我们说 “如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象”:
x=['ab','cd']
for i in x[:]:x.append(i.upper())
print(x)
# ['ab', 'cd', 'AB', 'CD']
当然,还有以下两种方法可以实现:
# 方法一:使用另一个列表存储转换后的字符串
x = ['ab', 'cd']
result = []
for i in x:result.append(i.upper())
x.extend(result)
print(x) # ['ab', 'cd', 'AB', 'CD']# 方法二:使用列表推导式创建新的列表
x = ['ab', 'cd']
x = x + [i.upper() for i in x]
print(x) # ['ab', 'cd', 'AB', 'CD']
综合示例
下面是一个综合示例,展示了如何在 Python 中使用 if、while 和 for 语句来完成一些简单的任务。
# 定义一个整数列表
numbers = [1, 2, 3, 4, 5]# 使用 for 循环遍历列表
for number in numbers:if number % 2 == 0:print(f"{number} 是偶数")else:print(f"{number} 是奇数")# 使用 while 循环打印从 1 到 5 的数字
i = 1
while i <= 5:print(f"当前数字是 {i}")i += 1# 使用 if 语句检查一个条件
age = 20
if age >= 18:print("成年")
else:print("未成年")
其他控制流语句
除了 if、while 和 for 语句外,Python 还提供了一些其他的控制流语句,如 break、continue 和 pass。
break:用于立即退出循环。continue:用于跳过当前循环中的剩余代码,继续执行下一次迭代。pass:是一个占位符语句,用于在语法上需要一个语句的地方,但实际上不需要做任何事情。
示例代码
# 使用 break 退出循环
for i in range(10):if i == 5:breakprint(i)# 使用 continue 跳过特定的迭代
for i in range(10):if i % 2 == 0:continueprint(i)# 使用 pass 作为占位符
def dummy_function():pass
今天的分享就到这里了,如果,你感觉这篇博客对你有帮助的话,就点个赞吧!感谢感谢……
相关文章:
python基础语法--顺序结构
Python中的顺序结构主要包括流程控制语句,如 if、while 和 for 语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。 if 语句 if 语句用于根据某个条件来决定是否执…...
软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法
1. 文件基本信息 1.1 定义与作用 vcruntime140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,它包含了C运行时库,用于支持使用Visual C开发的Windows应用程序。这个动态链接库(DLL)文件提供了程序执行时所需的…...
(undone) 阅读 MapReduce 论文笔记
参考:https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要:简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结: 1.介绍背景:为什么我们需要分布式系统?MapReduce 的意义是哪些 2.简…...
sql注入工具升级:自动化时间盲注、布尔盲注
项目地址:https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级,此文章就是对升级内容的分析,升级内容如下: 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…...
字节C++抖音直播一面-面经总结
1、Python和C的区别,Python的程序执行过程是怎样的?C和C呢? 解释型-编译型 不用分号-用分号 自动垃圾回收-delete 相对较慢-执行速度快 丰富的库-标注模板库 .py-解释器-字节码-PVM-输出结果 c-c with class malloc-new 标准库-STL 不重载-函数重载和…...
浅谈stm32的GPIO引脚配置模式
STM32的GPIO(通用输入输出)引脚可以被配置为多种模式,以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式: 模拟输入模式(Analog Input Mode):在这种模式下,GPIO引脚被…...
Meta Orion 原型的生产成本约为 10,000 美元
Orion Meta 是一项突破性的增强现实项目,展示了其迄今为止最先进的原型。经过多年的研究和数百万美元的开发,Meta 打造出了一款仅重 98 克的增强现实眼镜,能够将全息图投射到视线范围内的任何地方。这款眼镜由一个先进的输入系统驱动…...
MATLAB GUI设计原则与实践
MATLAB的图形用户界面(GUI)设计是一种强大的工具,用于创建交互式应用程序。良好的GUI设计不仅能够提升用户体验,还能提高应用程序的可用性和效率。本文将探讨MATLAB GUI设计的原则,并提供一些实用的代码示例。 1. GUI…...
电脑桌面显示不完整
UOS统信由于误操作,导致桌面放大了,桌面显示不完整,本文主要介绍如何恢复到正常的桌面。 文章目录 一、问题描述二、解决方案 一、问题描述 电脑使用过程中出现显示器只能显示部分画面,桌面图标异常变大,桌面随鼠标移…...
Spring Boot与观察者模式实现数据同步更新机制
在Spring Boot应用程序中实现观察者模式来同步更新数据是一种强大的设计方式,它可以帮助你构建响应式和松耦合的应用程序。观察者模式通常用于当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的基本概念 •Subject(被观察者):维护了一个…...
毕业设计选题:基于ssm+vue+uniapp的校园订餐小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
每日OJ题_牛客_HJ108求最小公倍数_C++_Java
目录 牛客_HJ108求最小公倍数_C_Java 题目解析 C代码 Java代码 牛客_HJ108求最小公倍数_C_Java 求最小公倍数_牛客题霸_牛客网 题目解析 A 和 B 的最小公倍数 A * B / 两者的最大公约数。最大公约数:辗转相除法。 C代码 #include <iostream> #includ…...
【项目总结】工程构建思路分析与分享
背景 写这篇文章的初衷是因为国产化项目临近结束,在做项目总结时,回想起了代码管理的相关问题。虽然工程搭建及管理是一个高级工程师必备的能力,但似乎每次一个新项目立项,都是从老的项目中拷贝工程框架,再进行定制修…...
3、AI测试辅助-测试计划编写(自动生成任务甘特图)
AI测试辅助-测试计划编写 一、创建测试计划1.1 使用ChatGpt生成测试计划1.1.1 测试计划细化-测试任务排期1.1.2 测试计划细化-利用plantuml输出甘特图(不推荐)1.1.3 测试计划细化-利用mermaid 生成甘特图(推荐) 一、创建测试计划 …...
MySQL:进阶巩固-触发器
目录 一、基本概述二、语法结构三、基本使用3.1 新增的触发器3.2 修改的触发器3.3 删除的触发器 一、基本概述 触发器是与表有关的数据对象,在INSERT/UPDATE/DELETE之前或者是之后,触发并执行触发器中定义的SQL语句的集合,触发器的这种特性可…...
python获取百度地图路径规划
自制语音助手想做一个查询交通路线的功能,于是就想到了百度地图。在百度地图的服务器端应用中,提供了“轻量级路线规划”API接口,正好可以满足需求。要用这个接口,需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…...
Spring Boot 进阶- Spring Boot 自定义拦截器详解
上篇文章中我们创建了一个RestFul风格的接口,并且介绍了如何对其结果进行格式化的方式。这篇文章我们来讲在SpringMVC中常用到的另一个概念拦截器。 什么是拦截器? 在Spring MVC中拦截器有点类似于在Servlet中的过滤器的概念,主要是用来拦截用户求,并且对用户请求进行相应…...
ACM第三次考核题解
ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题!!!输出2迷之难度F神说要有光,于是有了手电筒贪心3简单BThis is a real English problem!思维 英语4简单C玩具简单排序5简单I“近义词…...
基于Vue3内置的lodash函数库实现防抖节流
前言 防抖节流是可以说是一种优化组件性能的技巧,可以有效减少组件中的渲染次数和计算量,从而提高组件的响应速度和用户体验。在Vue3中可以使用lodash库中的debounce和throttle函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数࿰…...
ls -a有什么作用
ls -a 是一个在类Unix操作系统(如Linux、macOS)中使用的命令,用于列出目录中的所有文件和目录,包括那些以.开头的隐藏文件。 具体作用如下: ls: 这是一个列出目录内容的命令。 -a: 这是一个选项,表示"…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
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日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...
