Python(一)

第一章 Python的介绍

1. Python是什么

​ Python是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。它的语言结构以及面向对象的方法,旨在帮助程序员为小型的和大型的项目编写逻辑清晰的代码。

​ Python的设计哲学强调代码的可读性和简洁的语法,尤其是使用空格缩进来划分代码块。相比于C语言或者Java,Python可以让开发者用更少的代码表达想法。Python解释器本身几乎可以在所有的操作系统中运行,Python是世界上最受欢迎的编程语言之一。

2. Python优点

  • 易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

  • 广泛的标准库:Python最大的优势之一就是有着丰富的库。Python拥有一个强大的标准库,Python语言的核心只包含一些常见类型和函数,而Python标准库提供了系统管理、网络通信、文本处理、文件系统等额外的功能。

  • 大量的第三方模块:Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖Web开发数据分析人工智能自动化等多个领域。

3. Python的缺点

  • 运行速度慢:和C程序相比非常慢,因为Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时

4. Python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。事实上,存在多种Python解释器,但使用最广泛的还是CPython。

当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

5.Python代码规范

1. 缩进

在 Python 中,代码块的结束不像其他一些编程语言(如 C、Java 等)使用大括号 {} 来明确界定,而是通过缩进来表示。建议每级缩进都使用四个空格,这既可提高可读性,又留下了足够的多级缩进空间。

python 复制代码
#正确使用:✅
def specification():
    x=10
    if x > 0:
        print("Positive")  
        print("This is inside the if block")
    print("This is outside the if block")  # 回到外层
    
# 错误使用 ❌   
def specification():
    x=10
    if x > 0:
     print("This is inside the if block")
     print("This is outside the if block")  
2. 分号

不要在行尾加分号.

python 复制代码
#正确使用:✅
str1="abc" 
# 错误使用 ❌   
str2="bcd";
3. 不以空格结束一行代码

在任何地方都不要以空格结束本行代码, 因为行末的空格不可见, 这可能会出问题。

python 复制代码
# 错误写法1:行末有空格(不可见)
message = "Hello, " \ 
          "World!"  # 这里 `\` 后面有一个空格(看不见但存在)

print(message)  # 报错:SyntaxError: unexpected character after line continuation character

# 错误写法2:行末有空格
str1 = "Hello, "    # 行末有空格
str2 = "World!"     # 行末有空格
combined = str1 + str2

print(combined)  # 输出 "Hello, World!"(但 str1 和 str2 实际包含多余空格)
4. 注释
4.1 单行注释

Python中 # 后的一行内的内容会被视为注释,为了保持注释的整洁,Python官方建议在#和注释的内容之间加一个空格。

python 复制代码
# print("hello world")
print("hello world")  # 打印hello world
4.2 多行注释(块注释)

Python中使用三个引号开始,三个引号结束(单引号或者双引号都可以),为多行注释

多行注释在说明文字需要换行时使用,不能嵌套

python 复制代码
#正确使用:✅
'''
这也是多行注释,
使用双引号效果相同。
但 Python 官方推荐用双引号写 docstring。
'''

"""
这也是多行注释,
使用双引号效果相同。
但 Python 官方推荐用双引号写 docstring。
"""

print("Hello, World!")  # 这行代码仍然会执行

# 错误使用 ❌ 
'''
外层注释
''' 内层注释 '''
''' 
# 函数/类的文档字符串(docstring)
def calculate_sum(a, b):
    """
    计算两个数的和(这是 docstring,属于函数的一部分)
    参数:
        a (int): 第一个数
        b (int): 第二个数
    返回:
        int: 两数之和
    """
    return a + b


# 查看函数的 docstring
print(calculate_sum.__doc__)

第二章 Python环境安装

1.1 Anaconda3的安装

Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。其中,conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖 ,并能够在不同的环境之间切换

Anaconda对于新手十分友好,通过安装Anaconda可以省去很多安装Python主程序的麻烦。

https://www.anaconda.com/download

shell 复制代码
brew install --cask anaconda
编辑环境变量

Homebrew 默认会把 Anaconda 安装在 /usr/local/anaconda3(Intel Mac)或 /opt/homebrew/anaconda3(M系列 Mac)下。需要将它加入 PATH:

shell 复制代码
echo 'export PATH="/opt/homebrew/anaconda3/bin:$PATH"' >> ~/.zshrc

source ~/.zshrc

# 验证安装
conda --version

若输出版本号,如 conda 25.11.0,则说明安装成功。

创建与管理虚拟环境
shell 复制代码
# 创建一个新的虚拟环境 比如创建名为 XXX 的环境并使用 Python 3.10:
conda create -n YOUR_ENV_NAME python=3.10
conda create -n pyliming python=3.10
激活创建好的环境
shell 复制代码
conda activate YOUR_ENV_NAME
conda activate pyliming

# 退出环境
conda deactivate

# 查看所有环境
conda env list

# 删除环境
conda remove -n mlenv --all

1.2 Pycharm的安装

​ Pycharm可以从官方下载专业版,然后通过任意方式去激活。安装成功后,要去配置Python运行环境。

​ File -> Setting -> Pythoin YOUR_PROJECT


