Python语言基础
Python语法特点
注释规则
- 单行注释:使用#作为单行注释的符号
- 多行注释:使用’’’ ‘’'或者""" “”"进行多行注释
- 中文注释:在文件开始加上中文注释,#coding=UTF-8或者GBK(具体根据字符编码类型)
代码缩进
- 使用代码缩进和冒号区分代码层次
- 同一级别的代码块的缩进必须完全相同,不合理的代码缩进会导致异常
编码规范
- 编写规则:① 每个import语句只导入一个模块,尽量避免一次导入多个模块 ② 不要在行尾添加分号,也不要用分号把两条命令放在同一行 ③ 每行不超过80个字符,如果超过,用()将多行内同隐式地连接起来(两种情况除外:导入模块的语句过长或注释里的URL) ④ 使用必要的空行增加代码的可读性:顶级定义(类和函数)之间空两行,方法定义之间空一行,分隔功能的位置空一行 ⑤ 运算符两侧、函数参数之间、逗号的两侧使用空格进行分隔 ⑥ 避免在循环中使用+和+=操作符累加字符串,推荐方法:将每个子字符串加入列表,在循环结束后使用join()方法连接列表
- 命名规范
Python中的变量
重点:Python语言中的变量声明是无需说明数据类型,变量的数据类型由数据的内容确定
number = 1024
title = "Lavrov"
print(number, title)
1024 Lavrov
保留字与标识符
- 保留字
- 标识符:下划线开头的标识符的特殊含义:(1)以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入(2)以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如 init()代表类的构造函数
- 定义变量:变量类型可以随时变化,内置函数type()可以返回变量的类型
nickname="碧海苍梧"
print(type(nickname))
nickname=1024
print(type(nickname))
<class 'str'>
<class 'int'>
- 允许多个变量指向同一个值,两个变量的内存地址相同,内置函数id()可以获取变量的内存地址
no = number = 1024
id(no)
id(number)
1759831415248
1759831415248
基本数据类型
数字
- 整数:十进制、八进制(0o/0O开头)、十六进制(0x/0X开头)、二进制
- 浮点数
- 复数
字符串
- 使用单引号、双引号、三引号括起来
- 转义字符
布尔类型
数据类型转换
1.创建一个复数 :complex(x+yj)
2. 转换成字符串:str(x)
3. 转换成表达式字符串:repr(x)
4. 计算字符串中的有效python表达式并返回一个对象
5. 将整数x转换成一个字符:chr(x)
6. 将一个字符x转换成它对应的整数值:ord(x)
7. 将一个整数x转换成一个十六进制的字符串:hex(x)
8. 将一个整数x转换成一个八进制的字符串:oct(x)
9. 将x转换成整数类型:int(x)
10.将x转换成浮点数类型:float(x)
基本输入和输出
- 使用input()函数输入:variable=input(“提示文字”),python中无论输入的是数字还是字符都作为字符串读取,如果想要接收数值,需要对接收到的字符串进行类型转换
tip=input("请输入:")
tip=int(input("请输入:"))
- 使用print()函数输出:输出多个内容并且不换行可使用,分隔内容,输入时同一print()方法中的数据的类型必须相同,数字可以使用str()方法转换成字符串。
- 语句内容在同一行显示:内容后加上“,end=‘ ’”,例如print(i,end=’ ')
- 换行:print(’’),换行且无空行,print(“\n”),换行且存在空行
print(123,456)
- 把结果输出到指定文件(若文件不存在将自动创建文件)
fp=open(r'C:\Users\user\Desktop\title.txt',"a+")
print("命运给予我们的不是失望之酒,而是机会之杯", file=fp)
fp.close()
运算符与表达式
运算符
算术运算符(+、-、*、/、//、**)
- 取整除://
- 幂:**
注:Python 3.x中整数运算的结果为浮点数。
赋值运算符
比较/关系运算符:输出结果为布尔值
python=95
english=92
print(python>english)
True
逻辑运算符:and、or、not
位运算符(&、|、^、~、<<、>>)
注:采用二进制计算,移位运算速度快,当需要乘以或除以 2 n 2^n 2n时,采用位运算符代替
运算符的优先级
条件表达式
a=10
b=6
if a>b:
r=a
else:
r=b
代码简化
a=10
b=6
r=a if a>b else b
year=int(input("请输入年份:"))
print("是闰年"if(year%4==0 and year%100!=0)or (year%100==0) else "不是闰年")
流程控制语句
程序结构
- 顺序结构
- 选择结构
- 循环结构
选择语句
重点:
- 没有switch语句,实现多重选择只能使用if:……elif:……else:多分支语句或者if语句的嵌套
- 使用if语句时,如果只有一条语句,语句块可以直接写到:的右侧
- 同一层选择结构的多条语句的缩进必须相同
- else语句不可以单独使用,必须和保留字if一起使用
- 当if语句多于else语句时,else语句会根据缩进确定else语句是属于哪个if语句
- 多重循环中执行某一条件的前提是该条件之前的条件均不成立,if和elif都需要判断表达式的真假,else不需要判断,elif和else都i必须和if一起使用
- 选择语句的嵌套必须严格控制不同级别代码块的缩进量
循环语句
注:没有do……while……循环
- while循环
while 条件表达式:
循环体
- for循环:适用于枚举或遍历序列以及迭代对象中的元素
for 迭代变量 in 对象:
循环体
例:进行数值循环
print("计算1+2+3+……100的结果为:")
result=0
for i in range(101):
result+=i
print(result)
计算1+2+3+……100的结果为:
5050
range(start,end,step)内置函数
- start:指定计数的起始值,可以省略,如果省略则从0开始
- end:指定计数的结束值(不包括该值),不能省略,当range()函数只有一个参数时,即表示指定计数的结束值。
- step:指定步长,即两个数之间的间隔,可以省略,如果省略表示步长为1
for i in range(1,10,2):
print(i,end=' ')
1 3 5 7 9
例:遍历字符串
string="你是我唯一的仔仔"
print(string)
for ch in string:
print(ch,end='')
你是我唯一的仔仔
你是我唯一的仔仔
循环嵌套
例:打印乘法表
for i in range(1,10):
for j in range(1,i+1):
print(str(j)+"×"+str(i)+"="+str(i*j)+"\t",end=' ')
print('')
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
break、continue和pass语句
- break:完全中止所在最内层循环
- continue:直接跳至本层循环循环的下一次迭代
- pass:空语句,表示不做任何事情,一般起到占位作用
for i in range(1,10):
if i%2==0:
print(i,end=' ')
else:
pass
2 4 6 8
列表与元组
序列概述
序列:用于存放多个值的连续内存空间,并且按一定顺序排列,每个值都分配一个数字,称为索引或位置。通过索引可以取出相应的值。
序列结构:列表、元组、集合、字典和字符串
索引
概念:序列中每个元素的编号,从0开始递增,可以是负数
注:采用负数作为索引值时,从-1开始,即最后一个元素的下标为-1。
切片
概念:访问序列中元素的方法,可以访问一定范围内的元素,可以生成一个新的序列
实现切片操作的语法
sname[start:end:step]
sname:序列的名称 start:切片的开始位置(包括),可省略,若省略则从0开始
end:切片的截至位置(不包括),可省略,若省略则为序列的长度
step:切片的步长,可省略,若省略则默认为1
注:
- 在进行切片操作时,如果指定步长,将按照该步长遍历序列中的元素,否则逐个遍历序列中的元素
- 如果想要复制整个序列,可以省略start和end,但必须保留中间的:,例如verse[:]
versf=verse[:]
序列相加
使用+运算符对两个序列进行相加
print(verse1+verse2)
乘法
概念:使用数字 n n n 乘以一个序列会生成新的序列,新序列的内容为原序列重复 n n n 次的结果
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上"]
print(verse1*3)
['自古逢秋悲寂寥', '我言秋日胜春朝', '晴空一鹤排云上', '自古逢秋悲寂寥', '我言秋日胜春朝', '晴空一鹤排云上', '自古逢秋悲寂寥', '我言秋日胜春朝', '晴空一鹤排云上']
实现初始化指定长度列表的功能
例:创建一个长度为5的列表,列表的每个元素都是None,表示什么都没有
emptyList=[None]*5
print(emptyList)
[None, None, None, None, None]
检查某个元素是否是序列的成员(元素)
方法:使用关键字 in 检查某个元素是否是序列的成员,即检查某个元素是否包含在该序列中,返回值为布尔值
语法:value in sequence
value为需要检查的元素,sequence为指定的序列
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上"]
print("自古逢秋悲寂寥"in verse1)
True
计算序列的长度、最大值和最小值
内置函数
- len():计算序列的长度,返回序列中的元素的个数
- max():返回序列中的最大元素
- min():返回序列中的最小元素
- list():将序列转换成列表
- str():将序列转换成字符串
- sum():计算元素和
- sorted():对元素进行排序
- reversed():反向序列中的元素
- enumerate():将序列组合成一个索引序列,多用在 for 循环中
列表
概念:由一系列按特定顺序排列的元素组成,时Python内置的可变序列,列表中的所有元素存放在 [ ] 中,相邻元素之间使用,分隔,可以将任何类型的内容存放入列表中,同一个列表中的元素类型可以不同,列表中的元素之间没有任何联系。
列表的创建和删除
- 使用赋值运算符直接创建列表,列表可以嵌套,列表中的数据类型相同可以提高程序的可读性
语法:listname=[element1,element2,element3,...elementn]
- 创建空列表
语法:listname=[]
- 创建数值列表
可以使用list()函数直接将range()函数循环出来的结果转换成列表
print(list(range(0,10,1)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 删除列表
方法:使用 del 语句将列表删除
语法:del listname
常见错误:删除列表前,一定要保证输入的列表名称是已经存在的
注:Python自带的垃圾回收机制会自动销毁不用的列表
访问列表元素
方法:使用print()
函数输出列表
输出整个列表:`print(listname)
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上"]
print(verse1)
['自古逢秋悲寂寥', '我言秋日胜春朝', '晴空一鹤排云上']
输出单个列表元素:print(listname[1])
,输出不包括中括号、字符串的引号
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上"]
print(verse1[1])
我言秋日胜春朝
例:每日一贴
import datetime
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上","便引诗情到碧霄","2019年05月21日","仔仔","我一直都在"]
print(verse1[datetime.datetime.now().weekday()])
便引诗情到碧霄
说明:datetime.datetime.now()
方法获取当前日期,weekday()
方法日期时间对象中获取星期,取值范围为 0~6,为0时代表星期一,6代表星期日
遍历列表
- 直接使用 for 循环实现
语法:for item in listname:
item用于保存获取到的元素值
例:
verse1=["自古逢秋悲寂寥","我言秋日胜春朝","晴空一鹤排云上","便引诗情到碧霄"]
for item in verse1:
print(item)
自古逢秋悲寂寥
我言秋日胜春朝
晴空一鹤排云上
便引诗情到碧霄
- 使用 for 循环和
enumerate()
函数实现
可以实现同时输出索引值和元素内容
语法:for index,item in enumerate(listname):
例:
verse1=["自古逢秋悲寂寥",