Loading

Python 学习笔记

安利一个官方的 Python 学习网站,感觉很不错的样子呢。有些部分懒得写了,部分 copy 了该网站的内容 qwq
传送门

都说了是「笔记」,所以基本上只有 summary。


1 走进 Python

\(1.1\) 注释

使用 # the code 注释掉后面部分。

\(1.2\) 直接当成计算器使用

>>> 3 + 2
5
>>> 6 * 6
36
>>> 2 ** 7 # ** 表示幂运算
128
>>> 8 ^ 7 # ^ 依然是异或的意思
15

\(1.3\) 声明变量

在 Python 中似乎不需要指出变量类型,直接

>>> a = 2
>>> a
2

就可以了。

\(1.4\) 字符串

Python 也可以操作字符串。使用单引号('...'),双引号("...")都可以用来表示这是一个字符串。
反斜杠 \ 可以用来转义。

>>> 'spam eggs'
'spam eggs'
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"

字符串可以拼接。

>>> 3 * 'un' + 'ium'
'unununium'

和 C++ 中一样,字符串类似于一个数组,可以用 下标 进行访问。下标也可以是负数,这样就会从右往左数。

>>> word = 'Python'
>>> word[0]
'P'
>>> word[5]
'n'
>>> word[-1]
'n'

字符串还支持 切片,可以获取子字符串,注意范围左闭右开。
切片的索引有默认值。省略开始索引时默认为 \(0\),省略结束索引时默认为到字符串的结束。

>>> word[0:2]
'Py'
>>> word[2:5]
'tho'

用函数 len() 可以获取字符串的长度。Python 中的字符串是 只读 的。

\(1.5\) 列表

C++ 党可以把这玩意儿和数组类比。

>>> array = [1, 2, 3, 4, 7]
>>> array
[1, 2, 3, 4, 7]

和字符串一样,列表支持 下标访问和切片

>>> array[3]
4
>>> array[2:4]
[3, 4]
>>> array[3:]
[4, 7]

\(\texttt{Attention}\) 所有的切片操作都返回一个 新列表,这个新列表包含所需要的元素。这也使得以下两个代码块的执行效果不同。

  • Code A
>>> ak = [1, 3, 5, 7]
>>> for i in ak[:]: # for 是循环结构
	if i == 3: ak.append(3) # append 代表在末尾加入指定元素
>>> ak
[1, 3, 5, 7, 3]
  • Code B
>>> for i in ak:
	if i == 3: ak.append(3)

不出意外的话,Code B 中的代码会进入死循环。

与字符串不同,列表是 可以修改的。给切片赋值也是可以的,这样甚至可以改变列表大小,或者把列表整个清空。

>>> array = [2, 3, 5, 7, 11]
>>> array[1:3] = []
>>> array
[2, 7, 11]

可以用函数 len() 获取列表长度。

列表可以嵌套。这个有点像 C++ 里面的高维数组。

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

2 流程控制

\(2.1\) if 语句(选择结构)

使用 if 来表示判断。else if 使用 elif 缩写。

>>> a = 1
>>> if a < 1: print("a < 1")
elif a == 1: print("a = 1")
else: print("a > 1")
a = 1

\(2.2\) while 语句(循环结构)

while 后边接上执行循环的条件。

>>> a = 1
>>> while a < 10:
	print(a)
	a = a + 1

1
2
3
4
5
6
7
8
9

\(2.3\) for 语句(循环结构)

Python 中 for 的用法比较多样。它的用处在教程中被定义为「对任意序列进行迭代(例如列表或字符串),条目的迭代顺序与它们在序列中出现的顺序一致」。
比如说,我们可以对一个存储了若干字符串的列表进行迭代:

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
        print(w, len(w))

cat 3
window 6
defenestrate 12

我们也可以循环一个中规中矩的数字列表。

>>> array = [3, 6, 9, 12]
>>> sum = 0
>>> Sum = 0
>>> for i in array:
	Sum = Sum + i

