一、学前准备
先简单认识下Python代码。
1. Python注释
在 Python 中,注释不会影响程序的执行,但是会使代码更易于阅读和理解。
Python 中的注释有单行注释和多行注释。
1.1 单行注释
# 这是一个注释print("Hello, World!")
快捷键是:CTRL + /
1.2 多行注释
多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来。
1.2.1 三-单引号
''' 这是多行注释, 用三个单引号这是多行注释, 用三个单引号 这是多行注释,用三个单引号 ''' print("Hello, World!")
1.2.2 三-双引号
""" 这是多行注释, 用三个单引号这是多行注释, 用三个单引号 这是多行注释,用三个单引号 """ print("Hello, World!")
注意:多行注释可以嵌套,单行注释不能嵌套。
2. 输入和输出
接收用户输入的信息,或者打印信息。
2.1 输出
在python中主要使用print实现输出,print是一个函数
-
作用:
向终端输出文字信息,在控制台输出打印数据,能让用户看到
-
调用格式
print(数据1, 数据2, 数据3, ..., sep=' ', end='\n')
-
说明
-
sep 参数用来定义数据之间的分割符,默认为空格
-
end 参数用来定义数据输出完后用什么字符结束,默认是换行符('\n')
-
-
示例
print("hello world!") print("我们班有多少人", 12) print(1, 2, 3, 4) print(1, 2, 3, 4, sep=" ", end="\n") print(1, 2, 3, 4, sep="###", end="\n\n\n") print(1, 2, 3, 4)
2.2 输入
python中通过input函数获取用户键盘输入
-
作用
会让程序停下来,等待用户输入文字信息,输入后回车返回用户输入的字符串
-
调用格式
input("提示信息:")
-
示例
yourname = input('请输入您的姓名:')
四、Python基础
语句结尾可以加分号,不过一般不加;
使用缩进组织代码和代码块;
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:
if True: print("True") else: print("False")
1. 变量
变量是代数的思想,用来缓存数据;
使用的变量必须声明,在声明变量时不需要指定变量类型。
1.1 变量声明
变量是缓存数据的标识符。
在python中,变量是用赋值语句创建,用来绑定一个数据的有名对象
1.1.1 命名规则
-
变量名只能包含字母、数字和下划线(_)。
-
不能以数字开头。
-
严格区分大小写。
-
不能使用保留字
33个保留字不能用于变量命名
1.1.2 命名约定
a a1 abc ABC a1b2c3d4 one_hundred count _a __ABC__ getNameAge get_name_age GetNameAge # 小驼峰 匈牙利命名法 大驼峰
-
通常使用小写字母来命名。
-
多个单词组成的变量名,用匈牙利命名法或驼峰法。
-
简短、有意义,见名之意,我的意思是一定要见名知意。
-
纯大写字母一般表示常量,例如 PI = 3.14159
-
变量名用名词,函数名用谓词(动词+名词),如 phone / update_phone
-
类名采用驼峰形式,如MyClass
1.2 变量赋值
使用=对变量进行赋值。
-
语法
变量名 = 数字类型 变量名 = 表达式 变量名1 = 变量名2 = 变量名3 = 数字类型 变量名1, 变量名2, 变量名3 = 数字类型1, 数字类型2, 数字类型3
-
示例
one_hundred = 99 + 1 a = b = c = 200 a, b = 100, 200 counter = 100 # 整型变量 miles = 1000.0 # 浮点型变量 name = "hqyj" # 字符串 print (counter) print (miles) print (name)
-
说明
-
第一次赋值是创建变量,同时绑定表达式执行结果
-
后续再赋值,会改变原有变量的绑定关系
-
变量本身是没有类型,它绑定的对象才有类型
-
变量在使用之前,必须先进行赋值
-
变量赋值是一个自右向左的运算,将=右边表达式结果赋值给变量
-
1.3 基础变量类型
Python中的变量就是变量,它没有类型,我们所说的"类型"是变量指向的内存中对象的类型。我们可以使用type函数用于获取一个变量或值的类型。
python中的数据类型:
-
字符串 str
-
数字
-
整数 int
-
浮点数 float
-
布尔数 bool
-
-
容器
-
列表 list
-
元组 tuple
-
字典 dict
-
集合 set / 固定集合 frozenset
-
字节串 bytes / 字节数组 bytearray
-
按照是否可修改划分分为:
-
不可变数据:Number(数字)、String(字符串)、Tuple(元组)
-
可变数据:List(列表)、Dictionary(字典)、Set(集合)
1.3.1 字符串类型
用引号引起来的就是字符串,即便是空或者空格。
1.3.1.1 基本特征
-
引号引起来的:单引号、双引号、三引号(三个单引号或双引号);
-
三引号是字符串模板,所见即所得,可以包含单引号和双引号;
-
使用反斜杠\对字符进行转义
\' 代表单引号 \" 代表双引号 \n 代表换行符 \\ 代表反斜杠 \t 代表缩进
-
字符串前加r表示原始字符串,不转义;
r'c:\window\user\data'
1.3.1.2 运算
-
字符串连接用+;
-
相邻的两个或多个 字符串字面值 会自动合并
'Py' 'thon'
-
字符串多次重复, 如 :
'abc' * 3
1.3.1.3 访问
-
索引访问:从0开始,支持负数
正向索引: 字符串的正向索引是从0开始的,.... 最后一个索引为 len(s)-1
反向索引: 字符串的反向索引是从 -1 开始的,-1 代表最后一个,... -len(s) 代表第一个
s = 'ABCDE' print(s[1]) # B print(s[1+2]) # D print(s[-1]) # E
-
支持切片:参数是start、end、step,下标从0开始,支持负数
语法:
字符串[(开始索引b):(结束索引e)(:(步长s))]
说明:
-
开始索引b是切片切下的开始位置
-
结束索引e 是切片的终止位置(但不包含终止点)
-
步长是切片取出数据后向后移动的方向和偏移量
-
没有步长,相当于步长为1(默认为1)
-
当步长为正数时,取正向切片
-
开始索引默认为0, 结束索引是最后一个元素的下一个索引
-
-
当步长为负数时,取反向切片
-
开始索引默认为-1, 结束索引是第一个元素的前一个索引
-
-
'huaqyj'[:2] 'huaqingyunajian'[1:5:2] 'huaqingyunajian'[::-1]
step为负值说明是反方向走。
-
1.3.1.4 关系判断
-
in 和 not in:判断是否包含指定的子字符串
str = r'c:\window\ruser\data' print('window' in str)
1.3.1.5 课后练习
-
课后练习1
输入一个字符串, 判断这个字符串是否是回文 上海自来水来自海上 ABCCBAa 13531
参考答案
s = input("请输入一段文字: ") if s == s[::-1]: print(s, '是回文') else: print(s, '不是回文')
-
课后练习2
写程序,输入一个字符, 打印字符串的如下内容 1. 打印这个字符串的第一个字符 2. 打印这个字符串的最后一个字符串 3. 如果这个字符串的长度是 奇数,则打印中间这个字符 用 len(x) 求字符串的长度
参考答案
s = input("请输入一段文字: ") print('第一个字符是:', s[0]) print('最后一个字符是:', s[-1]) if len(s) % 2 == 1: print('中间的字符是', s[len(s) // 2])
1.3.1.6 格式化表达式
1.3.1.6.1 占位符
-
作用
生成具有一定格式的字符串
-
语法规则
格式化字符串 % 参数1 # 或者 格式化字符串 % (参数1, 参数2, 参数3)
-
占位符和类型码
占位符和类型码 说明 %s 转成字符串, 使用 str(x) 函数转换(常用) %d 转成十进制的整数(常用) %o 转成八进制的整数 %x,%X 转成十六进制的整数 %e,%E 转成指数格式的浮点数 %f,%F 转成小数格式的浮点数(常用) %g,%G 转成指数格式或小数格式的浮点数 %% 转成一个% %m.nf m是指总宽度,默认右对齐,加个 - 表示左对齐,n 是指保留的小数点位数
-
示例1
-
代码
fmt = """ 甲方:_____%s_____ 乙方:_____%s_____ ....... 金额:_%d__ """ s = fmt % ("小王", '华清', 10000) b = fmt % ("小红", '华清', 10000) print(s)
-
输出效果:
甲方:_____小王_____ 乙方:_____华清_____ ....... 金额:_10000__
-
示例2
-
代码
# 按照指定的宽度打印,并保留指定的小数位数 print("------%30.2f------" % 3141523274814.23748123742183472) print("------%30.2f------" % 3144814.3472) print("------%30.2f------" % 14)
-
输出结果
------ 3141523274814.24------ ------ 3144814.35------ ------ 14.00------
-
1.3.1.6.2 f-string
f-string 格式化字符串以 $f$ 开头,字符串中的表达式用 {} 包起来。
x = 1 y = 2.3 print(f'{x+1}') #2 x = 1 print(f'{x+1=}') #x+1=2 d = 12 print(f'abc{d}') # 其中的{}中为变量或表达式 # 可以使用:对变量进一步格式化 pi = 3.1415 print(f'{s:.2f}') # 3.14
1.3.1.7 常见API
-
方法的调用语法
对象.方法名(参数)
. 是"的"的意思
-
Python 的字符串常用内建函数如下:
序号 方法及描述 1 capitalize()将字符串的第一个字符转换为大写 2 center(width, fillchar)返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 3 count(str, beg= 0,end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 4 endswith(suffix, beg=0, end=len(string))检查字符串是否以 suffix 结束,如果 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False。 5 expandtabs(tabsize=8)把字符串 string 中的 \t 符号转为空格,tab 符号默认的空格数是 8 。 6 find(str, beg=0, end=len(string))检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 7 index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在字符串中会报一个异常。 8 isalnum()非空字符串 中没有符号 就返回True 9 isalpha() 判断字符串是否是英文字符 是就返回True 10 isdigit()如果字符串只包含数字则返回 True 否则返回 False 11 islower() 用于检测字符串中的所有字符是否都是小写字母,字符都是小写,则返回 True,否则返回 False 12 isnumeric()如果字符串中只包含数字字符,则返回 True,否则返回 False 13 isspace()如果字符串中只包含空白,则返回 True,否则返回 False. 14 istitle()如果字符串是标题化的(见 title())则返回 True,否则返回 False 15 isupper()用于检测字符串中的所有字符是否都是大写字母,并且都是大写,则返回 True,否则返回 False 16 join(seq)以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 17 len(string)返回字符串长度 18 ljust(width, fillchar])返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 19 lower()转换字符串中所有大写字符为小写. 20 lstrip()截掉字符串左边的空格,\t,\r,\n或指定字符。 21 maketrans()创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 22 max(str)返回字符串 str 中最大的字母。 23 min(str)返回字符串 str 中最小的字母。 24 replace(old, new , max)把 将字符串中的 old 替换成 new,如果 max 指定,则替换不超过 max 次。 25 rfind(str, beg=0,end=len(string))类似于 find()函数,不过是从右边开始查找. 26 rindex( str, beg=0, end=len(string))类似于 index(),不过是从右边开始. 27 rjust(width, fillchar)返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 38 rstrip()删除字符串末尾的空格\t,\r,\n或指定字符。 29 split(sep="", maxsplit=string.count(str))以 sep为分隔符截取字符串,如果 maxsplit有指定值,则仅截取 maxsplit+1 个子字符串 30 splitlines(keepends)按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 31 startswith(substr, beg=0,end=len(string))检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 32 strip(chars)在字符串上执行 lstrip()和 rstrip() 33 swapcase()将字符串中大写转换为小写,小写转换为大写 34 title()返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写 35 upper()转换字符串中的小写字母为大写 36 zfill (width) 在字符串左侧填充指定数量的零,确保整个字符串达到指定长度 -
常见API
详见文档: 内置类型 — Python 3.13.5 文档
-
示例
1. str.lower(): 将字符串转换为小写 text = "Hello, World!" print(text.lower()) # 输出: hello, world! 2. str.upper(): 将字符串转换为大写 text = "Hello, World!" print(text.upper()) # 输出: HELLO, WORLD! 3. str.strip(): 移除字符串两端的空白字符 text = " Hello, World! " print(text.strip()) # 输出: Hello, World! 4. str.split(): 将字符串拆分为列表 text = "Hello, World!" print(text.split()) # 输出: ['Hello,', 'World!'] text = "Hello,World!" print(text.split(',')) # 输出: ['Hello', 'World!'] 5. str.join(): 将列表中的字符串连接为一个字符串 words = ['Hello', 'World'] print(" ".join(words)) # 输出: Hello World words = ['apple', 'banana', 'cherry'] print(", ".join(words)) # 输出: apple, banana, cherry
join的功能是:
把 iterable 里的所有元素用字符串 s 连接起来
⚠️ 注意:连接的是元素之间的位置,不是首尾加!
6. str.replace(): 替换字符串中的子字符串 text = "Hello, World!" print(text.replace("World", "Python")) # 输出: Hello, Python! 7. str.find(): 查找子字符串,返回第一次出现的位置 text = "Hello, World!" print(text.find("World")) # 输出: 7 print(text.find("Python")) # 输出: -1(如果未找到则返回 -1) 8. str.startswith(): 检查字符串是否以指定子字符串开头 text = "Hello, World!" print(text.startswith("Hello")) # 输出: True print(text.startswith("World")) # 输出: False 9. str.endswith(): 检查字符串是否以指定子字符串结尾 text = "Hello, World!" print(text.endswith("World!")) # 输出: True print(text.endswith("Hello")) # 输出: False 10. str.isdigit(): 检查字符串是否只包含数字字符 text1 = "12345" text2 = "12345abc" print(text1.isdigit()) # 输出: True print(text2.isdigit()) # 输出: False 11. str.isalpha(): 检查字符串是否只包含字母字符 text1 = "Hello" text2 = "Hello123" print(text1.isalpha()) # 输出: True print(text2.isalpha()) # 输出: False 12. str.isalnum(): 检查字符串是否只包含字母和数字字符 text1 = "Hello123" text2 = "Hello 123" print(text1.isalnum()) # 输出: True print(text2.isalnum()) # 输出: False 13. str.title(): 将字符串中的每个单词的首字母转换为大写 text = "hello, world!" print(text.title()) # 输出: Hello, World! 14. str.capitalize(): 将字符串的首字母转换为大写 text = "hello, world!" print(text.capitalize()) # 输出: Hello, world! 15. str.count(): 计算子字符串在字符串中出现的次数 text = "Hello, World! Hello, Python!" print(text.count("Hello")) # 输出: 2 print(text.count("Python")) # 输出: 1 16. str.format(): 格式化字符串 name = "John" age = 30 print("My name is {} and I am {} years old.".format(name, age)) # 输出: My name is John and I am 30 years old. print(f"My name is {name} and I am {age} years old.") # 输出: My name is John and I am 30 years old. (使用 f-string)
1.3.2 数字类型
Python 中的基本的数字类型
-
整数 int
-
浮点数(小数) float
-
布尔类型数 bool
1.3.2.1 整数
int
## 十进制的写法 100 0 -5 ## 二进制的写法 0b 开头 后跟 0~1 0b1101 ## 八进制的写法 0o开头 后跟 0~7 0o777 等于 0b111111111 等于 511 ## 十六进制的写法 0x 开头 后跟 0~9, a-f, A-F 0xA1B2C3D4
1.3.2.2 浮点数
float
## 小数写法 3.14 0.14 .14 3.0 3. 0.0 ## 科学计数法 6.18E-1 # 等同于 0.618 2.9979E8 # 等同于 299790000.0
1.3.2.3 布尔类型
Bool
-
表示真假、对错、黑白等;
-
只有2个值True和False;
-
类型转换使用bool()方法
-
非0都是True
-
0、0.0、-0.0、空字符串、空列表、空字典、空集合、空元组、None等都是False;
1.3.2.4 数字类型转换
-
可以使用0b、0o、0x等表示二进制、八进制、十六进制
-
bin():转换为二进制
-
oct():转换为八进制
-
int():转换为十进制整数
-
hex():转换为十六进制
-
float():转换为浮点数
-
complex(x):将x转换到一个复数,实数部分为 x,虚数部分为 0。
-
complex(x, y):将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。
-
bool(x):将 x 转化为布尔值
-
int(x):将 x 转化为整数
1.3.3 字节串
bytes
字节串是通过在字符串前加上 $b$ 来表示的:
byte_string = b'hello' print(byte_string) # 输出: b'hello' print(type(byte_string)) # 输出: <class 'bytes'>
字节串通常用于表示二进制数据,比如网络通信、加密解密、协议解析、文件操作等场景。
每个字符其实是它的 ASCII 编码的字节值。
1.3.4 空值
空值用 $None$ 表示,类型为$NoneType$
none_value = None print(none_value) # 输出: None print(type(none_value)) # 输出: <class 'NoneType'>
-
$None$ 表示没有值或缺失的值。
-
通常用于函数没有返回值的情况,或者用作可选参数的默认值。
1.4 复合类型初识
Python 支持多种复合数据类型,可将不同值组合在一起。
1.4.1 列表类型
list
列表是用方括号标注、逗号分隔的一组值,可以(我的意思是不要)包含不同类型的元素:
-
列表内的数据有先后顺序关系
-
列表是可变的容器
1.4.1.1 列表创建
-
字面值
L = [] # 创建一个空的列表 L = ['北京', '上海', '广州', '西安'] # 创建一个含有4个字符串的列表 L = [1, 'Two', 3.14, True, False, None] L = [1, 2, [3.1, 3.2], 4] # 含有四个元素的列表,第三个元素是列表 L2 = [ ['姓名','语文成绩','数学成绩'], ['小王', 90, 100], ['牛犇', 59, 26] ]
-
构造函数list
list() # 创建一个空的列表,等同于 [] list(可迭代对象) # 用可迭代对象创建一个列表
示例
L = list() # L = [] L = list("ABC") # L = ['A', 'B', 'C'] L = list(range(5)) # L = [0, 1, 2, 3, 4]
1.4.1.2 列表运算
列表list同字符串str都是序列, 他们的运算规则基本相同。
-
+ 用于拼接列表
[1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6]
-
+= 追加
语法
列表 += 可迭代对象
L = [1, 2, 3] L += [4, 5] # L = [1, 2, 3, 4, 5] L = [1, 2, 3] L += "ABC" # L = [1, 2, 3, 'A', 'B', 'C'] L += range(2)
-
* 用于生产重复的列表
[1, 2] * 3 # [1, 2, 1, 2, 1, 2] L = [5, 6] L *= 3 # L = [5, 6, 5, 6, 5, 6]
-
== 、!= 用于比较
[1, 2, 3] == [1, 2, 3] # True [1, 2, 3] != [3, 2, 1] # True
-
in 、not in 用于判断一个数据元素是否在列表中
"hello" in [1, "hello", 'world'] True '红楼梦' in ['三国演义', '西游记'] False
1.4.1.3 列表访问
1.4.1.3.1 索引
列表[整数表达式]
L = [1, 2, 3, 4, 5, 6] print(L[0]) # 1 print(L[-1]) # 6
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
list = ['red', 'green', 'blue', 'yellow', 'white', 'black'] print( list[0] ) print( list[1] ) print( list[2] )
1.4.1.3.2 反向索引
索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。
list = ['red', 'green', 'blue', 'yellow', 'white', 'black'] print( list[-1] ) print( list[-2] ) print( list[-3] )
1.4.1.3.3 切片
列表[(开始索引b):(终止索引e)(: (步长s))]
() 里的内容代表可以省略
x = [1, 2, 3, 4, 5, 6, 7, 8] y1 = x[:4] # y1 = [1, 2, 3, 4] y2 = x[::2] # y2 = [1, 3, 5, 7] y3 = x[::-1] # y3 = [8, 7, 6, 5, 4, 3, 2, 1]
nums = [10, 20, 30, 40, 50, 60, 70, 80, 90] print(nums[0:4])
list = ['openAI', 'hqyj', "Zhihu", "Taobao", "Wiki"] # 读取第二位 print (list[1]) # 从第二位开始(包含)截取到倒数第二位(不包含) print (list[1:-2]) # 从下标2开始(包含2)到最后一个 print (list[2:]) # 从下标0开始到下标3结束(左闭右开) print (list[:3])
1.4.1.4 列表操作
增、删、改、查(就是列表访问)
1.4.1.4.1 添加数据
-
方法
方法名(L代表列表) | 说明 |
---|---|
L.append(x) | 向列表的末尾追加单个数据, list.append() 是 原地修改列表的方法,它没有返回值,默认返回 None 。 |
L.insert(index, obj) | 将某个数据obj 插入到 index这个索引位置的数据之前 |
L.extend(可迭代对象) | 等同于: L += 可迭代对象 |
-
示例
mylist1 = [1, 3, 4] # 目标是变成 [1, 2, 3, 4, 5] mylist1.append(5) # mylist1 = [1, 3, 4, 5] mylist1.insert(1, 2) # mylist1 = [1, 2, 3, 4, 5] mylist1.extend(range(6, 10)) # mylist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
1.4.1.4.2 修改数据
-
用索引赋值可以改变列表内的数据
列表[整数表达式] = 表达式
-
示例
mylist2 = [1, 1.99, 3] # 把1.99 改为2 mylist2[1] = 2 # mylist2 = [1, 2, 3]
1.4.1.4.3 删除数据
-
方法
方法 说明 L.remove(x) 从列表L中删除第一次出现在列表中的数据元素,如果x不存在则报错 L.pop() 根据索引删除元素,并返回该元素。若不提供索引,默认删除最后一个元素 L.clear() 清空列表它的作用是: 从清空整个列表的所有元素,并且不会返回值。 L.pop()
它的作用是: 从列表中移除并返回指定索引位置的元素。
它的返回值是: 那个被移除的单个元素,而不是列表。
-
示例
L = [1, 2, 3, 4, 2, 2, 3, 4] L.remove(3) # L = [1, 2, 4, 2, 2, 3, 4] L.remove(3) # L = [1, 2, 4, 2, 2, 4] L.remove(3) # 报错了 L.clear() # L = []
-
-
del 语句删除指定位置的数据元素
-
语法
del 变量名 # 删除变量,同时解除变量绑定的对象 del 列表[整数表达式]
-
示例
L = ['张飞', '赵云', '鲁班7号', '孙悟空'] del L[2] # L = ['张飞', '赵云', '孙悟空'] del L # 删除 L 变量
-
1.4.1.5 常见API
可变容器操作:内置类型 — Python 3.13.5 文档
举例如下:
序号 | 函数 |
---|---|
1 | len(list)列表元素个数 |
2 | max(list)返回列表元素最大值 |
3 | min(list)返回列表元素最小值 |
4 | list(seq)将元组转换为列表 |