第三章 Python的基本语法

1.变量

1.1 变量的定义

​ 变量是在程序运行时,能储存计算结果或能表示值的抽象概念。

1.2 变量的定义格式

在Python中,定义变量的基本格式是:

python 复制代码
变量名称 = 变量的值

其中:

  • 变量值
    指的是赋值语句中等号右侧 的内容,代表实际存储的数据,比如一个数字、字符串、列表等。每个变量内部都会有一个存储的内容,称为变量值
  • 赋值
    等号(=)表示赋值操作 ,它的作用是把右边的值赋给左边的变量。即:先计算等号右边的值,再把这个值绑定到左边的变量名上。
  • 变量名
    指的是等号左侧的名称,是对存储数据的一种标识符。变量名代表变量本身,可以通过这个名字来访问对应的变量值。
1.3 变量的创建

变量创建方式:变量名 = 变量值

Python 变量无需预先指定类型或显式声明存在,直接赋值即可自动创建并使用。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

python 复制代码
# 简单变量的创建:
var1 = 2  # 定义一个变量,变量名为var1,变量值为2

var2 = 3  # 定义一个变量,变量名为var2,变量值为3

result = var1 + var2  # 定义一个变量,变量名为result,变量值为var1和var2相加的结果
print(result)  # 打印result变量的值

name = "张三"
age = 18
weight = 1000.3

# 多个变量的创建
var1 = var2 = var3 = 10  # 多个变量的值相同
var4, var5, var6 = 10, 20, 30  # 多个变量的值不同

变量的特点:

  • 动态类型

    变量的类型由赋值的值决定,且可随时改变

    python 复制代码
    a = 10      # a 是整数
    a = "hello" # a 变成字符串
  • 赋值即创建

    未赋值的变量不存在 ,直接使用会报 NameError

    python 复制代码
    print(x)  # 报错:NameError: name 'x' is not defined
  • 变量是对象的引用

    Python 变量本质是对象的引用(指针),而非存储数据的容器:

    python 复制代码
    a = [1, 2, 3]
    b = a       # b 和 a 引用同一个列表
    b.append(4)
    print(a)    # 输出 [1, 2, 3, 4]
1.4 变量的修改

在程序中可随时修改变量的值,而Python将始终记录变量的最新值。

python 复制代码
message = "hello world"
print(message)

message = "hello world hello world"
print(message)
1.5 常量

在程序中定义后就不再修改的值为常量,Python中没有内置的常量类型。一般约定使用全大写变量名来表示常量

python 复制代码
PI = 3.1415926
E = 2.718282

2. 数据类型

2.1 数据类型的概念

在Python中,每一份数据都有一个确定的数据类型(Data Type)。

数据类型决定了:

  • 数据的表现形式(书写、存储)
  • 数据可以执行哪些操作
  • 程序在运行时如何处理它

Python是一门动态类型语言,意味着变量在赋值时,不需要提前声明数据类型,解释器在运行时依然严格依赖类型规则,会根据赋的值自动推断出类型。

2.2 常见数据类型种类

Python3中常见的数据类型分类如下,主要类型有六种:

基本数据类型

数值

  • 整数(int)、浮点数(float)、复数(complex)、布尔(bool)

字符串(str)

容器数据类型

  • 列表(list)

    • 1,2,3

  • 元组(tuple)

    • (10,11,12)
  • 集合(set)

    • {1,3,5}
  • 字典(dist)

    • {"name":"zs","age":"12"}

特殊数据类型

  • None:表示空值或缺失值,只有一个值 None。常用于函数没有返回值时,或者表示变量没有被赋值。

​ 上图的int、float、complex、bool都属于Number(数值)数据类型。

3. 数值类型(number)

3.1 int整形

注意:Python可以处理任意大小的整数,包括负整数。

10-7(负整数)

python 复制代码
num1 = 10
num2 = -7

如 1_000_000_000_000_000 (很大的整数)

python 复制代码
num1 = 1_000_000_000_000_000
print(num1)  # 1000000000000000

注意

  • 书写很大的数时,可使用下划线将其中的数字分组,使其更清晰易读
  • 存储这种数时,Python会忽略其中的下划线
3.2 float浮点型

Python将所有带小数点的数称为浮点数

python 复制代码
num1 = 0.1
num2 = 0.2
print(num1+num2)
###结果###
0.30000000000000004

注意:在使用浮点数进行计算时可能会存在微小误差,可以通过导入decimal解决。

python 复制代码
from decimal import Decimal
num3 = Decimal('0.1') # '' 或 "" 都可以
num4 = Decimal('0.2') # '' 或 "" 都可以
print(num3+num4)
###结果###
0.3
3.3 bool类型

布尔型变量只有 True 和 False,用于真假的判断,注意True 不是true False 不是false

python 复制代码
bool1 = True
bool2 = False
print(bool1, bool2)  # True False
###结果###
True False

注意:Python3中,bool 是 int 的子类,True 和 False 可以和数字相加。

python 复制代码
print(issubclass(bool, int))
bool1 = True
bool2 = False
print(bool1+1)
print(bool2+1)
###结果###
True
2
1

同样,你可以用True==1 或者 False==0来检测。

