Python学习日志(2022-7-11):
学习内容:
1.数字类型
python有三种数字类型:整数,浮点数和复数。
在python中浮点数的计算可能没有那么精确。如
>>> 0.1+0.2
0.30000000000000004
>>> 0.3 == 0.1+0.2
False
>>>
这时想要获得一个准确的值就要通过decimal实例化一个对象,如
>>> import decimal
>>> a = decimal.Decimal('0.1')
>>> b = decimal.Decimal('0.2')//0.1与0.2都是字符串
>>> print(a+b)
0.3
对于复数,赋给变量是以浮点数的形式存放。
>>> x = 1 + 2j
>>> print(x)
(1+2j)
>>> x.real
1.0
>>> x.imag
2.0
>>> pow(2,5)
32
>>> abs(3+4j)
5.0
>>> 5/3
1.6666666666666667
>>> 5//3
1
>>> -5//3
-2
>>>
2.布尔类型
bool()函数大部分时候都是true,为False的情况屈指可数:
1.定义为False的对象
None和Flase
>>> bool('false')//字符串只要不为空都是ture
True
>>> bool(False)
False
2.值为0的数字类型
0 、0.0 、0j 、Decimal(0) 、Fraction(0,1)
>>> bool(5)
True
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(0j)
False
3.空的序列和集合
3.逻辑运算符
and,or,not也即布尔的与或非,但在逻辑运算符中还会出现短路逻辑:
>>> 3 and 4//这里由于3为ture,需要继续确定4的布尔类型才能确定式子的值,故为4
4
>>> 0 and 4//这里由于0为flase直接确定了式子的值,故为0
0
>>> 3 or 4//这里由于3为ture直接确定了式子的值故为3
3
>>> 0 or 4
4
>>> (not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
4
也即输出影响结果的关键值。同时运算符还有优先级,在运算时要查表。
4.分支结构
可以通过下面的例子学习
counts = 4
while(counts):
counts = counts - 1
score = input("请输入你的分数:")
score = int(score)
if 0<=score<=60:
print("建议remake")
elif 60<score<=80:
print("没关系,下次继续努力")
elif 80<score<=95:
print("扎布多德勒")
elif 95<score<=100:
print("不需要这么卷的人,建议remake")
else:
print("分数打错了哦")
>>> a = 3
>>> b = 5
>>> small = a if a<b else b
>>> print(small)
3
5.循环
可以从下面的例子学习
i=0
while i<10:
i+=1
if i%2 == 0:
continue//跳出本轮循环
print(i)
1
3
5
7
9
while也可以与else配合通过break检测跳出循环的状况。
i = 0
while i<10:
j=1
while j<=i:
print(i , "*" , j , "=" , i*j, end=" ")
j+=1
print()
i+=1
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
>>> for i in range(1,11,2):
print(i)
1
3
5
7
9
>>> for i in range(11,1,-2):
print(i)
11
9
7
5
3
for n in range(1,100):
for x in range(2,n):
if(n%x == 0):
print(n,"=",x,"*",n//x)
break
else:
print(n,"是一个素数")
6.列表
可以从如下代码学习
>>> rhyme = ['小',"黑","子","show show way"]
>>> for each in rhyme:
print(each)
小
黑
子
show show way
>>> rhyme[-1]
'show show way'
//列表切片
>>> rhyme[:3]
['小', '黑', '子']
>>> rhyme[3:]
['show show way']
>>> rhyme[0:3:2]
['小', '子']
>>> rhyme[::-1]
['show show way', '子', '黑', '小']
>>> heros = ['迪迦','盖亚','戴拿']
>>> heros.append('高斯')
>>> heros
['迪迦','盖亚','戴拿', '高斯']
>>> heros.extend(['赛文','佐菲'])
>>> heros
['迪迦','盖亚','戴拿', '高斯', '赛文','佐菲']
>>> heros.remove('赛文')
>>> heros
['迪迦','盖亚','戴拿', '高斯', '佐菲']
>>> heros.pop(1)
'盖亚'
>>> heros
['迪迦', '盖亚','戴拿', '高斯', '佐菲']
>>> heros.clear()
>>> heros
[]
>>> heros=['迪迦','盖亚','戴拿', '高斯', '赛文','佐菲']
>>> heros[4]='赛罗'
>>> heros
['迪迦','盖亚','戴拿', '高斯', '赛罗','佐菲' ]
>>> heros[3:]//切片包括前面的3
['高斯', '赛罗','佐菲']
>>> heros[:3]//切片不包括后面的3
['迪迦','盖亚','戴拿']
>>> s=[1,2,3,4]
>>> s[len(s):]=[5,6]//切片
>>> s
[1, 2, 3, 4, 5, 6]
>>> s=[1,3,4,5]
>>> s.insert(1,2)
>>> s
[1, 2, 3, 4, 5]
>>> s.insert(0,0)
>>> s.insert(len(s),6)
>>> s
[0, 1, 2, 3, 4, 5, 6]
>>> num=[8,4,9,5,1,7,8,4]
>>> num.sort()//排序
>>> num
[1, 4, 4, 5, 7, 8, 8, 9]
>>> num.reverse()
>>> num
[9, 8, 8, 7, 5, 4, 4, 1]
>>> num=[8,4,9,5,1,7,8,4]
>>> num.sort(reverse=True)
>>> num
[9, 8, 8, 7, 5, 4, 4, 1]
>>> num=[8,4,9,5,1,7,8,4]
>>> num.count(4)//4出现的次数
2
>>> num.index(4)//索引第一个4的下标
1
>>> num.index(4,2,8)//查找在2-8内(包括2,不包括8)
7
>>> num[num.index(5)]=11//如果元素较多,不知道下标,可使用此方法对元素进行操作
>>> num
[8, 4, 9, 11, 1, 7, 8, 4]
>>> num1=num.copy()
>>> num1
[8, 4, 9, 11, 1, 7, 8, 4]
>>> s=[1,2,3]
>>> t=[4,5,6]
>>> s+t
[1, 2, 3, 4, 5, 6]
>>> s*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> matrix=[[1,2,3],[4,5,6],[7,8,9]]//二维列表
>>> for i in matrix:
for each in i:
print(each,end=" ")
print()
1 2 3
4 5 6
7 8 9
>>> A=[1,1,1]
>>> for i in range(3):
A[i] = [1]*3
>>> A
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]//快速创建二维列表,A[i]中的元素替换成列表。
>>> x=[1,2,3]
>>> y=x//只是将y牵引到与x同一个标签,x与y指向同一个列表
>>> x[1]=4
>>> x
[1, 4, 3]
>>> y
[1, 4, 3]
>>> x=[1,2,3]
>>> y=x.copy()//复制新的列表
>>> x[1]=4
>>> x
[1, 4, 3]
>>> y
[1, 2, 3]
>>> A
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
>>> B=A
>>> B
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
>>> A[1][1]=2
>>> A
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
>>> B
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
>>> import copy
>>> B=copy.deepcopy(A)//深拷贝,拷贝了列表所有的子对象,适用于嵌套列表,而A.cpoy()则不适合。
>>> B
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
>>> A[2][2]=3
>>> A
[[1, 1, 1], [1, 2, 1], [1, 1, 3]]
>>> B
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
>>>
>>> a=[1,2,3,4,5]
>>> for i in range(len(a)):
a[i]=a[i]*2
>>> a
[2, 4, 6, 8, 10]
>>> a=[i*2 for i in a]//列表推导式
>>> a
[4, 8, 12, 16, 20]
>>> a=[i for i in range(10)]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[i+1 for i in range(10)]//注意range(10)是0-9而不是1-10
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a = [f*2 for f in "love"]//字符串同样没问题
>>> a
['ll', 'oo', 'vv', 'ee']
>>> a
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> b=[row[1] for row in a]
>>> b
[2, 2, 2]
>>> a=[[1,2,3],[4,5,6],[7,8,9]]
>>> b=[a[i][i] for i in range(len(a))]
>>> b
[1, 5, 9]
>>> s = [[0]*3 for i in range(3)]//使用列表推导式能更为快速的创建二维列表
>>> s
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
b=[i for i in range(10) if i%2==0]
>>> b
[0, 2, 4, 6, 8]
>>> gword = [w for w in words if w[0]=='g']
>>> gword
['great', 'gg', 'gdp']
>>> c=[]
>>> for row in a:
for col in row:
c.append(col)
>>> c
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[[1,2,3],[4,5,6,],[7,8,9]]
>>> b=[col for row in a for col in row]//前面的是外层循环,后面的是内层循环
>>> b
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[x+y for x in 'love' for y in '1314']
>>> a
['l1', 'l3', 'l1', 'l4', 'o1', 'o3', 'o1', 'o4', 'v1', 'v3', 'v1', 'v4', 'e1', 'e3', 'e1', 'e4']
>>> [[x,y] for x in range(10) if x%2 == 0 for y in range(10) if y%3 == 0]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]