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

浙公网安备 33010602011771号