python 复制代码
bool1 = True
bool2 = False
print(bool1==1)
print(bool2==0)
###结果###
True
True

注意 :is 运算符用于比较,但是它用于身份比较(即它们是否是同一个对象,是否在内存中占据相同的位置),

python 复制代码
print(True is 1) 
print(False is 0) 
###结果###
False
False

a = [1, 2, 3] # 列表
b = a  # b 和 a 引用同一个列表对象
print(a is b)  # True(同一对象)

c = [1, 2, 3]
print(a is c)  # False(值相同,但不同对象)
###结果###
True
False

小总结

操作符 比较内容 等效调用
== 值是否相等 a.eq(b)
is 是否同一对象 id(a) == id(b)

除此自外,多提一嘴,在Python中,能够解释为假的值不只有False,还有:

None

0

0.0

False

所有的空容器(空列表、空元组、空字典、空集合)以及空字符串)但是并不能说

None == False 或者None is False只能说布尔上下文中,它们都会被当作"假值"处理逻辑:

python 复制代码
if not None:
    print("None is falsy")  # 会执行

if not False:
    print("False is falsy") # 会执行

4.字符串类型 (str)

4.1 字符串概念

字符串就是一系列字符。在Python中,用引号括起的都是字符串, 可以使用单引号 '...' 或双引号 "..." 创建。也可使用反斜杠 \ 转义特殊字符。

python 复制代码
str1 = "Hello, Python!"
str2 = 'Hello, Python!'
print(str1)
print(str2)
###结果###
Hello, Python!
Hello, Python!

也可以方便的在字符串中包含单引号或双引号。

python 复制代码
str1 = "This is a 'string'"
str2 = 'This is a "string" too'
print(str1)  # This is a 'string'
print(str2)  # This is a "string" too

也可以使用三个引号表示多行字符串。三引号允许一个字符串跨多行.一个典型的用例是,当你需要一块HTML或者SQL时,使用三个引号就很简单

python 复制代码
str1 = """hello world
HELLO WORLD"""
print(str1)
###结果###
hello world
HELLO WORLD
4.2 字符串特点
  • 字符串是不可变的、有序的。
  • 字符串中元素不可修改
  • 字符串使用单引号、双引号或三重引号定义。
  • 字符串中每个值都有对应的位置值,称为索引或下标,索引从起始从0开始向后逐个递增,并且末尾从-1开始逐个向前递减。
4.3 字符串访问
python 复制代码
str1 = "hello world"
print(str1[0])
print(str1[-1])
print(str1[4:-3]) # 前闭(包含)后开(不包含)左闭右开
4.4 字符串相加
python 复制代码
str1 = "hello world\n"
str2 = "welcome to python"
print(str1 + str2)
### 结果###
hello world
welcome to python
4.5 字符串乘法
python 复制代码
str1 = "hello world"
print(str1 * 2)  # hello worldhello world
#或者
str2 = "hello world"*2
print(str2)
###结果###
hello worldhello world
hello worldhello world

注意:不能用字符串+2(整数)这种写法。

python 复制代码
str3 = "hello world"+2
print(str3)
### 结果###
TypeError: must be str, not int

字符串乘法 str \* n 的设计逻辑:

Python 的字符串类 (str) 定义了 __mul__ 方法,允许 * 操作符与整数交互。

字符串乘法 str \+ n 的设计逻辑:

Python 严格区分类型,字符串的 + 操作符(通过 __add__ 方法)仅支持与其他字符串拼接。整数与字符串拼接缺乏明确的语义(是转换成字符串再拼接,还是数学相加?),因此 Python 选择直接禁止,抛出异常。

4.6 字符串编解码

编码:将字符串数据类型转换为字节型数据的过程成为编码 encode,需要指定编码类型

解码: 将字节型数据转换为字符型数据的过程称为解码 decode

python 复制代码
# 原始字符串
str1 = '你好中国'
print(str1)
# 编码
byte1 = str1.encode(encoding='utf8')
print(byte1)
print(type(byte1))  # <class 'bytes'>

# 解码
str2 = byte1.decode(encoding='utf8')
print(str2)  # 你好中国
print(type(str2))  # <class 'str'>

###结果###
你好中国
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd' # 12个字节
<class 'bytes'>
你好中国
<class 'str'>
4.7 成员是否为字符串中元素
python 复制代码
str1 = "hello world"
print("lo" in str1)  # True
###结果###
True
4.8 字符串的常用函数操作

1.split()

python 复制代码
str= "welcome to the world of python"
print(str.split()) # 默认按任何空白字符串分隔并在结果中丢弃空字符串

str1= "川菜,粤菜,湘菜,鲁菜"
print(str1.split(",",2)) #按x分隔字符串 可指定最大分隔次数

###结果###
['welcome', 'to', 'the', 'world', 'of', 'python']
['川菜', '粤菜', '湘菜,鲁菜']

2.replace()

python 复制代码
str1= "川菜,粤菜,湘菜,鲁菜,粤菜,粤菜"
print(str1.replace("粤菜", "苏菜",2))

###结果###
川菜,苏菜,湘菜,鲁菜,苏菜,粤菜

