Python 快速入门

0.前景知识🧀

本教程适用于学过c/cpp语言者快速入门Python

0.1c语言变量的数据类型是事先定义的,而python是后天接受的,即python会在运行时自动识别变量类型

0.2

1
2
3
x=1
y=2
x,y=y,x # 类比swap(x,y)

0.3

字符串用单引号双引号都可(3个单/双引号表示长字符串–>解决多换行问题)

1
2
3
4
5
6
7
8
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=input("请输入a:") 终端显示 请输入a: 后,可输入 $a$

  • 搭配强制类型转换:类型(变量) 这里和 cpp 的强转有区别

    a=int(input())

2.数字类型

  • 引入库 import random

    • a=random.randint(1,100) 生成从 1 到 100 的随机数
  • 引入库 import decimal

    1
    2
    3
    4
    5
    6
    7
    8
      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 中整数除法(取整)

    1
    2
    print(3/2) 		# 1.5
    print(3//2) # 1
  • abs() 绝对值 $or$ 模

    1
    2
    print(abs(-0.33))# 0.33
    print(abs(1+2j)) # 2.23606797749979
  • $x^y$ pow()** 两种

    1
    2
    3
    4
    5
    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$
    
  • False

    `False` 就是 $0$
    

4.逻辑运算 (与 cpp 逻辑运算类比)

  • and 类比 &&
  • or 类比 ||
  • not 类比 !

注: python 可以对任何类型进行真值运算,按照 短路求值 原则 ( 优先级:and > or > not

1
2
3
4
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

1
2
3
4
5
6
7
8
9
# 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.循环 ( breakcontinuecpp 用法相同 )

  • while

    1
    2
    3
    4
    5
    6
    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)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      	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.列表

      ```python
      list=[1,2,3,4,5,"上山打老虎"]
      for i in list:
      print(i,end=' ')
      print(len(list)) # 6

      print(list[-3]) # 4 下标是负数代表倒数第几个元素
  • 切片🗡️

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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
  • 增删✏️

1
2
3
4
5
6
7
8
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
  • 常用函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
  • 常见操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
  • 列表推导式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
  • 易错点🚨

    • 潜拷贝 (只能拷贝最外面一层,用于一维拷贝)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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
    • 深拷贝
    1
    2
    3
    4
    import copy # 导入 copy 模块

    matrix=[[1,2,3],[4,5,6],[7,8,9]]
    x=copy.deepcopy(matrix)

8.元组

简单来说就是不可变(赋值)列表

1
2
a=(1,2,3)
b=(1,) # 逗号不能省略,否则会认为 b 是 int 类型

9.字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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.字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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.集合

1
2
3
4
5
6
7
8
9
10
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.函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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
  • 简单闭包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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