Python语法基础(条件语句 循环语句 函数 切片及索引)

目录

  • 条件语句
    • 关键字
    • 与C++对照
    • 注意
  • 循环语句
    • while 循环语句
    • while else 循环语句
    • for 循环语句
      • range() 函数
    • for else 循环语句
    • 循环控制语句
    • 练习:打印乘法表
  • 函数
    • 函数定义及调用
    • 函数值传递和引用传递
    • 多返回值
    • 参数类型
      • 位置参数
      • 默认参数
      • 关键字参数
      • 可变数量的参数
        • 可变数量的位置参数
        • 可变数量的关键字参数
    • lambda函数
    • 练习:实现斐波那契数列序列函数
  • 切片及索引
    • 下标索引
    • 切片提取子序列
    • 使用步长提取间隔子序列
    • 切片对可变序列的影响
    • 易错点


条件语句

关键字

  • True False
  • not and or
  • None
  • if else elif

与C++对照

PythonC++
Truetrue
Falsefalse
not! (逻辑非)
and&& (逻辑与)
or|| (逻辑或)
Nonenullptr (空指针)
ifif
elseelse
elifelse 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]

易错点

步长为负时候,startend 也要满足步长负方向的性质,start 取闭,end 取开依旧满足此性质。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = a[7:2:-1]
print(s)

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

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

相关文章

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来&#xff0c;根据特定字符拆分成多行。 &#xff08;注意这里我的数据是每个值都有“ ; ”&#xff0c;即使后面没有值&#xff0c;后面也会有个“ ; ”&#xff0c; 如果是正常的分隔符&#xff0c;sql 需要改成” LEVEL…

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数 一、配置 TLMM GPIO15 中断示例代码二、配置 PMIC2 GPIO1 中断示例代码三、easy_irq 实现源码分析3.1 struct _easy_irq_ctx 结构体内容分析3.2 register_easy_irq_callbac…

github遇到想要强制拉取远程仓库内容

进行项目的时候&#xff0c;遇到了我的远程仓库 Sync fork 更新以后&#xff0c;这时候我的本地就和远程不同步&#xff0c;如果使用 git pull 的时候&#xff0c;如果出现 conficts 过多的情况怎么办&#xff0c;如果我们想要直接把远程仓库拉下来应该怎么办&#xff1f; git…

flink1.18.0 macos sql-client.sh启动报错

报错 Could not read from command line. Exception in thread "main" org.apache.flink.table.client.SqlClientException: Could not read from command line.at org.apache.flink.table.client.cli.CliClient.getAndExecuteStatements(CliClient.java:221)at or…

爆肝一文,走进大名鼎鼎的HTTP协议(通俗白话+三万字超详细+抓包工具使用)

文章目录 前言1. HTTP 是什么1.1 HTTP 完整请求流程1.2 理解 HTTP 协议的工作过程 2. HTTP 协议格式2.1 抓包工具的使用2.2 抓包工具的原理2.3 抓包结果2.4 协议格式总结 3. HTTP 请求(Request)3.1 认识 URL(Uniform Resource Locator)URL 基本格式关于 URL encode 3.2 认识请求…

风险风控-逻辑回归理论基础

逻辑回归一般都应用于传统的建模方案,因其模型含义易解释,容易推广上线而得到大家的青睐 逻辑回归于广义线性模型: 逻辑回归是广义线性模型(Generalized Linear Models,GLM)的一种特殊形式。广义线性模型是线性回归模型的推广,它不强行改变数据的自然度量,允许数据具…

Spring Cloud 微服务入门篇

文章目录 什么是微服务架构 Microservice微服务的发展历史微服务的定义微小的服务微服务 微服务的发展历史1. 微服务架构的发展历史2. 微服务架构的先驱 微服务架构 Microservice 的优缺点1. 微服务 e Microservice 优点2. 微服务 Microservice 缺点微服务不是银弹&#xff1a;…

【hcie-cloud】【5】华为云Stack规划设计之华为云Stack标准化配置、缩略语【下】