3.join()

用法:str.join(iterable)

其中:

  • str 是连接符(可以是任意字符串)。
  • iterable 是需要连接的可迭代对象(如列表、字符串等)。
python 复制代码
result = "-".join("abc")  
print(result)
###结果###
a-b-c

foods = ["川菜", "粤菜", "湘菜"]
result1 = "、".join(foods)  # 用 "、" 连接列表元素
print(result1)
###结果###
川菜、粤菜、湘菜

str1 = "川菜,粤菜,湘菜,鲁菜,粤菜,粤菜"
split_list = str1.split(",")  # 按逗号分割成列表
result = "-".join(split_list)  # 用 "-" 连接列表元素
print(result)
###结果###
川菜-粤菜-湘菜-鲁菜-粤菜-粤菜

4.find()

python 复制代码
str= "welcome to the world of python"

print(str.find("world", 0, 20)) 
###结果###
15

5.index()

python 复制代码
str= "welcome to the world of python"
print(str.index("to"))
###结果###
8

6.find()与index()区别

python 复制代码
# 1.找到子串时
s = "hello world"
print(s.find("world"))    # 输出: 6
print(s.index("world"))   # 输出: 6

# 2.未找到子串时
# find() 返回 -1
print(s.find("Python"))  # 输出: -1
# index() 抛出异常:
print(s.index("Python"))  # 抛出 ValueError: substring not found

# 3.index() 的扩展用法
# index() 还可用于 列表(list) 和 元组(tuple),而 find() 仅限字符串:
# 列表中使用 index()
lst = [10, 20, 30]
print(lst.index(20))  # 输出: 1

# 元组中使用 index()
tup = (1, 2, 3)
print(tup.index(3))   # 输出: 2

find()和index()区别对比