>>> Sum
30

当然你也可以单纯地循环一个字符串。

>>> S = "iakioi"
>>> for i in S:
	print(i)

i
a
k
i
o
i

如果在循环内需要修改序列中的值(比如重复某些选中的元素),建议先拷贝一份副本,具体请见上面的 \(\texttt{Attention}\) 部分。

\(2.4\) range() 函数

range() 会返回一个数字序列。它生成的对象个人认为可以看成一个列表(但官方教程说并不是)。

具体使用方法我们通过举例说明。range(5) 会生成 \(5\) 个值,并且是以合法的索引生成一个长度为 \(5\) 的序列 \([0, 1, 2, 3, 4]\)

然而上面的那个实际上是个简略版写法。你可以规定起止点和步长。range(1, 4) 表示 \([1, 2, 3]\)range(-10, -100, -30) 表示 \([-10, -40, -70]\)

  • 综合运用例子:
>>> a = ["qwq", "qaq", "awa"]
>>> for i in range(len(a)):
	print(i, a[i])

0 qwq
1 qaq
2 awa

\(2.5\) break, continue 和 pass

和 C++ 类似:break 可用于跳出最近的一个循环,continue 表示开始下一次迭代。

pass 语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。

\(\texttt{Attention}\) 循环中的 else 子句使用:

循环语句可能带有一个 else 子句;它会在循环遍历完列表 (使用 for) 或是在条件变为假 (使用 while) 的时候被执行,但是不会在循环被 break 语句终止时被执行

比如你可以这么写:

>>> for i in range(2,11):
	for j in range(2, i):
		if i % j == 0:
			print(i, "isn't a prime number.")
			break
	else:
		print(i, "is a prime number.")
	
2 is a prime number.
3 is a prime number.
4 isn't a prime number.
5 is a prime number.
6 isn't a prime number.
7 is a prime number.
8 isn't a prime number.
9 isn't a prime number.
10 isn't a prime number.

而不必再添加一个 flag 作为辅助变量:

>>> flag = 0
>>> for i in range(2, 11):
	flag = 0
	for j in range(2, i):
		if i % j == 0:
			print(i, "isn't a prime number.")
			flag = 1
			break
	if not flag: print(i, "is a prime number.")
	
2 is a prime number.
3 is a prime number.
4 isn't a prime number.
5 is a prime number.
6 isn't a prime number.
7 is a prime number.
8 isn't a prime number.
9 isn't a prime number.
10 isn't a prime number.

\(2.6\) 函数

为了方便大家的 coding,函数应运而生。下面是一个简单的函数例子:

>>> def fib(n):
	if n == 1: return 1
	elif n == 2: return 2
	else: return fib(n - 1) + fib(n - 2)

>>> fib(3)
3
>>> fib(4)
5
>>> fib(5)
8

习题:计算其时间复杂度(bushi)

关键字 def 可以引入一个函数。它必须后跟函数名称和带括号的形式参数列表。构成函数体的语句从下一行开始,并且必须缩进。
与 C++ 不同,你并不需要指定函数的类型是否有返回值。直接用 def 声明就可以了。

  • 函数的参数可以指定默认值。这样创建的函数,可以用比定义时允许的更少的参数调用。例如:
>>> def exa(a, b = 1, c = 2):
	print(a * b * c)

>>> exa(3)
6
>>> exa(3, 2)
12
>>> exa(2, 3, 3)
18

请注意,默认值是在函数定义处计算的。比如:

>>> i = 3
>>> def test(arg = i):
	print(arg)

>>> i = 4
>>> test()
3

强调:默认值只会在定义时被执行一次。

  • 函数内部变量不影响外部变量。例如:
>>> a = 3
>>> def test():
	a = 5
	print(a)

>>> a
3
>>> test()
5
>>> a
3
posted @ 2021-02-07 23:01  Sqrtyz  阅读(198)  评论(0)    收藏  举报