Python语法基础(条件语句 循环语句 函数 切片及索引)
目录
- 条件语句
- 关键字
- 与C++对照
- 注意
- 循环语句
- while 循环语句
- while else 循环语句
- for 循环语句
- range() 函数
- for else 循环语句
- 循环控制语句
- 练习:打印乘法表
- 函数
- 函数定义及调用
- 函数值传递和引用传递
- 多返回值
- 参数类型
- 位置参数
- 默认参数
- 关键字参数
- 可变数量的参数
- 可变数量的位置参数
- 可变数量的关键字参数
- lambda函数
- 练习:实现斐波那契数列序列函数
- 切片及索引
- 下标索引
- 切片提取子序列
- 使用步长提取间隔子序列
- 切片对可变序列的影响
- 易错点
条件语句
关键字
- True False
- not and or
- None
- if else elif
与C++对照
| Python | C++ |
|---|---|
| True | true |
| False | false |
| not | ! (逻辑非) |
| and | && (逻辑与) |
| or | || (逻辑或) |
| None | nullptr (空指针) |
| if | if |
| else | else |
| elif | else if |
height = int(input())
vip_level = int(input())if height < 120:print("身高下雨120CM,可以免费游玩。")
elif vip_level > 3:print("你的VIP等级大于3,可以免费游玩。")
else:print("抱歉,所有条件均不满足,需要支付10元。")
注意
Python if 语句中的条件判断默认就包含了逻辑与的语义,所以不需要显式地使用 and 关键字进行与操作。
grade = int(input('输⼊⼩明考试语⽂分:'))
if 90 <= grade <= 100:print('A')
elif 75 <= grade < 90:print('B')
elif 60 <= grade < 75:print('C')
else:print('D')
循环语句
注意:Python中没有 ++ 和 --
while 循环语句
count = 0
while count < 9:print(f"The count is:> {count}")count += 1
print("Good Bye!\n")
while else 循环语句
while … else 在循环条件为 false 时执行 else 语句块
注意:else块属于与之最近的for或while循环,而不是if条件。在你的代码中,else块确实属于while循环,因此它可以访问在循环中定义的变量。
count = 0
while count < 9:print(f"The count is:> {count}")s = 999count += 1
else:print("Good Bye! %d" % s) # 可以访问在循环中定义的变量
for 循环语句
- for、in、range结合,遍历整数序列
- for、in、list、dict结合,遍历容器内的元素
range() 函数
- 当 range() 函数的参数只有一个时,range() 函数生产出的数字是从 0 开始,并且右侧的区间是不包含在内的。
# 求1-100的和
sum_num = 0
for i in range(101):sum_num += i
print(sum_num)
- 当 range() 函数的参数有多个时,以第一个参数作为起点开始遍历到第二个参数,但
不包含第二个参数。换句话说, range() 函数是一个左闭右开的取值区间。
# 输出100-999的所有水仙花数
for i in range(100, 1000):tmp, sum_num = i, 0while tmp:sum_num += (tmp % 10) ** 3tmp //= 10if sum_num == i:print(i, end=' ')
- range() 的第三个参数是控制遍历间隔的参数,通过这个参数可以使生产的数字不仅为有序连续数列,还可以生成规定间隔的连续数列。
# 输出1-100的所有奇数
for i in range(1, 101, 2):print(i, end=' ')
for else 循环语句
等同于while else
for i in range(1, 100, 2):print(i, end=' ')
else:print("\n输出完毕!")
循环控制语句
-
break语句
break退出for循环或while循环。 -
continue语句
跳过continue下的语句,继续执⾏下⼀次循环。 -
pass语句
Python pass 是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。(代码块为空,用pass占位。)
for letter in 'Python':if letter == 'h':pass print('这是 pass 块')print('当前字母 :', letter)
print("Good bye!")
练习:打印乘法表
乘法表
for i in range(1, 10):for j in range(1, i + 1):print("%d * %d = %d" % (j, i, i * j), end=' ')print()
函数
函数定义及调用
def 函数名(参数列表)://实现特定功能的多行代码[return [返回值]]
如果想定义一个没有任何功能的空函数,可以使用 pass 语句作为占位符。
[返回值] = 函数名([形参值])
示例:
def is_prime(num):if num <= 1:return Falsei = 2while i <= num // i:if not (num % i):return Falsei += 1return Truefor i in range(1, 101):if is_prime(i):print(i, end=' ')
函数值传递和引用传递
Python 中,根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递:
- 值传递:适用于实参类型为不可变类型(字符串、数字、元组)
- 引用(地址)传递:适用于实参类型为可变类型(列表、字典、类)
多返回值
在Python中,函数可以返回多个值)。实际上,函数返回的多个值是以元组(tuple)的形式进行返回的,可以通过逗号分隔的方式返回多个表达式或变量。
def get_name_and_age():name = "John"age = 30country = "USA"return name, age, countryname, _, country = get_name_and_age()
print(name) # 输出: John
print(country) # 输出: USA
在上面的示例中,我们只对名字和国家变量感兴趣,而不关心年龄。通过使用下划线 _,我们可以将不需要的返回值忽略掉。
参数类型
在Python中,函数的参数可以有多种类型。
位置参数
这是最常见的参数类型,函数通过位置来匹配参数的值。示例:
def add(a, b):return a + bresult = add(3, 5) # 位置参数 3 和 5 分别传递给 a 和 b
print(result) # 输出: 8
默认参数
与C++的缺省参数相似
默认参数允许在函数定义时为参数提供默认值。如果在函数调用时没有传递对应的参数值,将使用默认值。
def greet(name, message="Hello"):print(message, name)greet("Alice") # 使用默认参数值 "Hello"
greet("Bob", "Hi") # 使用指定的参数值 "Hi"
注意:默认参数必须跟在非默认参数的后面。
关键字参数
使用关键字参数,可以通过参数名指定传递的参数值,而不必按照定义的顺序传递参数。
def greet(name, message):print(f"{message}, {name}!")greet(message="Hello", name="John")
可变数量的参数
有时候函数需要接受可变数量的参数,Python提供了两种方式来实现这个功能。
可变数量的位置参数
在函数定义时,在参数名前加上星号(*),表示该参数可以接受任意数量的位置参数,这些参数将作为一个元组传递给函数。
def add(*numbers):result = 0for num in numbers:result += numreturn resulttotal = add(1, 2, 3, 4) # 传递任意数量的位置参数
print(total) # 输出: 10
可变数量的关键字参数
在函数定义时,在参数名前加上两个星号(**),表示该参数可以接受任意数量的关键字参数,这些参数将作为一个字典传递给函数。
def print_info(**kwargs):for key, value in kwargs.items():print(key, ":", value)print_info(name="Alice", age=25) # 传递任意数量的关键字参数
# 输出:
# name : Alice
# age : 25
lambda函数
lambda arguments: expression
- arguments是函数的参数列表
- expression是函数体的表达式
Python 的 lambda函数的特点如下:
匿名性:lambda函数没有函数名,因此被称为匿名函数。它通常用于需要一个简短的函数定义的场景,不需要为函数命名。
简洁性:lambda函数以一种非常简洁的方式定义函数,将函数体限制在一个表达式中。
函数对象:lambda函数本质上是一个函数对象,可以像普通函数一样调用和使用。
Lambda函数通常用于需要一个简单函数的地方,而不必为这个函数专门定义一个完整的函数。例如,在map、filter、sorted等函数中,可以使用lambda表达式来定义临时的小函数。
示例:
my_lambda = lambda x, y: (x + y, x - y) if x > y else (x - y, x + y)
result = my_lambda(5, 3)
print(result) # 输出 (8, 2)
练习:实现斐波那契数列序列函数
def fibo(n):fibo_list = []if n >= 1:fibo_list.append(1)if n >= 2:fibo_list.append(1)for i in range(2, n):fibo_list.append(fibo_list[i - 1] + fibo_list[i - 2])return fibo_listn = int(input())
ans = fibo(n)
print(ans)
切片及索引
在Python中,切片(slicing)是一种用于访问序列对象(如字符串、列表、元组等)的子序列的方法。切片操作使用索引来指定要提取的子序列的起始位置、结束位置和步长。
sequence[start:stop:step]
下标索引
从前向后,下标从0开始。
从后向前,下标从-1开始。
name = "Hello World"
print(name[0]) # 输出H
print(name[-1]) # 输出d
切片提取子序列
sequence = "Hello, World!"# 提取从索引2到索引5(不包含)的子序列
slice1 = sequence[2:5]
print(slice1) # 输出: llo# 提取从索引0到索引6(不包含)的子序列
slice2 = sequence[:6]
print(slice2) # 输出: Hello,# 提取从索引7到末尾的子序列
slice3 = sequence[7:]
print(slice3) # 输出: World!# 提取整个序列的副本
slice4 = sequence[:]
print(slice4) # 输出: Hello, World!
使用步长提取间隔子序列
sequence = "Hello, World!"# 提取从索引1到索引末尾的字符,步长为2(每隔一个字符取一个)
slice5 = sequence[1::2]
print(slice5) # 输出: el,Wr!# 提取整个序列的逆序
slice6 = sequence[::-1]
print(slice6) # 输出: !dlroW ,olleH
切片对可变序列的影响
切片操作返回一个新的序列对象,对原始序列没有直接影响。但是,如果切片用于可变序列(如列表),则可以通过切片修改原始序列的值。
numbers = [1, 2, 3, 4, 5]# 修改切片的值
numbers[1:4] = [10, 20, 30]
print(numbers) # 输出: [1, 10, 20, 30, 5]
易错点
步长为负时候,start 与 end 也要满足步长负方向的性质,start 取闭,end 取开依旧满足此性质。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = a[7:2:-1]
print(s)
相关文章:
Python语法基础(条件语句 循环语句 函数 切片及索引)
目录 条件语句关键字与C对照注意 循环语句while 循环语句while else 循环语句for 循环语句range() 函数 for else 循环语句循环控制语句练习:打印乘法表 函数函数定义及调用函数值传递和引用传递多返回值参数类型位置参数默认参数关键字参数可变数量的参数可变数量的…...
Debian 9 Stretch APT问题
Debian 9 Stretch APT问题 flyfish 操作系统 Debian 9 Stretch 错误提示 使用sudo apt update错误提示 Ign:1 http://mirrors.aliyun.com/debian stretch InRelease Ign:2 http://mirrors.aliyun.com/debian-security stretch/updates InRelease Ign:3 http://mirrors.al…...
遍历List集合和Map进行修改和删除报java.util.ConcurrentModificationException错误详解
一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…...
Android从一个APP跳转到另外一个APP
1、从当前APP去全新启动另外一个目标APP(非覆盖同一个进程): 启动另外一个目标APP(非覆盖原来APP的方式) 1、当前APP加入获取权限声明:(不加人权限检查,没法启动目标app࿰…...
我的创作纪念日——创作者2年
机缘 我最初使用CSDN估计是在2014年左右,当时还在读研,除了在当时比较有名的BBS例如小木虫上进行学术交流外,我发现很多问题百度后,都会转到CSDN,而且文章内容颇为专业,很多问题也都有专业的回答ÿ…...
大数据之LibrA数据库系统告警处理(ALM-12032 ommdba用户或密码即将过期)
告警解释 系统每天零点开始,每8小时检测当前系统中ommdba用户和密码是否过期,如果用户或密码即将在15天内过期,则发送告警。 当系统中ommdba用户过期的期限修改或密码重置,告警恢复。 告警属性 告警ID 告警级别 可自动清除 …...
C_3练习题
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.下列叙述中正确的是()。 A.用C程序实现的算法必须要有输入和输出操作 B.用C程序实现的…...
CentOS7 安装Jenkins 2.414.3 详细教程
目录 1、前提条件硬件软件-java11安装 2、安装jenkins3、启动jenkins配置用户和用户组配置JAVA_HOME 4、配置Jenkins一直处于启动状态5、测试Jenkins是否可以访问以及配置6、访问Jenkins系统 1、前提条件 硬件 内存 4G ; 硬盘 20G 软件-java11安装 上传文件jdk-11.0.21_lin…...
chatglm3-6b记录问答对
# 打开文件,第二个参数是打开文件的模式,a代表追加,也就是说,打开这个文件之后直接定位到文件的末尾 file open(chatlog.txt, "a") # 写入数据 file.write(ask:prompt_text\n) file.write(response:response\n) # 关闭文件 fil…...
k8s ingress 代理 mysql 3306端口
helm 安装 ingress-nginx helm upgrade --install ingress-nginx ingress-nginx \--repo https://kubernetes.github.io/ingress-nginx \--namespace ingress-nginx --create-namespace执行命令 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-ngin…...
Informix管理共享内存
1、查看共享内存使用情况 [informixREHL4 ~]$ onstat -g seg IBM Informix Dynamic Server Version 11.50.UC4 -- On-Line -- Up 00:38:21 -- 144144 Kbytes Segment Summary: id key addr size ovhd class blkused blkfree 393226 …...
Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?
说说webpack中常见的Plugin?解决了什么问题?- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…...
CSRF(跨站请求伪造)攻击演示
目录 CSRF(跨站请求伪造)攻击演示CSRF 是什么CSRF 演示项目代码CSRF 演示过程服务启动演示 CSRF(跨站请求伪造)攻击演示 CSRF 是什么 CSRF(Cross-Site Request Forgery)跨站请求伪造,是一种网络安全攻击,其目标是利用被攻击者在…...
图解三傻排序 选择排序、冒泡排序、插入排序
(1)选择排序 // 交换 void swap(int arr[], int i, int j) {int tmp arr[i];arr[i] arr[j];arr[j] tmp; }// 选择排序 void selectionSort(int arr[],int len) {if (len < 2) return;for (int minIndex, i 0; i < len - 1; i) {minIndex i;f…...
【数据结构】树与二叉树(六):二叉树的链式存储
文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语5.1.4 树的表示 5.2 二叉树5.2.1 二叉树1. 定义2. 特点3. 性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉…...
后端Java日常实习生面试(2023年11月10日)
面试岗位为:Java 后端开发实习生 面试时长:30分钟 面试时间:2023年11月10日 首先介绍一下项目吧 这里介绍时有一个失误,没有主动把屏幕共享给打开,因为我在面试之前已经在 processon 上画好了项目的流程图…...
使用iperf3在macOS上进行网络性能测试
iperf3是一个用于测量网络性能的工具,它可以帮助你了解两台服务器之间的带宽和延迟。本博客将指导你在macOS上安装iperf3,并展示如何连接服务器进行网络性能测试。 步骤1:安装Homebrew 如果你尚未安装Homebrew,可以通过以下步骤…...
09-MySQL主从复制
01-主从复制原理 MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志(Binary Log)来将主数据库上的更改操作同步到一个或多个从数据库。 MySQL主从复制的基本原理如下: 主服务器(Master࿰…...
virtualBox虚拟机局域网访问配置
在VirtualBox中,桥接网络是一种网络连接类型,它允许虚拟机连接到物理网络上的路由器或交换机,在物理网络上获得独立的网络地址和访问权限。 一、设置VirtualBox桥接网络的步骤: 打开VirtualBox软件,并选择你想要配置…...
IDEA高效编程快捷键
IDEA高效编程快捷键 for循环快捷键 快速生成for循环 foriTABfor (int i 0; i < ; i) {}在for循环中使用索引 iterTABfor (String s : list) {}在for循环中进行if条件判断 ifnTABif (list null) {} soutTAB快捷键 System.out.println();psfEnter快捷键 p…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...
Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