方法 适用类型 找到子串时 未找到子串时 错误处理
find() 字符串(str 返回子串的起始索引(≥0) 返回 -1 不报错
index() 字符串、列表、元组 返回子串的起始索引(≥0) 抛出 ValueError 报错

其它函数:

函数 说明
str.replace(old,new,max) 把将字符串中的old替换成new,如果指定max,则替换不超过max次
str.split(x,n) 按x分隔字符串,默认按任何空白字符串分隔并在结果中丢弃空字符串。可指定最大分隔次数
str.rsplit(x,n) 与split()类似,从右边开始分隔
x.join(seq) 以x作为分隔符,将序列中所有的字符串合并为一个新的字符串
str.strip(x) 截掉字符串两边的空格或指定字符
str.lstrip(x) 截掉字符串左边的空格或指定字符
str.rstrip(x) 截掉字符串右边的空格或指定字符
str.removeprefix() 截掉字符串指定前缀
str.removesuffix() 截掉字符串指定后缀
str.upper() 将所有字符转为大写
str.lower() 将所有字符转为小写
str.swapcase() 反转字符串中字母大小写
str.capitalize() 将字符串第一个字母变为大写,其他字母变为小写
str.title() 将字符串每个单词首字母大写
str.casefold() 返回适合无大小写比较的字符串版本
len(str) 返回字符串长度
max(str) 返回字符串中最大值
min(str) 返回字符串中最小值
str.find(x,start,end) 返回字符串中第一个x的索引值,不存在则返回-1,可指定字符串开始结束范围
str.rfind(x,start,end) 与find()类似,从右边开始查找
str.index(x,start,end) 返回字符串中第一个x的索引值,不存在则报错,可指定字符串开始结束范围
str.rindex(x,start,end) 与index()类似,从右边开始查找
str.count(x,start,end) 返回字符串中x的个数,可指定字符串开始结束范围
str.startswith(x,start,end) 检查字符串是否以x开头,可指定字符串开始结束范围
str.endswith(x,start,end) 检查字符串是否以x结尾,可指定字符串开始结束范围
str.isspace() 检查字符串是否非空且只包含空白

5.输入与输出

5.1 输入

输入:如果接收用户在键盘上输入一些字符,Python提供了一个input()函数,可以让用户输入字符串,并存放到一个字符串变量里。

语法:字符串变量 = input("提示信息")

python 复制代码
# Python开始等待你的输入。这时,你可以输入任意字符,然后按回车后完成输入。
input_str = input("请输入:")
# 输入完成后,不会有任何提示,刚才输入的内容存放到input_str变量里了
print("input_str数据类型为:",type(input_str))
# 输出input_str查看变量内容
print(input_str)
5.2 输出
  • 普通输出

    python 复制代码
    # 使用 print() 可将内容打印。
    print("Hello Python")
    # 多个内容之间可以使用逗号隔开。
    int1=10
    float1=10.0
    print("int1=", int1)
    # 可以使用 end= 来控制 print() 以什么结尾
    print("使用\\n结尾", end="\n")  # 用\n结尾,默认就是 \n(换行)
    print('使用""结尾', end="")  # 用空字符串结尾
    
    ###输出结果###
    使用\n结尾
    使用""结尾Hello
  • 格式化输出

    (1)字符串中使用 % 占位

    python 复制代码
    int1 = 10
    float1 = 3.14159
    # %d:d 是 decimal(十进制整数)的缩写,用于将数据格式化为整数 %.3f 表示保留 3 位小数
    str1 = "int1 = %d, float1 = %.3f" % (int1, float1)
    print(str1)  # int1 = 10, float1 = 3.141590
    
    ###输出结果###
    int1 = 10, float1 = 3.142

    (2)字符串.format()

    1. 显示指定索引,可灵活调整输出顺序。

      python 复制代码
      # 1.重复引用同一变量
      name = "Alice"
      age = 25
      greeting = "Hi {0}! {0} is {1} years old.".format(name, age)
      print(greeting)
      # 输出: Hi Alice! Alice is 25 years old.
      
      # 2.调整参数顺序
      x, y = 10, 20
      result = "y = {1}, x = {0}".format(x, y)
      print(result)
    2. 隐式索引

      python 复制代码
      #  隐式索引,直接按顺序填充,避免索引干扰格式化符号(如 `:02d`)
      # 1.简单顺序拼接
      fruit = "apple"
      price = 1.5
      msg = "The {} costs ${:.2f}.".format(fruit, price)
      print(msg)
      # 输出: The apple costs $1.50.
      # 2.结合数字格式化
      hours, minutes = 3, 5
      time = "{:02d}:{:02d}".format(hours, minutes)
      print(time)
      # 输出: 03:05
    3. 设置参数

      python 复制代码
      int1 = 10
      float1 = 3.14159
      bool1 = True
      str2 = "int1 = {i1}, float1 = {f1}, bool1 = {b1}".format(i1=int1, f1=float1, b1=bool1)
      print(str2)  # int1 = 10, float1 = 3.14159, bool1 = True
       
      ###输出结果###
      # int1 = 10, float1 = 3.14159, bool1 = True
    4. f-string(字符串)

      现代 Python 代码中,f-string 是更简洁、高效的格式化方案:

      字符串前加上一个 f ,字符串中的{}内写入变量名

      python 复制代码
      # 直接在字符串中嵌入变量名,可读性极强。
      # 支持表达式和函数调用
      int1 = 10
      float1 = 3.14159
      str1 = f"int1 = {int1}, float1 = {float1}"
      str2 = f"int1 = {int1+1}"
      print(str1)  # int1 = 10, float1 = 3.14159
      print(str2) # 11
      ###输出结果###
      # int1 = 10, float1 = 3.14159
      # 11

第四章 Python运算符

1. 算数运算符

运算符 说明 实例
+ a + b
- 减、或取负 a - b、-a
* a * b
/ a / b
// 整除,除后向下取整 a // b
% 模,返回除法的余数 a % b
** a ** b
python 复制代码
a = 20
b = 10
c = a + b
print(a , "+" , b , "的结果为" , c)
c = a - b
print(a , "-" , b , "的结果为" , c)
c = a * b
print(a , "*" , b , "的结果为" , c)
c = a / b  #注意:结果为浮点类型
print(a , "/" , b , "的结果为" , c)
c = a % b
print(a , "%" , b , "的结果为" , c)
a = 2
b = 3
c = a ** b
print(a , "的" , b , "次方结果为" , c)
a = 10
b = 3
c = a // b
print(a , "//" , b , "的结果为" , c)
###输出结果###
20 + 10 的结果为 30
20 - 10 的结果为 10
20 * 10 的结果为 200
20 / 10 的结果为 2.0
20 % 10 的结果为 0
2 的 3 次方结果为 8
10 // 3 的结果为 3

2. 赋值运算符

运算符 说明 实例
= 赋值 a = 1
+= 加法赋值 a += 2,等同于a = a + 2
-= 减法赋值 a -= 2,等同于a = a - 2
*= 乘法赋值 a *= 2,等同于a = a * 2
/= 除法赋值 a /= 2,等同于a = a / 2
//= 整除赋值 a //= 2,等同于a = a // 2
%= 模赋值 a %= 2,等同于a = a % 2
**= 幂赋值 a **= 2,等同于a = a ** 2
:= 海象运算符,在表达式中同时进行赋值返回运算结果。Python3.8 版本新增 num1 = 20 print((num2 := 3**2) > num1) print(num2)

3. 比较运算符

运算符 说明 实例
== 相等,比较两者的值 a == b
!= 不相等 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b
python 复制代码
num1 = 10
num2 = 20
print(num1 == num2)  # False
print(num1 != num2)  # True
print(num1 > num2)   # Flase
print(num1 < num2)   # True
print(num1 >= num2)  # False
print(num1 <= num2)  # True
num3 = 'abc'
# 注意:不同的数据类型之间不能进行大小的比较
print(num1 > num3)
# 如果是字符串比较大小,是从最左边开始逐个比较字符串中相应位置的字符的ASCII码
print('5' > '6') # False # '5'(ASCII码)53 '6'(ASCII码)54 
print('15' > '6') # False # '1' 的 ASCII 码是 49。 '6' 的 ASCII 码是 54。49 < 54,所以 '1' < '6',此时已经可以确定 '15' < '6',直接返回 False,不会继续比较后面的字符(即使 '15' 比 '6' 长)

###输出结果###

TypeError: '>' not supported between instances of 'int' and 'str'
False
True
False
True
False
True
False

4. 逻辑运算符

运算符 说明
and 与&,x and y,从左到右依次求值, 如果 所有操作数为真 ,返回 最后一个真值遇到假值 ,直接返回 第一个假值,并停止后续计算。
or 或,x or y,从左到右依次求值 , 如果 遇到第一个真值 ,直接返回它,并停止后续计算。 如果 所有操作数为假 ,返回 最后一个假值
not 非,not x,若x为True返回False,若x为False返回True
python 复制代码
b1 = False
b2 = True
print(b1 and b2)  # False

print(b1 or b2)  # True
print(not(b1))  # True
print(5 and 8) # 8 非0表示True,0表示False 最后一个为真,返回最后一个真值
print(0 and 8) # 0 遇到假值 直接返回第一个假值,停止后面计算
print(5 or 8)  # 5 遇到真值 直接返回第一个真值,停止后面计算
print(0 or 8)  # 8 遇到真值 直接返回第一个真值
print(0 or 0.0) # 0.0 遇到价值 返回最后一个假值  
print(not(5))  # False

### 输出结果###
False
True
True
8
0
5
8
0.0
False

5. 成员运算符

运算符 说明 实例
in 在指定的序列中找到值返回 True,否则返回 False a in 'a', 'b', 'c'
not in 在指定的序列中没有找到值返回 True,否则返回 False a not in 'a', 'b', 'c'
python 复制代码
num6 = 1
num7 = 20
test_list = [1,2,3,4,5]
print(test_list)
print(num6 in test_list) # True 判断1是不是列表中的的成员
print(num7 not in test_list) # True

###输出结果###
[1, 2, 3, 4, 5]
True
True

6. 身份运算符

运算符 说明 实例
is 判断两个标识符是不是引用自相同对象 a is b,类似id(a) == id(b)。如果引用的是同一个对象则返回True,否则返回False
not is 判断两个标识符是不是引用自不同对象 a is not b,类似id(a) != id(b)。如果引用的不是同一个对象则返回True,否则返回False
python 复制代码
# -------------身份运算符---------------
m = 20
n = 20
q = 30
print(m is n)  # True 判断m和n在内存中是否指向同一个地址
print(n is q)  # False
print(n is not q)  # True
# id() 用于获取对象在内存中的地址
print(id(m) == id(n)) # True

print("-" * 30)
# -------------is和==的区别---------------
a = [1,2,3]
b = a

print(b is a)  # True
print(b == a)  # True

b = a[:]  #简单列表的复制
print(b)
print(b is a)  # False b 是一个新的列表对象,和 a 不是同一个对象(b is a 返回 False)
print(b == a)  # True 两个列表的元素值是一样

###输出结果###
True
False
True
True
------------------------------
True
True
[1, 2, 3]
False
True

第五章 流程控制语句

1. 顺序

按照程序正常的执行顺序,一条线直接走完,依次执行每条语句。

2. 分支

分支流程又叫条件控制语句或者分支语句或者选择语句,是通过条件判断来决定执行的代码。一条线不能直接走完。

2.1 单分支
  • 语法

    python 复制代码
    if 条件:
    
      # 语句
  • 说明

    Python程序语言指定任何非0和非空(null)值为True,0 或者 null为False。

    if语句的判断条件可以用条件表达式来表示其关系,后面的:必须加。其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围,缩进取消后,就不在分支范围了。如果条件不成立,不执行语句块内容。

  • 案例

    商品价格50,若余额小于50则提示"余额不足,请充值",最后打印"欢迎下次光临"。

python 复制代码
from random import randint

# 余额
balance = randint(0, 100)
# 价格
price = 50
# 打印余额
print(f"余额:{balance}")
# 比较余额和价格
if balance < price:
    print("余额不足,请充值")
print("欢迎下次光临")

# 简单的语句组:你也可以在同一行的位置上使用if条件判断语句,例如
var = 100 
if ( var  == 100 ) : print("变量 var 的值为100")
2.2 双分支
  • 语法

    python 复制代码
    if 条件:
    
      # 语句1
    
    else:
    
      # 语句2
  • 说明

    先进行条件判断,如果条件判断成立就执行step1, 条件不成立就执行step2

  • 案例

    余额随机,商品价格50。

    若余额小于50则提示"余额不足,请充值"。

    否则提示消费成功。

    最后打印"欢迎下次光临"。

    python 复制代码
    from random import randint
    
    # 余额
    balance = randint(0, 100)
    # 价格
    price = 50
    # 打印余额
    print(f"余额:{balance}")
    # 比较余额和价格
    if balance < price:
        # 如果余额小于价格
        print("余额不足,请充值")
    else:
        # 如果余额大于价格
        balance = balance - price
        print(f"消费成功,余额:{balance}")
    print("欢迎下次光临")
2.3 多分支
  • 语法

    python 复制代码
    if 条件1:
    
      # 语句1 # 条件1满足时执行
    
    elif 条件2: #条件1不满足时检查条件2
    
      # 语句2   # 条件2满足时执行
    
    elif 条件3: #条件1条件2都不满足时检查条件3
    
      # 语句3 # 条件2满足时执行
    
    else:  # else如不需要可以省略 #所有条件都不满足执行
    
      # 语句4
  • 说明

    if 语句后面可以跟 elif...else 语句,这种语句可以检测到多种可能的情况,所以也称之为多分支结构。

    如果条件判断1成立,那么执行语句块1的内容;如果条件判断2成立,那么执行语句块2的内容;如果条件判断3成立,那么执行语句块3的内容;如果条件判断1,2,3都不成立,那么执行语句块4的内容;

    使用多分支语句的时候,需要注意下面几点:

    1) if 语句至多有1个else语句,else语句在所有的else if语句之后。

    2)if语句可以有若干个 elif 语句,它们必须在else语句之前。

    3)一旦其中一个分支语句检测为 true,其他的elif以及else语句都将不再执行。

  • 案例

    判断处于人生哪个阶段。

    →如果年龄小于2岁,就打印一条消息,指出这个人是婴儿。

    →如果年龄为2(含)~4岁,就打印一条消息,指出这个人是幼儿。

    →如果年龄为4(含)~13岁,就打印一条消息,指出这个人是儿童。

    →如果年龄为13(含)~20岁,就打印一条消息,指出这个人是青少年。

    →如果年龄为20(含)~65岁,就打印一条消息,指出这个人是成年人。

    →如果年龄超过65岁(含),就打印一条消息,指出这个人是老年人。

    python 复制代码
    from random import randint
    
    # 定义年龄并打印
    print("此人年龄为", age := randint(0, 100))
    if age < 2:
        # 如果年龄<2
        print("这是个婴儿")
    elif age < 4:
        # 如果2<=年龄<4
        print("这是个幼儿")
    elif age < 13:
        # 如果4<=年龄<13
        print("这是个儿童")
    elif age < 20:
        # 如果13<=年龄<20
        print("这是个青少年")
    elif age < 65:
        # 如果20<=年龄<65
        print("这是个成年人")
    
        # 如果65>=年龄
        print("这是个老人")
