測試題的基礎知識點總結
1.循環求和
for
循環步長(range(2,101,2)
)
while
循環+條件判斷(i%2==0
)
生成器表達式(sum(i for i in range )
)
所以:sum(range(1,101,2))
(奇數和)和sum+=1
(應加i
)
2.字符串切片
拼接:"Py"+"thon"[1:3]
為"Py"+"th"="Python"
切片規則:[start:end]
前閉后開
3.列表排序
A.sort(reverse=True)
:降序排列輸出[8,5,2,1]
4.變量作用域
局部變量在函數結束后銷毀
5.遞歸函數
遞歸計算:recursive(5)=5*recursive(4)//2
最終輸出5
過程:5*(4*(3*(2*(1*1//2)//2)//2)//2
6.列表創建
正確:列表推導式[x for x in range(1,6)]
字符串轉列表:list('12345')
→['1','2','3','4','5']
(需再轉int
)
所以list range
(應為list(range(1,6))
)
7.異常類型
索引越界:[1,2,3][3]
除零錯誤:1/0
參數錯誤:len('abc',11)
(len
只接受1參數)
類型錯誤:len(None)
(None
無長度)
8.列表推導式嵌套循環
[x*y for x in list 1 for y in list[2]
→笛卡爾積
9.斐波那契遞歸
func(4)=func(3)+func(2)=(func(2)+func(1))+(func(1)+func(0))=(1+1)+(1+0)=3
終止條件是n<=1
時返回n
10.全局變量
global x
是聲明全局變量
bar()
中調用foo()
修改全局x
最后輸出15
11.條件判斷
ifx:
中x
可為任意對象(空值False
,非空True
)
12.對象引用
a=[1,2]
和b=[1,2]
是兩個獨立對象
13.列表方法
remove(item)
按值刪除元素
按索引刪除用pop(index)
或dellist[index]
14.列表切片
15.分支結構
特點:多個elif
、else
在最后、僅執行一個分支,前兩項和最后一項
16.類型轉換
17.遞歸終止條件
缺少終止條件會無限遞歸:deff(n): return n*f(n1)
(無n==0
判斷)
直接調用自身:deff(n): return f(n)
18.循環控制
break
:跳出循環
continue
:跳過本次迭代
return
:跳出函數(間接跳出循環)
19.切片規則
list[1:3]
返回索引1到2的元素→錯誤(索引3不包含)
20.變量作用域
函數內部變量默認局部→錯誤(需global
聲明全局變量)
21.列表元素類型
列表可混合類型→正確(如[1,"a",True]
)
22.is
和==
is
比較內存地址,==
比較值
23.字符串不可變
字符串創建后不可修改(修改需創建新字符串)
24.動態類型
Python變量無需聲明類型
25.列表元素訪問
索引list[index]
、list.pop(index)
26.列表操作
合法:+
(拼接)、*
(重復)、索引訪問
非法:``(列表不支持減法)
27.基本數據類型
正確:float
、str
錯誤:array
(非基礎類型)、“數據類型”(無效)
28.變量本質
變量是對象的引用
不可變對象(如元組)無法修改
29.遞歸生成列表
func(3)=func(2)+[3]=(func(1)+[2])+[3]=([1]+[2])+[3]=[1,2,3]
30.遞歸特性
必須有終止條件;可能導致棧溢出;可轉化為循環
31.作用域規則
全局變量函數內可直接訪問;global
修改全局變量;局部變量函數外不可訪問
32.列表原地修改
原地修改方法:append()
,extend()
,insert()
非原地:lst=lst+[1]
(創建新列表)
33.局部變量優先級
func()
中x
是局部變量
輸出[3,4,5]
(局部)和[1,2]
(全局)
34.局部變量聲明順序
func()
中print(x)
在x=20
前
所以出現UnboundLocalError
(未定義)
35.多重賦值
c,d,a,b=d,b,a,c
等價于c=4,d=2,a=1,b=3
36.嵌套列表扁平化
遍歷子列表并合并 flatten([[1,2],[3,4]])→[1,2,3,4]
37.函數參數傳遞
列表傳參時,lst=lst+[4]
創建新對象 original
不變,modified
為[1,2,3,4]
38.列表副本
double()
返回新列表 nums
不變,result
為[2,4,6]
46.多返回值
函數返回元組(a+b,a*b)
sum=7,product=12
47.函數特性
函數可以無參數
48.階乘遞歸
factorial(3)=3*factorial(2)=3*2*factorial(1)=3*2*1*1=6
49.列表可變性
函數內修改列表影響原對象 my_list
變為[1,2,3,4]
50.嵌套列表生成
二維列表:[[i+j for j in range(2)] for i in range(3)] 輸出 [[0,1],[1,2],[2,3]]
51.循環中修改列表
pop(i)
后列表長度變化所以i
只在非刪除時遞增,輸出[1,3,5]
52.列表交集去重
求交集并去重:intersect(a,b)=[2,3,4]
所以sum=9
53.字符串反轉
split()
切分單詞,insert(0,word)
倒序插入,輸出"learn to fun is Python"
54.字典計數
統計元音頻率,e出現4次(Hello和test),o出現3次,總和7
55.字符串處理邏輯
i%2==0
,輸出"hello world this is a test"
56.棧操作模擬
peek
輸出棧頂,依次輸出2,2,4所以棧最終為[1,2,4]
→sum=7
57.嵌套列表計數
遞歸統計嵌套列表中2
的出現次數→結果為4
58.字典合并
合并字典并累加相同鍵,merged={'a':1,'b':5,'c':4}
→1+5+4=10
59.等差數列判斷
檢查相鄰元素差是否為1 [5,6,7,8]
60.累加和列表
cumulative_sum([3,1,4,1,5])→[3,4,8,9,14]
61.字符計數
統計字母頻率→'a'
出現5次(abracadabra
),'z'
未出現→結果5
62.模塊知識
math
模塊無round()
方法(Python內置函數)→錯誤說法
63.迭代器協議
可迭代對象,如列表,需用iter()
轉迭代器才支持next()
64.字典淺拷貝
b=a.copy()
創建副本,所以修改b不影響a,a[1]仍為'a'
65.集合操作異常
s.remove(2)
返回None
,s.discard(None)
無效,所以s={1,3}
這次考試徹底暴露了我在變量作用域上的認知漏洞,明明背熟了global關鍵字,實戰時還是分不清函數里修改的到底該是全局變量還是局部;數據結構操作更是重災區,列表切片總手滑多切一位,字典合并時傻傻分不清賦值和淺拷貝的區別,集合運算差點把&
和|
搞反。流程控制雖然基礎,但for
循環里刪列表元素直接導致索引崩盤,if-elif-else分支不能漏寫。最頭疼的是遞歸函數,終止條件如果少一行就無限循環,還差點忘了遞歸層數太深會爆棧。我現在終于懂了:寫代碼不是拼手速,而是得時刻警惕邊界異常,索引len-1,改容器前先問自己會不會影響循環。所以下次刷題前,我決定先畫三張圖:作用域、對象引用、遞歸調用樹。