目录
*一、Python概述(简单了解)
Python语言的特点
二、Python基础
1.良好的代码格式
(1)注释
#单行注释
三个双引号"""或三个单引号'''多行注释,当然多行注释也可以用多行的#来注释
注意:①python的多行注释不支持嵌套,所以下面的写法是错误的
"""
外层注释
"""
内层注释
"""
"""
②不管是多行注释还是单行注释,当注释符作为字符串的一部分出现时,就不能再将它们视为注释标记,而应该看做正常代码的一部分,例如: print("#是单行注释的开始")
(2)缩进
Python用缩进来区分代码层次
(3)语句换行
Python官方建议每行代码不超过79个字符,若代码过长应该换行。Python会将圆括号、中括号和大括号中的行进行隐式连接,我们可以根据这个特点实现过长语句的换行显示。
string=(“Python是一种面向对象、解释型计算机程序设计语言,”
“由Guido van Rossum于1989年底发明。”
“第一个公开发行版发行于1991年,”
“源代码同样遵循 GPL(GNU General Public License)协议。”)
(4)Python 代码编写规范
①每个 import 语句只导入一个模块,尽量避免一次导入多个模块
②不要在行尾添加分号,也不要用分号将两条命令放在同一行
③建议每行不超过 79 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。例如,如果一个字符串文本无法实现一行完全显示,则可以使用小括号将其分开显示
2.标识符
标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。
命名规则:
•标识符不能和 Python 中的保留字(关键字)相同。
3.变量和数据类型
(1)变量
标识内存单元的标识符又称为变量名,Python通过赋值运算符“=”将内存单元中存储的数值与变量名建立联系,即定义变量,具体语法格式如下:变量 = 值
(2)数据类型
根据数据存储形式的不同,数据类型分为基础的数字类型和比较复杂的组合类型,其中数字类型又分为整型、浮点型、布尔类型和复数类型;组合类型分为字符串、列表、元组、字典等。
类型转换:可以用str() 函数将整数类型转换成字符串类型,也可以用int() 函数将字符串类型转换成整数类型
(3)变量的输入和输出
输入:input([prompt]),prompt表示函数的参数,用于设置接收用户输入时的提示信息。
输出:print(*objects, sep=' ', end='\n', file=sys.stdout)
4.数字类型
(1)整型
为了方便使用各进制的数据,Python中内置了用于转换数据进制的函数:bin()、oct()、int()、hex(),关于这些函数的功能说明如下。
(2)浮点型
注意:
科学计数法会把一个数表示成a与10的n次幂相乘的形式,数学中科学计数法的格式为:
a×10n (1≤|a|<10,n∈N)
Python程序中省略“×”,使用字母e或E代表底数10,示例如下:
只要写成指数形式就是小数,即使它的最终值看起来像一个整数。例如 14E3 等价于 14000,但 14E3 是一个小数。
(3)复数类型
复数由实部和虚部构成,它的一般形式为:real+imagj,其中real为实部,imag为虚部,j为虚部单位。示例如下:
通过real和imag属性可以获取复数的实部部分和虚部部分。
(4)布尔类型
若数据符合以下任一条件,其布尔值均为False。
值为None或False的常量
任何数字类型的0:0、0.0、0j
空组合数据类型:''、()、[]、set()、{}
(5)数字类型的转换
int()、float()、complex()可进行强制类型转换
需要注意的是浮点型数据转换为整型数据后只保留整数部分
另外需要注意的是
•complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
•complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。
5.运算符
根据操作数数量的不同,运算符可分为单目运算符、双目运算符、三目运算符;根据运算符的功能,运算符可分为算术运算符、赋值运算符、比较运算符、逻辑运算符和成员运算符。
(1)算术运算符
注意/除和//整除
当+用于字符串时,它还有拼接字符串(将两个字符串连接为一个)的作用;当*用于字符串时,它可以用来重复字符串,也即将 n 个同样的字符串连接起来
在混合运算时,Python会强制将数值的类型进行临时类型转换,这些转换遵循如下原则:
(2)赋值运算符
Python3.8中新增了一个赋值运算符——海象运算符“:=”,该运算符用于在表达式内部为变量赋值
num_one = 1
# 使用海象运算符为num_two赋值
result = num_one + (num_two:=2)
print(result)
(3)比较运算符
is 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。
is not 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。
注意:==两个等号才是判断相等
== 和 is 的区别
== 用来比较两个变量的值是否相等,而 is 则用来比对两个变量引用的是否是同一个对象
==也就是判断它的值,is是判断变量的内存地址
(4)逻辑运算符
and 与
or 或
not 非
实际上,逻辑运算符可以用来操作任何类型的表达式
Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。
and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。
print(30 or 10)
print(0 and 10)
print(0 or 10)
print(1 or 10)
print('-'*40)
url = "https://www.baidu.com/"
print( False and print(url))
print('-'*40)
print( True and print(url))
print('-'*40)
print( False or print(url))
print('-'*40)
print( True or print(url))
print('-'*40)
结果为:
30
0
10
1
----------------------------------------
False
----------------------------------------
https://www.baidu.com/
None
----------------------------------------
https://www.baidu.com/
None
----------------------------------------
True
----------------------------------------
(5)成员运算符
成员运算符in和not in用于测试给定数据是否存在于序列(如列表、字符串)中,关于它们的介绍如下:
not in:如果指定元素不在序列中返回True,否则返回False。
(6)位运算符
原码、反码与补码
最后计算十进制数要将补码转为原码再算 !!!!!!
(7)三目运算符
(8)运算符优先级
三、流程控制
三个结构:顺序结构、选择(分支)结构和循环结构
1.条件语句
(1)if-elif-else语句
语法格式如下:
if 判断条件1:
代码段1
elif 判断条件2:
代码段2
elif 判断条件3:
代码段3
...
else:
代码段n
(2)if的嵌套
格式如下:
if 表示式 1:
if 表达式 2:
代码块 1
else:
代码块 2
else:
if 表达式 3:
代码块 3
else:
代码块 4
(3)pass语句
在实际开发中,有时候我们会先搭建起程序的整体逻辑结构,但是暂时不去实现某些细节,而是在这些地方加一些注释,方面以后再添加代码
(4)assert语句
assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。
assert 语句的语法结构为:
assert 表达式
转换为if语句就是:
if 表达式==True:
程序继续执行
else:
程序报 AssertionError 错误
代码实例:
mathmark = int(input())
#断言数学考试分数是否位于正常范围内
assert 0 <= mathmark <= 100
#只有当 mathmark 位于 [0,100]范围内,程序才会继续执行
print("数学考试分数为:",mathmark)
2.循环语句
(1)while语句(条件循环)
语法结构:
while 条件表达式:
代码块
(2)for语句(遍历循环)
语法结构:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码
(3)break语句(跳转语句)
break语句用于结束循环,若循环中使用了break语句,程序执行到break语句时会结束循环;若循环嵌套使用了break语句,程序执行到break语句时会结束本层循环。
for 循环后也可以配备一个 else 语句。这种情况下,如果使用 break 语句跳出循环体,不会执行 else 中包含的代码。
对于嵌套的循环结构来说,break 语句只会终止所在循环体的执行,而不会作用于所有的循环体
(4)continue语句
continue语句用于在满足条件的情况下跳出本次循环,该语句通常也与if语句配合使用。
注意:是本次
代码实例:
for word in "Python":
if (word == 'o'):
continue
print(word, end=" ")
结果为:P y t h n
四、字符串
1.小知识
字符串前加r,表示原始字符串,不需要转义\,例如:
str1 = r”Let\'s learn Python”
print(str1)
结果为Let\'s learn Python
多学一招:\n换行 \t横向制表符
\r回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。即如下:
>>> print("Hello\rWorld!")
World!
>>> print('google runoob taobao\r123456')
123456 runoob taobao
2.格式化字符串
(1)使用%格式化字符串
格式:format(字符串) % values(真实数据)
例如:
age = 20
print("My age is %d" % age)
不同的占位符为不同类型的变量预留位置,常见的占位符如下所示。
%r 和 %s 的区别:
(2)format格式化字符串
格式:str.format(values)
str.format() 方法通过字符串中的花括号 {} 来识别替换字段 replacement field,从而完成字符串的格式化。替换字段由字段名 field name 和转换字段 conversion field 以及格式说明符 format specifier 组成,一般形式为{字段名!转换字段:格式说明符}
字段名分为简单字段名 simple field name 和复合字段名 compound field name。而转换字段和格式说明符都是可选的。
①简单字段名
#省略不写 {}
print('我叫{},今年{}岁。'.format('小明', 18))
#数字 {十进制非负整数}
print('身高{0},家住{1}。'.format(1.8, '铜锣湾'))
#变量名 {合法的Python标识符}
print('我大哥是{name},今年{age}岁。'.format(name='阿飞', age=20))
#混合
print('这是一个关于{0}、{1}和{girl}的故事。'.format( '小明', '阿飞', girl='阿香’))
str.format() 方法还可以使用 *元组 和 **字典 的形式传参,两者可以混合使用。
# 使用元组传参
infos = (‘钢铁侠’, 66, ‘小辣椒’)
print(‘我是{}, 身价{}亿。’.format(*infos))
print(‘我是{2},身价{1}亿。’.format(*infos))
#使用字典传参
venom = {‘name’: ’毒液’, ‘weakness’: 火}
print(‘我是{name}, 我怕{weakness}’.format(**venom))
##同时使用元组和字典传参
hulk = (‘绿巨人’, ‘拳头’)
captain = {‘name’: ‘美国队长’, ‘weapon’: ‘盾’}
print(‘我是{},我怕{weapon}。’.format(*hulk, **captain)) #{}中不写,默认为第一个
print(‘我是{name},我怕{1}。’.format(*hulk, **captain))
②复合字段名
. 点号的使用
[] 方括号的使用
#用列表传递位置参数
infos = ['阿星', 9527]
food = ['霸王花', '爆米花']
print('我叫{0[0]},警号{0[1]},爱吃{1[0]}。'.format(infos, food))
#我叫阿星,警号9527,爱吃霸王花。
#用元组传递位置参数
food = ('僵尸', '脑子')
print('我叫{0[0]},年龄{1},爱吃{0[1]}。'.format(food, 66))
#我叫僵尸,年龄66,爱吃脑子。
③转换字段
转换字段 conversion field 的取值有三种,前面要加 !
#print('I am {!s}!'.format('Bruce Lee 李小龙’))
#print('I am {!r}!'.format('Bruce Lee 李小龙’))
#print('I am {!a}!'.format('Bruce Lee 李小龙'))
#I am Bruce Lee 李小龙!
#I am 'Bruce Lee 李小龙'!
#I am 'Bruce Lee \u674e\u5c0f\u9f99'!
④格式说明符
[[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码]
(3)使用f-string格式化字符串
f-string提供了一种更为简洁的格式化字符串的方式,它在形式上以f或F引领字符串,在字符串中使用“{变量名}”标明被替换的真实数据和其所在位置。
first_name = "Hua"
last_name = "Li"
full_name = f"{first_name} {last_name }"
print(f"Hello, {full_name}")
#Hello, Hua Li
3.字符串的常见操作
(1)字符串的查找与替换
查找:find()方法,该方法可查找字符串中是否包含子串,若包含则返回子串首次出现的位置,否则返回-1。格式:str.find(sub, start, end),索引含头不含尾
替换:replace()方法,该方法可将当前字符串中的指定子串替换成新的子串,并返回替换后的新字符串。格式:str.replace(old, new, count)
(2)统计字符串出现的次数
count()方法,该方法可检索指定字符串在另一字符串中出现的次数。格式:str.count(sub,start,end)
sub:表示要检索的字符串;
start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
(3)检测字符串是否以某子串开头/结尾
startswith() 方法,用于检索字符串是否以指定字符串开头,如果是,返回 True;反之,返回 False。格式:str.startswith(sub,start,end)
endswith() 方法用于检索字符串是否以指定字符串结尾,如果是,则返回 True;反之,则返回 False。格式:str.endswith(sub,start,end)
(4)字符串的分隔与拼接
split()方法,可以按照指定分隔符对字符串进行分割,该方法会返回由分割后的子串组成的列表。
格式:str.split(sep=None, maxsplit=-1)
sep:分隔符,默认为空字符。
maxsplit:最大分割次数,默认值为-1,表示不限制分割次数。
join()方法,使用指定的字符连接字符串并生成一个新的字符串。格式:str.join(iterable)
(5)删除字符串的指定字符
字符串中可能会包含一些无用的字符(如空格),在处理字符串之前往往需要先删除这些无用的字符。Python中的strip()、lstrip()和rstrip()方法可以删除字符串中的指定字符。
默认会删除空格以及制表符(\t)、回车符(\r)、换行符(\n)等特殊字符
str :被操作字符串
chars:指定字符串
str字符串本身不会发生改变,删除得到的字符串是方法的返回值
(6)字符串大小写转换
Python中支持字母大小写转换的方法有upper()、lower()、capitalize()和title()。如果转换成功,则返回新字符串;反之,则返回原字符串。
str = "i like Python“
str.upper()
str.lower()
str.capitalize()
str.title()
结果为:
'I LIKE PYTHON’
'i like python'
'I like python’
‘I Like Python'
(7)字符串对齐
Python提供了center()、ljust()、rjust()这3个方法来设置字符串的对齐方式。
原字符串不会发生改变,用的是返回值
(8)获取字符串长度或字节数
获取字符串长度:len(string)
获取字符串字节数:len(string.encode())
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。例如,汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
(9)字符串截取
获取单个字符:
strname[index]
strname 表示字符串名字,index 表示索引值。
获取多个字符(字符串截去/字符串切片):
使用[ ]除了可以获取单个字符外,还可以指定一个范围来获取多个字符,也就是一个子串或者片段,具体格式为:
strname[start : end : step]