2.4 嵌套分支
  • 语法

    python 复制代码
    if 条件1:
        if 条件2: # 嵌套在条件1内部
           # 语句1 # 条件1和条件2同时满足时执行
        else:
           # 语句2 # 条件1满足但条件2不满足时执行
    else: # 条件1不满足时执行
        if 条件3:  
           # 语句3 #条件1不满足条件3满足时执行
        else: 
           # 语句4 #条件1不满足条件3不满足时执行
  • 说明

    在一个if语句中,又包含另外一个if语句,这就是if语句的嵌套

  • 案例

    用户权限检查,如果是管理员,进一步判断是否有权限,对应不同管理员权限操作,如果不是普通用户,也进一步判断是否有权限,对应不同普通权限操作

    python 复制代码
    is_admin = False
    is_verified = True
    
    if is_admin:  # 外层条件
        if is_verified:  # 内层条件
            print("管理员且已验证,允许访问所有功能")  # 语句1
        else:
            print("管理员未验证,仅开放部分功能")  # 语句2
    else:
        if is_verified:  # 内层条件
            print("普通用户已验证,允许基础操作")  # 语句3
        else:
            print("未验证用户,禁止访问")  # 语句4
2.5 match case语句
  • 语法

    python 复制代码
    match x:
        case a:
            # 语句1
        case b:
            # 语句2
        case _:
            # 语句3
  • 说明

    Python3.10新增了match case的条件判断方式,match后的对象会依次与case后的内容匹配,匹配成功则执行相应语句,否则跳过。其中_可以匹配一切。match 后的对象可以是任何 Python 类型。

  • 案例

    给定月份,求该月有多少天。

    | 是专门用于模式匹配的操作符,它能把多个常量或者模式组合起来,实现 "或" 逻辑。

    python 复制代码
    # 匹配基本类型
    match month := 1:
        case 1 | 3 | 5 | 7 | 8 | 10 | 12:
            print(f"{month}月有31天")
        case 4 | 6 | 9 | 11:
            print(f"{month}月有30天")
        case 2:
            print(f"{month}月可能有28天")
        case _:
            print(f"{month}月有?天")
            
    # 匹配数据类型        
    value = 3.14
    match value:
        case int():
            print("整数")
        case float():
            print("浮点数")  # 输出: 浮点数     
            
    # 匹配字典类型
    data = {"name": "Alice", "age": 30}
    match data:
        case {"name": str(name), "age": int(age)}:  # 类型+解构(匹配结构 + 提取变量")
            print(f"{name}, {age}岁")  # 输出: Alice, 30岁
        case _:
            print("未知格式")

    解构模式vs传统模式

    python 复制代码
    data = {"name": "Alice", "age": 30}
    
    if "name" in data and "age" in data:
        name = data["name"]
        age = data["age"]
        print(f"姓名: {name}, 年龄: {age}")
    else:
        print("不匹配")
    match data:
        case {"name": name, "age": age}:
            print(f"姓名: {name}, 年龄: {age}")
        case _:
            print("不匹配")    
