目录
1.浮点数不精确问题
- 在使用浮点数计算时,会出现小数位数不确定的情况。
a=1.1
b=2.2
print(a+b) #输出3.3000000000000003
- 这种情况下,我们需要导入decimal包来解决。
from decimal import Decimal
print(Decimal('1.1')+Decimal('2.2')) #输出3.3
2.字符串类型定义
- 单引号和双引号定义的字符串必须在一行
- 三引号定义的字符串可以分布在连续的多行
str1='hello world!'
str2="hello world!"
str3='''hello
world!''' #单引号的三引号
str4="""hello
world!""" #双引号的三引号
3.数据类型转换
- int(),从str、float类型转换到int类型
- float(),从int、str类型转换到float类型
- str(),从int、float类型转换到str类型
4.中文编码声明注释
#coding:gbk
注意:要写在开头,标识本py文件的存储格式。python3默认utf-8
5.python的输入:input()函数
- input函数的返回值类型为str,当需要读入整数时,需要用int()进行类型强转
name=input("请输入您的姓名:") #输入的str类型的值直接赋给变量name
age=int(input("请输入您的年龄:") #输入的str类型的值经过int()赋给变量age
6.python中的运算符
- 算术运算符:+、-、*、/、%、**(幂运算符)
print(11//2) #5,整除运算
print(11/2) #5.5,除法运算
print(11%2) #1,求余运算
print(3**2) #9,3的2次方,幂运算
难点:(一正一负整除,向下取整;一正一负取余要公式,余数=被除数-除数*商)
- 赋值运算符:+=、-=、*=、/=、//=、%=
a,b,c=20,30,40 #支持系列赋值,指向不同块内存空间
a=b=c=20 #支持链式赋值,指向同一块内存空间
交换两个变量的值,不需要中间变量(tql)
a,b=b,a
- 比较运算符:>、<、>=、<=、!=、==、is、is not(对象的id比较)
a,b=10,20
print('a>b吗?',a>b) #False
a=10
b=10
print(a==b) #True
print(a is b) #True
list1=[11,22,33,44]
list2=[11,22,33,44]
print(list1==list2) #True
print(list1 is list2) #False
- 布尔运算符:and、or、not、in、not in
s='hello world'
print('w' in s) #True
print('k' not in s) #True
- 位运算符:&、|、<<(左移位运算符:高位溢出舍弃,低位补0)、>>(右移位运算符:低位溢出舍弃,高位补0)
print(4&8) #按位与,0
print(4|8) #按位或,12
print(4<<1) #左移移位,8,相当于乘以2
print(4>>1) #右移一位,2,相当于除以2
- 运算符优先级:算术运算>位运算>比较运算>布尔运算
7.程序的组织结构
- 顺序结构
- 选择结构
#多分支结构
score=int(input('请输入一个成绩'))
#判断
if 90<=score<=100: #在python中可以这样写,tql
print('A级')
elif score>=80 and score<=89:
print('B级')
else:
print('C级')
#条件表达式
num_a=int(input('请输入第一个整数'))
num_b=int(input('请输入第二个整数'))
print(str(num_a)+'大于等于'+str(num_b) if num_a>=num_b else str(num_a)+'小于'+str(num_b))
- 循环结构:while 和 for -in
#如果在循环体中不需要使用到自定义变量,可将自定义变量写为"_"
for _ in range(5):
print('人生苦短,我用Python')
#练习题
#输出100到999之间的水仙花数
#举例:153=1*1*1+5*5*5+3*3*3
for i in range(100,999):
if i==(i//100)**3+((i%100)//10)**3+(i%100%10)**3:
print(i) #最终输出153、370、371、407
8.对象的布尔值
- python一切皆对象,所有对象都有一个布尔值
- 获得对象的布尔值,使用内置函数bool()
- 布尔值为False的对象:Fasle、数值0、None、空字符串、空列表、空元组、空字典、空集
- 其他对象的布尔值均为True
print(bool([])) #空列表,False
print(bool(list())) #空列表,False
print(bool(())) #空元组,False
print(bool(tuple())) #空元组,False
print(bool({})) #空字典,False
print(bool(dict())) #空字典,False
print(bool(set())) #空集合,False
9.pass语句
- 什么都不做,只是一个占位符,用到需要写语句的地方
10.内置函数range()
- 用于生成一个整数序列
- 创建range对象的三种方式
range(stop) #创建一个(0,stop)之间的整数序列,步长为1
range(start,stop) #创建一个(start,stop)之间的整数序列,步长为1
range(start,stop,step) #创建一个(start,stop)之间的整数序列,步长为step
r=range(10)
print(r) #range(0,10)
print(list(r)) #用于查看range对象中的整数序列
- 返回值是一个迭代器对象
- range()函数优点:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start、stop、step,只有当用到range对象时,才会去计算序列中的相关元素
- in与not in判断整数序列中是否存在(不存在)指定的数
11.与else语句搭配使用的三种情况
- 与 if 搭配,if 条件表达式不成立时执行 else
- 与 while 搭配,没有碰到 break 时执行 else
- 与 for 搭配,没有碰到 break 时执行 else
for item in range(3):
pwd=input('请输入密码:')
if pwd=='8888':
print('密码正确')
break
else:
print('密码不正确')
else:
print('对不起,三次密码均输入错误')
12.循环的嵌套
- 输出一个三行四列的矩形
#输出一个三行四列的矩形
for i in range(1,4):
for h in range(1,5):
print('*',end='\t') #不换行输出
print() #打行
- 输出九九乘法表
#输出九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(str(i)+'*'+str(j)+'='+str(i*j),end='\t')
print()
- 二重循环中的 break 和 continue 用于控制本层循环
13.列表
- python中的列表相当于其他语言中的数组
- index():获得列表中指定元素的索引,如果列表中存在N个相同元素,只返回相同元素中的第一个元素的索引;不存在,则抛出ValueError
lst=['hello','world','98','hello']
print(lst.index('hello')) #输出0
#指定起始和结束位置进行查找
print(lst.index('hello',1,4)) #输出3
- 可以正向索引和逆向索引:正向索引从0到N-1,逆向索引从-N到-1,指定索引不存在,抛出IndexError
- 获取列表中的部分数据(切片)
lst=[10,20,30,40,50,60,70,80]
#start=1,stop=6,step=1
print(lst[1:6:1])
print(lst[1:6]) #输出结果同上,默认步长为1
print(lst[1:6:]) #同上
print(lst[1:6:2]) #步长为2
print(lst[:6:2]) #默认start为0
print(lst[1::2]) #默认stop到最后一个元素
#step也可以是负数,此时从start开始往前计算切片
#此时start默认是列表的最后一个元素
#stop默认是列表我的第一个元素
print(lst[::-1]) #相当于列表逆序,tql
- 遍历列表中的对象
lst=[90,80,70,60,50,40,30,20,10]
for item in lst:
print(item)
- 列表元素的增加操作:append()、extend()、insert()、切片(覆盖)
lst=[]
lst.append(100) #在列表的末尾添加一个元素
lst2=[90,80]
lst.extend(lst2) #在列表的末尾至少添加一个元素,可以用于两个列表合并
lst.insert(1,30) #在列表的任意位置添加一个元素
lst3=[10,20,30,40]
lst[1:]=lst3 #把lst从第二个元素到最后一个元素替换为了lst3
- 列表元素的删除操作:remove()、pop()、切片、clear()、del
lst=[10,20,30,40,50,60,30]
lst.remove(30) #从列表中移除一个元素,如果有重复元素只移第一个
#lst.remove(100) #不存在,抛出ValueError异常
lst.pop(1) #删除一个指定索引位置上的元素,指定索引不存在,抛出IndexError,不指定默认删除列表中最后一个元素
#切片操作,删除至少一个元素,将产生一个新的列表对象
new_lst=lst[1:3]
#不产生新的列表对象,而是删除原列表中的内容
lst[1:3]=[]
#clear()清除列表
lst.clear()
#del删除列表
del lst