文章目录 前言、华为云Stack交付综述为云Stack标准组网华为云Stack标准化配置华为云Stack配置概览华为云Stack云服务全视图华为云Stack部署方案节点类型说明华为云Stack云服务组件部署场景管理节点部署原则云平台管理规格华为云Stack IaaS场景&高阶场景起步必选部署组件x86…

【Qt之元对象系统】

描述 Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心机制之一&#xff0c;它提供了运行时类型信息&#xff08;RTTI&#xff09;和信号与槽&#xff08;Signals and Slots&#xff09;机制的支持。元对象系统在Qt中扮演了很重要的角色&#xff0c;它…

已解决:Rust Error: the trait bound is not satisfied 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

Android 进阶——Binder IPC之学习Binder IPC架构及原理概述(十二)

文章大纲 引言一、Binder IPC 基础架构1、Binder IPC核心角色2、Binder IPC的数据流 二、Binder IPC 协议通信流程三、Binder IPC 核心角色详解1、Server 进程及Server 组件2、Client进程及Client组件3、Service Manager 与实名 Binder4、Binder 驱动 四、Binder 通信过程五、开…

mybatis嵌套查询子集合只有一条数据

我们再用mybatis做嵌套查询时&#xff0c;有时会遇到子集合只有1条数据的情况&#xff0c;例如下这样&#xff1a; 数据库查询结果 xml <resultMap id"userMap" type"com.springboot.demo.test.entity.User"><id column"uid" property…

Leetcode150. 逆波兰表达式求值

Every day a Leetcode 题目来源&#xff1a;150. 逆波兰表达式求值 解法1&#xff1a;栈 用栈模拟逆波兰表示法表示的算术表达式的计算过程。 初始化一个栈 stk。 遍历字符串数组 tokens&#xff0c;根据当前字符串 token 决定操作&#xff1a; 若 token 是 1 个算符&am…

基于JavaWeb+SSM+Vue微信小程序校园兼职任务平台系统的设计和实现

基于JavaWebSSMVue微信小程序校园兼职任务平台系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 随着社会的发展和全球疫情的冲击&#xff0c;大学生的就业形势越来越严峻。越…

基于FPGA的模板匹配红外目标跟踪算法设计

为什么要写这篇文章 我写这篇文章的原因是一天在B站看到了一个大神发的视频是关于跟踪一个无人机的&#xff0c;看到作者跟网友的回复说是用的图像匹配算法&#xff0c;我就在网上搜索相关资料&#xff0c;最终找到一篇文献。文献中对该算法的评价很高&#xff0c;满足制导系统…

【第2章 Node.js基础】2.3 Node.js事件机制

2.3 Node.js事件机制 学习目标 &#xff08;1&#xff09;理解Node.js的事件机制&#xff1b; &#xff08;2&#xff09;掌握事件的监听与触发的用法。 文章目录 2.3 Node.js事件机制什么是事件机制为什么要有事件机制事件循环事件的监听与触发EventEmitter类常用API 什么是…

利用IP风险画像强化金融行业网络安全防御

在数字化时代&#xff0c;金融行业日益依赖互联网和技术创新&#xff0c;但这也使得金融机构成为网络攻击的主要目标。为了应对日益复杂的网络威胁&#xff0c;金融机构迫切需要采用先进的安全技术和工具。其中&#xff0c;IP风险画像技术成为提升网络安全的一项重要策略。 1.…

C语言C位出道心法(五):内存管理

C语言C位出道心法(一):基础语法 C语言C位出道心法(二):结构体|结构体指针|链表 C语言C位出道心法(三):共用体|枚举 C语言C位出道心法(四):文件操作 C语言C位出道心法(五):内存管理 一:C语言内存管理认知 二:C语言中内存堆|栈认知 三:C语言中引用内存丢失认知

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区&#xff08;可选&#xff09;4.3.2. primary key 主…

项目管理之如何出道(下)

前言 是谁用烛火照亮整个中国&#xff1f;是一伙伙行走在高压线上的电力工人&#xff1b; 是谁用水枪保护千家万户&#xff1f;是一组组穿梭于大街小巷的消防队伍&#xff1b; 是谁用身体捍卫国防边境&#xff1f;是一队队跋涉在高山深林的可爱战士。 那么作为IT业界的我们&…