2.6 三目运算符
  • 语法

    python 复制代码
    表达式1 if 判断条件 else 表达式2
  • 案例

    python 复制代码
    num1 = 2
    num2 = 3
    if num1 > num2:
        max_num = num1
    else:
        max_num = num2
    print(max_num)
    # 使用三目运算符
    num1 = 2
    num2 = 3
    max_num = num1 if num1 > num2 else num2
    print(max_num)

3 .循环

3.1 while循环

在满足某个条件下,重复的执行某段代码。

注意 :python中没有 do...while ,即 "先执行一次,再检查条件" 的语法,但可以用 while True + break 模拟它的行为:

  • 语法

    python 复制代码
    while 表达式:
        # 语句-循环体
    # 或者搭配else使用    
    while 表达式:
        # 语句-循环体
    else
        # 语句
  • 说明

    先判断条件是否成立,如果条件成立就执行循环体一次;然后再判断条件是否成立,如果成立,继续执行循环体,直到循环条件不成立的时候,才会结束循环,执行循环下面的其他语句。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。执行语句可以是单个语句或语句块。

    如果条件表达式一直成立,那称之为无限循环,也叫死循环。

  • 案例1

    python 复制代码
    import time
    num = 1
    while num < 100:
        print("\r" + "=" * num,end="")  # \r 回到行首,覆盖上次输出
        num += 1
        time.sleep(0.05)  # 控制进度条速度
  • 案例2:

    第1周有2只兔子,此后每周兔子的数量都增加上周数量的2倍,且期间没有兔子死亡,求第10周共有多少只兔子

    python 复制代码
    rabbit = 2
    week = 1
    while week < 10:
        rabbit = rabbit + rabbit * 2
        week += 1
    else:
         print(f"第{week}周有{rabbit}只兔子")

    不过此时else中代码,写在else中和写在循环外效果一样。

  • 案例3:

    当用户输入quit退出循环,模拟do...while...

    python 复制代码
    while True:  # 无条件进入循环
        # 先执行一次代码
        user_input = input("请输入 'quit' 退出: ")
        if user_input == "quit":
            break  # 满足条件时退出
