更好的阅读体验?
0.前景知识🧀
本教程适用于学过c/cpp语言者快速入门Python
0.1c语言变量的数据类型是事先定义的,而python是后天接受的,即python会在运行时自动识别变量类型
0.2
x=1
y=2
x,y=y,x # 类比swap(x,y)
0.3
字符串用单引号双引号都可(3个单/双引号表示长字符串–>解决多换行问题)
print('Life is short,you need Python')
print("Life is short,you need Python") # 自带末尾换行\n
print('''a
a
a
a
b''')
print("hello world\n"*20) # 输出二十行相同字符串
0.4 缩进是命📢
缩进代表代码块
1.输入
a=input()
给
a
a
a 赋值
a=input("请输入a:")
终端显示 请输入a: 后,可输入
a
a
a
-
搭配强制类型转换:类型(变量) 这里和
cpp
的强转有区别a=int(input())
2.数字类型
-
引入库
import random
a=random.randint(1,100)
生成从 1 到 100 的随机数
-
引入库
import decimal
import decimal a=decimal.Decimal('0.1') b=decimal.Decimal('0.2') c=decimal.Decimal('0.3') print(c==a+b)//输出true
-
a=1+2j
( 以浮点数的形式 )print(a)//输出(1+2j) print(a.real)//1.0 实部 print(a.imag)//2.0 虚部
-
地板除 - 类比
cpp
中整数除法(取整)print(3/2) # 1.5 print(3//2) # 1
-
abs()
绝对值 o r or or 模print(abs(-0.33))# 0.33 print(abs(1+2j)) # 2.23606797749979
-
x y x^y xy
pow()
和**
两种x=2 y=3 print(x**y) # 8 print(pow(x,y)) # 8 print(pow(x,y,5)) # 2的3次方对5取余
3.布尔类型 bool()
-
True
True
就是 1 1 1 -
False
False
就是 0 0 0
4.逻辑运算 (与 cpp
逻辑运算类比)
and
类比&&
or
类比||
not
类比!
注: python 可以对任何类型进行真值运算,按照 短路求值 原则 ( 优先级:and > or > not
)
print(2 and 3) # 3
print('123' and '456') # 456
print(0 or '123') # 123
print(0 or 1 and not 2) # 0
5. if
# 2<3
if 2>3 :
print('2>3')
elif 2==3 :
print('2=3')
else:
print('2<3')
print('2<3') if 2<3 else print('2>3') # 2<3
6.循环 ( break
和 continue
与 cpp
用法相同 )
-
while
a=1; while a<10: print(a) a+=1 else: print(a) # 10,当while后面为假时,else执行一次(如果在while里break了,就不会执行这个else)
-
for
类比cpp
的范围for
循环先了解一下
range()
range(start, stop, step)
-
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
-
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 左闭右开
-
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
for i in range(1,10): # 1 2 3 4 5 6 7 8 9 print(i) for i in range(1,10,2):# 1 3 5 7 9 print(i)
-
7.列表
list=[1,2,3,4,5,"上山打老虎"]
for i in list:
print(i,end=' ')
print(len(list)) # 6
print(list[-3]) # 4 下标是负数代表倒数第几个元素
- 切片🗡️
print(list[3:6]) # 4 5 上山打老虎 左闭右开
print(list[:3]) # 1, 2, 3
print(list[3:]) # 4, 5, 上山打老虎
print(list[::-2]) # 上山打老虎, 4, 2
list[len(list):]=['x','y','z'] # 在末尾添加元素
print(list) # 1, 2, 3, 4, 5, 上山打老虎, x, y, z
list[3:]=['x','y','z']
print(list) # 1, 2, 3, x, y, z
- 增删✏️
list.remove('上山打老虎') # 删除指定元素
print(list) # 1, 2, 3, 4, 5
list.insert(2,'三') # 下标2处添加新元素'三'
print(list) # 1, 2, 三, 3, 4, 5
list.pop(2) # 弹出指定下标元素,并返回该元素
print(list) # 1, 2, 3, 4, 5
- 常用函数
list = [6,8,7,1,2,5,3,2,8,2]
list.sort() # 快排
print(list) # 1, 2, 2, 2, 3, 5, 6, 7, 8, 8
list.reverse() # 反转
print(list) # 8, 8, 7, 6, 5, 3, 2, 2, 2, 1
nums1=list[5:] # 切片赋值
print(nums1) # 3, 2, 2, 2, 1
list[list.index(7)]=0 # 更改某个特定元素 index() 找出某元素的第一个下标
print(list) # 8, 8, 0, 6, 5, 3, 2, 2, 2, 1
print(list.count(8)) # 2
- 常见操作
a=[1,2,3]
b=[4,5,6]
c=a+b
print(c) # 1, 2, 3, 4, 5, 6
matrix=[[1,2,3],[4,5,6],[7,8,9]]
for i in matrix:
for j in i:
print(j,end=' ')
print()
# 1 2 3
# 4 5 6
# 7 8 9
print(matrix[1][1]) # 5
- 列表推导式
list=[1,2,3,4,5]
list=[i*2 for i in list]
print(list) # 2, 4, 6, 8, 10
matrix=[[1,2,3],[4,5,6],[7,8,9]]
dia=[matrix[i][i] for i in range(len(matrix))]
print(dia) # 1, 5, 9
MATRIX=[i for row in matrix for i in row] # 嵌套循环
print(MATRIX) # 1, 2, 3, 4, 5, 6, 7, 8, 9
a='abc'
a=[i*2 for i in a]
print(a) # aa, bb, cc
even=[i for i in range(10) if i%2==0]
print(even) # 0, 2, 4, 6, 8
a=['a1','a2','a3','bc','de']
b=[i for i in a if i[0]=='a']
print(b) # a1, a2, a3
a=[1,2,3]
b=[4,5,6]
c=[x+y for x in a for y in b] # 嵌套循环 (就是把循环压到一行)
print(c) # 5, 6, 7, 6, 7, 8, 7, 8, 9
-
易错点🚨
- 潜拷贝 (只能拷贝最外面一层,用于一维拷贝)
list=[1,1,1,1,1] nums=list # 此时不是赋值,而是引用 nums[0]=2 # 直接修改了list print(list) # 2 1 1 1 1 # 正确做法:切片/copy() nums=list[:] # nums=list.copy() nums[0]=2 print(nums) # 2, 1, 1, 1, 1 print(list) # 1, 1, 1, 1, 1
- 深拷贝
import copy # 导入 copy 模块 matrix=[[1,2,3],[4,5,6],[7,8,9]] x=copy.deepcopy(matrix)
8.元组
简单来说就是不可变(赋值)列表
a=(1,2,3)
b=(1,) # 逗号不能省略,否则会认为 b 是 int 类型
9.字符串
x="上海自来水来自海上"
x.count('海') # 2
x.count('海',0,3) # 1
x.find('海') # 1
x.rfind('海') # 7 从右向左 找不到返回-1
x=x.replace('上海','江苏')
print(x) # 江苏自来水来自海上
# f-字符串 语法糖
print(f'输出:{x}') #输出:江苏自来水来自海上
# 修改字符串中某个元素
y='一二三'
y=list(y) # 先转换成列表
y[0]='三'
y=''.join(y) # 再变成字符串
print(y) # 三二三
函数太多了 Python 字符串 | 菜鸟教程
10.字典
a={'a':'A','b':'B'}
b=dict(a='A',b='B')
print(a==b) # True
a.pop('a') # 删
print(a) # {'b': 'B'}
del b['b'] # 删
print(b) # {'a': 'A'}
c={'a':'A','b':'B','c':'C','d':'D'}
keys=c.keys()
values=c.values()
items=c.items()
#这三者改一个三个都会跟着变
print(keys) # (['a', 'b', 'c', 'd'])
print(values) # (['A', 'B', 'C', 'D'])
print(items) # ([('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D')])
#字典也能嵌套
d={'a':{'b':'c'},'d':{'e':'f'}}
print(d['a']) # {'b': 'c'}
print(d['d']['e']) # f
e={y:x for x,y in c.items()}
print(e) # {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
11.集合
a={'a','b','c','d'}
b={i for i in a}
c=set('abcd') # 可迭代对象
print(a==b) # True
print(c) # {'b', 'c', 'd', 'a'} 随机,因为集合是无序的
print('a' in c) # True
d=[1,1,1,2,2,3]
print(len(d)==len(set(d))) # False 判断是否有重复元素
很多函数 集合 | 菜鸟教程
12.函数
def gcd(a,b):
return a if b==0 else gcd(b,a%b)
print(gcd(6,21)) # 3
def add(a,b,c):
return ''.join(a,b,c)
print(add(b='1',a='2',c='3')) # 213 参数指定名字的话,可以忽视顺序 (位置参数必须在关键字参数之前)
def more(*x): # 可传入任意组参数,以元组的形式存储 (收集参数)
print(x)
print(x[1])
return x[0],x[1],x[2] # 可返回多组数据
print(more('aa','bb','cc','dd'))
a,b,c=more('11','22','33')
print(a,b,c) # 11 22 33
def Dic(**dic): # 收集字典参数
print(dic)
Dic(a='A',b='B',c='C',d='d') # 'a': 'A', 'b': 'B', 'c': 'C', 'd': 'd'
e=('aa','bb','cc')
print(more(*e)) # ('aa', 'bb', 'cc') 用*解包
x=10
def ChangeX():
global x # 调用全局变量x
x=1000 # 此时修改x,改的是全局变量的x
ChangeX()
print(x) # 1000
-
简单闭包
def power(exp): def exp_of(base): return base**exp return exp_of square=power(2) cube=power(3) print(square(3)) # 9 print(cube(2)) # 8 def outer(): x=0 y=0 def inner(x1,y1): nonlocal x,y x+=x1 y+=y1 print(f"现在的x={x},y={y}") return inner move=outer() move(1,2) #现在的x=1,y=2 move(-2,-5) # 现在的x=-1,y=-3