3.2 for循环

for 循环可以用来遍历可迭代对象,如列表或字符串。

for 循环后也可以加上 else,循环结束后会执行 else 中语句。

  • 语法

    python 复制代码
    for 临时变量 in 可迭代对象:
        # 语句
    python 复制代码
    for 临时变量 in 可迭代对象:
        # 语句1
    else:
        # 语句2
  • 说明

    关键字说明:

    • for是关键字
    • 临时变量是自己定义的用来存储遍历出来元素的变量名字
    • in是关键字
    • 可迭代对象是要遍历的序列
    • : 必须要有

    运行流程

    • 首先判断是否有下一个元素可以获取
    • 如果有,则将元素取出,赋值给临时变量
    • 继续判断是否有下一个元素可以进行取出
    • 直到将所有元素都取出,循环结束
  • 案例

    (1)遍历列表

    python 复制代码
    for i in [2, 3, 5, 7, 11, 13, 17, 19]:
        print(i)

    (2)遍历字符串

    python 复制代码
    for i in "hello world":
        print(i)

    (3)遍历range数列

    python 复制代码
    #  range(10) 生成一个从 0 开始到 9 结束的整数序列(共 10 个数字),不包含 10 本身。
    for i in range(10):
        print(i)
    # 指定生成数列的范围,从start到stop(不包含stop),可设定步长,默认步长为1,步长可正可负。   
    for i in range(-10, 10):
        print(i)
    
    for i in range(-10, 10,2):
        print(i)
        
    for i in range(10, -10, -3):
        print(i)

    (4) 嵌套循环

    使用嵌套循环打印九九乘法表。

    python 复制代码
    for row in range(1, 10):
        for col in range(1, row + 1):
            print(f"{row} × {col} = {row * col}", end="\t")
        print(end="\n")
3.3 continue

跳过当前循环块中的剩余语句,继续进行下一轮循环。一般写在if判断中。

  • 案例

    打印0-9,跳过偶数。

    python 复制代码
    for i in range(10):
        if i % 2 == 0:
            continue
        print(i)
3.4 break

跳出当前for或while的循环体,一般写在if判断中。如果for 或while循环通过break终止,循环对应的else 将不执行。

  • 案例:

    求0-9每个数自己幂自己的加和,如果大于10000000则循环终止

    Sum=00+11+22+33+⋯+9^9>10000000

    python 复制代码
    sum = 0
    for i in range(10):
        sum = sum + i**i
        if sum > 10000000:
            break
        print(i, sum)
    else:
        print("循环完成,sum = ", sum)
3.5 pass

pass是空语句,是为了保持程序结构的完整性。

pass不做任何事情,一般用做占位语句。

例如:在一个循环中,如果循环体为空,语法会提示报错,

这个时候我们就可以使用pass占位

python 复制代码
for i in range(10):
    pass
相关推荐
用户8356290780512 小时前
使用 Python 操作 Word 内容控件
后端·python
LDR0062 小时前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术2 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 小时前
C++20 Modules 模块详解
java·开发语言·spring
swordbob3 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享3 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.3 小时前
C语言--day30
c语言·开发语言
码云骑士3 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
何以解忧,唯有..4 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang