《Python程序設計》
green表示搞懂
黃色表示讀懂到懂
紅色表示不懂
18題題目有誤
較難的題:10,15,26,34,45,46,63,64,83.95
填空題100題(每題1分,共100分)
1、Python安裝擴展庫常用的是_______工具 (pip)
2、在Python中__________表示空類型 (None)
3、列表、元組、字符串是Python的_________(有序?無序)序列 (有序)
4、查看變量類型的Python內置函數是________________ (type())
5、查看變量內存地址的Python內置函數是_________________ (id())
6、以3為實部4為虛部,Python復數的表達形式為___________或________ (3+4j,3+4J)
7、Python運算符中用來計算整商的是_________ (//)
8、Python運算符中用來計算集合並集的是_______ (|)
9、表達式[1, 2, 3]*3的執行結果為______________________ ([1,2,3,1,2,3,1,2,3])
#相乘及相加,小學畢業都會。
10、語句x = 3==3, 5執行結束后,變量x的值為_____________ )((True,5))
#優先級 比較>賦值
11、已知 x = 3,那么執行語句 x += 6 之后,x的值為_______________ (9)
12、已知 x = 3,並且id(x)的返回值為 496103280,那么執行語句 x += 6 之后,表達式 id(x) == 496103280 的值為___________ (False)
13、已知 x = 3,那么執行語句 x *= 6 之后,x的值為________________(18)
14、表達式“[3] in [1, 2, 3, 4]”的值為________________ (False)
15、列表對象的sort()方法用來對列表元素進行原地排序,該函數返回值為 (None)
#只用在list,無返回值。sorted和sort區別 ;sorted可以用在可迭代的類型,有返回值; 返回值為None的幾種情況
#1,get()根據key獲取對應的value,如果key不存在則返回None
2,列表對象的sort()方法用來對列表元素進行原地排序,該函數返回值為 (None)
16、假設列表對象aList的值為[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那么切片aList[3:7]得到的值是______________________ ([6,7,9,11])
17、任意長度的Python列表、元組和字符串中最后一個元素的下標為________ (-1)
18、Python語句''.join(list('hello world!'))執行的結果是____________________ (‘h e l l o w o r l d’)
#將""中的字符一個個取出來,然后以"里面"的東西拼到一起
19、轉義字符’\n’的含義是___________________ (回車)
20、Python語句list(range(1,10,3))執行結果為___________________ ([1,4,7])
#1+步長+步長
21、表達式 list(range(5)) 的值為________________ [0,1,2,3,4]
22、______________命令既可以刪除列表中的一個元素,也可以刪除整個列表 (del)
#刪除的函數的幾個特點
23、已知a = [1, 2, 3]和b = [1, 2, 4],那么id(a[1])==id(b[1])的執行結果為___________ (True) #小整數池
24、切片操作list(range(6))[::2]執行結果為________________( [0,2,4])
25、表達式 'ab' in 'acbed' 的值為________ (False)
26、假設n為整數,那么表達式 n&1 == n%2 的值為_____________ (True)
##& 就是and運算,就是n化為二進制后,每一位與1進行and運算
| 就是or 運算,就是N 化為二進制后,每一位與1進行or運算
27、語句 x = (3,) 執行后x的值為_______________ ((3,))
28、語句 x = (3) 執行后x的值為________________(3)
29、已知x=3和y=5,執行語句 x, y = y, x 后x的值是____ (5)
30、字典對象的___________方法可以獲取指定“鍵”對應的“值”,並且可以在指定“鍵”不存在的時候返回指定值,如果不指定則返回None (get())
31、字典對象的_____________方法返回字典中的“鍵-值對”列表 (items())
32、字典對象的____________方法返回字典的“鍵”列表 (key())
33、字典對象的______________方法返回字典的“值”列表 (value())
34、已知 x = {1:2},那么執行語句 x[2] = 3之后,x的值為________________ ({1:2,2:3})
##集合無序:所以以上就是直接添加操作
35、表達式 {1, 2, 3, 4} - {3, 4, 5, 6}的值為__________________ ({1,2})
36、表達式set([1, 1, 2, 3])的值為____________________ ({1,2,3})
#集合去從
37、已知 x = {'a':'b', 'c':'d'},那么表達式 'a' in x 的值為_____________(True)_
38、已知 x = {'a':'b', 'c':'d'},那么表達式 'b' in x 的值為_____________(False)_
39、已知 x = {'a':'b', 'c':'d'},那么表達式 'b' in x.values() 的值為______________ (True)
40、表達式 1<2<3 的值為_________ (True)
41、表達式 3 or 5 的值為________ (3)
42、表達式 0 or 5 的值為_________ (5)
43、表達式 3 and 5 的值為____________ (5)
44、表達式 3 and not 5 的值為_____________(False)_
45、表達式 3 | 5 的值為__________(7)
46、表達式 3 & 6 的值為_________ (2)
47、表達式 3 ** 2 的值為_________ (9)
48、表達式 3 * 2的值為___________(6)
49、已知 x = [3, 5, 7],那么表達式 x[10:]的值為____________ ([])
50、已知 x = [3, 5, 7],那么執行語句 x[len(x):] = [1, 2]之后,x的值為______________ ([3,5,7,1,2]) # 列表=列表 后者元素直接覆蓋前者的元素
51、已知 x = [3, 7, 5],那么執行語句 x.sort(reverse=True)之后,x的值為_________________ ([7,5,3]) 函數沒有返回值
52、已知 x = [3, 7, 5],那么執行語句 x = x.sort(reverse=True)之后,x的值為_________ (None)
53、已知 x = [1, 2, 3, 2, 3],執行語句 x.pop() 之后,x的值為_____________ ([1,2,3,2])
pop()#默認刪除最后一個
54、已知 x = list(range(10)),則表達式 x[-4:] 的值為__________ ([6,7,8,9])
55、已知 x = [3, 5, 7],那么執行語句 x[1:] = [2]之后,x的值為________________ ([3,2])# 直接覆蓋
56、已知 x = [3, 5, 7],那么執行語句 x[:3] = [2]之后,x的值為________________ ([2])
57、已知x為非空列表,那么執行語句y = x[:]之后,id(x[0]) == id(y[0])的值為__________ (True)
58、已知 x = [1, 2, 3, 2, 3],執行語句 x.remove(2) 之后,x的值為____________ ([1,3,2,3]) #從第一個開始刪除
59、表達式 list(str([1,2,3])) == [1,2,3] 的值為______________(False)
#list會將字符串中的每一個字符都取出來,變成一個個小字符串放到列表里
60、表達式 str([1, 2, 3]) 的值為__________________(‘[1,2,3]’)
##🐍吞象
61、表達式 str((1, 2, 3)) 的值為__________________ (‘(1,2,3)’)
62、Python中用於表示邏輯與、邏輯或、邏輯非運算的關鍵字分別是_________、___________、_________ (and, or, not)
63、Python 3.x語句 for i in range(3):print(i, end=',') 的輸出結果為_____________________ (0,1,2,)
64、對於帶有else子句的for循環和while循環,當循環因循環條件不成立而自然結束時________(會?不會?)執行else中的代碼 (會)
65、在循環語句中,__________語句的作用是提前結束本層循環 (break)
66、在循環語句中,_______語句的作用是提前進入下一次循環 (continue)
67、表達式 'abcabcabc'.rindex('abc') 的值為____________ (6)
#從右面對應到后,看下標
68、表達式 ':'.join('abcdefg'.split('cd')) 的值為______________ (ab:efg)
#"".join()底層原理就是for循環出來一個一個字符串中的字符,按""中的規則連接起來。
69、表達式 'Hello world. I like Python.'.rfind('python') 的值為________ (-1)
'python'為一個元素,其余還是一個字符一個索引
70、表達式 'abcabcabc'.count('abc') 的值為_____________ (3)
71、表達式 'apple.peach,banana,pear'.find('p') 的值為______________ (1)
72、表達式 'apple.peach,banana,pear'.find('ppp') 的值為________ (-1)
73、表達式 'abcdefg'.split('d') 的值為__________________ (['abc', 'efg'])
74、表達式 ':'.join('1,2,3,4,5'.split(',')) 的值為__________________("1:2:3:4:5")
75、表達式 'Hello world'.upper() 的值為___________('HELLO WORLD')
76、表達式 'Hello world'.lower() 的值為_____________ ('hello world')
77、表達式 'Hello world'.lower().upper() 的值為__________('HELLO WORLD')_
78、表達式 'Hello world'.swapcase().swapcase() 的值為______________ ('Hello world') #.swapcase大小寫和前后順序完全顛倒。
79、表達式 r'c:\windows\notepad.exe'.endswith('.exe') 的值為_____________ (True)
80、表達式 r'c:\windows\notepad.exe'.endswith(('.jpg', '.exe')) 的值為_______(True)
81、表達式 'C:\\Windows\\notepad.exe'.startswith('C:') 的值為_________ (True)
82、表達式 'a' + 'b' 的值為_____________ (‘ab’)
83、語句 print(re.match('abc', 'defg')) 輸出結果為_____________ (None)
84、已知 x = (3), 那么表達式 x * 3 的值為__________ (9)
85、已知 x = (3,),那么表達式 x * 3 的值為_____________ (3,3,3)
86、已知列表 x = [1, 2, 3, 4],那么執行語句 del x[1] 之后x的值為____________ ([1,3,4])
87、表達式 [1] * 2 的值為_________________ ([1,1])
88、表達式 [1, 2] * 2 的值為______________ ([1,2,1,2])
89、已知列表 x = [1, 2, 3],那么執行語句 x.insert(1, 4) ,x的值為___________ ([1,4,2,3])
90、已知列表 x = [1, 2, 3],那么執行語句 x.insert(0, 4) ,x的值為___________ ([4,1,2,3])
91、已知列表 x = [1, 2, 3],那么執行語句 x.pop(0) 之后,x的值為_________ ([2,3])
#將刪除的元素作為返回值返回
92、表達式 {1, 2, 3, 4, 5} ^ {4, 5, 6, 7} 的值為_________________________(({1,2,3,6,7}))
93、表達式 'abcab'.replace('a','yy') 的值為___________( ('yybcyyb'))
replace,將對應元素全部替換
94、表達式 'hello world, hellow every one'.replace('hello', 'hi') 的值為________________________('hi world ,hiw every one' )
95、已知字符串 x = 'hello world',那么執行語句 x.replace('hello', 'hi') 之后,x的值為____________( 'hi world')
96、已知 x = 'a b c d',那么表達式 ','.join(x.split()) 的值為__________('a,b,c,d')_ ##有雙引號
97、表達式 'abcab'.strip('ab') 的值為_________(“c”)_
98、表達式 'abc10'.isdigit() 的值為________________(False)__
99、表達式 [1,2,3].count(4) 的值為_______________ (0)
#4的個數
100、語句 x, y, z = [1, 2, 3] 執行后,變量y的值為__________ (2)
簡答題8題(每題5分,共40分)
1 什么是編程語言?什么是程序?什么是編程?為什么要編程
語言是人與人之間溝通的介質,而編程語言則是人與計算機之間溝通的介質。
編程就是人把自己想命令計算機干的事用編程語言翻譯出來並寫到文件里(這一系列的文件就是程序)
人類編程的目的就是為了讓計算機按照人類的思維邏輯(程序)自發地去工作從而把人力解放出來。
2 請畫出完整的計算機完整體系結構圖
https://images2018.cnblogs.com/blog/1036857/201803/1036857-20180314160549829-1723176303.png
3 簡述計算機三大核心硬件與程序運行的關系
程序最先是存放於硬盤中的,程序的運行是先從硬盤把代碼加載到內存中,然后cpu是從內存中讀取指令運行。
4、python程序運行的三個階段是?
1.先啟動python解釋器
2.python解釋器將文件內容從硬盤讀入內存
3.python解釋器讀入代碼,識別python語法
5、簡述python內存管理機制:垃圾回收機制與小整數池
內存管理:垃圾回收機制gc
核心原理:引用計數
分代回收:提升效率
標記清除:循環引用導致內存泄露問題
6 簡述深淺copy原理
- 淺拷貝
針對於可變對象,淺拷貝的時候會開辟一塊內存空間,僅僅是最頂層開辟了,里層元素的地址是相同的。
針對於不可變對象,淺拷貝的時候僅僅是拷貝了引用,並不會開辟新的內存空間
淺拷貝之后,改變拷貝之后的對象中的不可變對象,並不會影響原始對象中的元素,但是,如果改變拷貝之后的對象中的可變對象,會同時影響原始對象中的元素。
- 深拷貝
深拷貝除了頂層拷貝以外,還對子元素進行了拷貝,本質就是遞歸淺拷貝。
```python
import copy
lis = ['Tim Cook', '50', ['basketball', 'football']]
# 淺拷貝
# new_lis = copy.copy(lis)
# new_lis[-1].append('music')
# print(f'原列表:{lis}')
# print(f'淺拷貝列表:{new_lis}')
'''
運行結果:
原列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
淺拷貝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
'''
# 深拷貝
new_lis_2 = copy.deepcopy(lis)
new_lis_2[-1].append('music')
print(f'原列表:{lis}')
print(f'深拷貝列表:{new_lis_2}')
'''
運行結果:
原列表:['Tim Cook', '50', ['basketball', 'football']]
深拷貝列表:['Tim Cook', '50', ['basketball', 'football', 'music']]
'''
```
7、簡述所有數據類型的用途
數字類型:用於數學運算,比較運算
字符串:記錄描述性質的狀態
列表:記錄同種屬性的多個值
字典:記錄不同屬性的多個值
布爾:記錄真假兩種狀態
8、編程語言分類方式如下,請問py是一種什么類型的語言
編譯型or解釋型
靜態語言or動態語言
強類型or弱類型
python屬於解釋型,強類型,動態類型的語言
編程題3題(每題30分,共90分)
1、編寫用戶注冊功能
要求對用戶輸入賬號,密碼進行合法性校驗
用戶名必須是字母組成,密碼至少9位
然后將合法的用戶信息按照某種格式永久存放
下來
1 while True:
2 inp_name = input('請輸入注冊名:').strip()
3 inp_pwd = input('請輸入注冊密碼:').strip()
4 if inp_name.isalpha():
5 if len(inp_pwd) >= 3:
6 print('注冊成功')
7 else:
8 print('注冊密碼至少3位')
9 else:
10 print('注冊名必須是字母')
11
12
13 with open('user_info.txt', mode='at', encoding='utf-8')as f:
14 f.write('%s:%s\n' % (inp_name, inp_pwd))
View Code
2、編寫登錄功能
要求基於題目1用戶注冊的信息進行賬號驗證
要求支持多賬號登錄
要求輸錯三次則永久鎖定該賬號
1 dic_info = {}
2 with open('user_info.txt', 'r', encoding='utf-8') as f:
3 for line in f:
4 user_name = line.strip().split(':')[0]
5 user_pwd = line.strip().split(':')[1]
6 # print(user_name)
7 # print(user_pwd)
8 dic_info[user_name] = [user_pwd, 1] # 將用戶與用戶的密碼及輸錯次數封裝在一個字典里
9 print(dic_info)
10 while True:
11 inp_name = input('請輸入用戶名:')
12 inp_pwd = input('請輸入用戶密碼:')
13 with open('black_list', mode='r+', encoding='utf-8') as f1:
14 black_list = f1.read().strip().split('\n')
15 print(black_list)
16 if not inp_name in dic_info:
17 print('用戶名不存在')
18 ##此時inp_name==user_name
19 elif inp_name in black_list:
20 print('用戶已加入黑名單')
21 break
22 elif inp_pwd == dic_info[inp_name][0]:
23 print('用戶登錄成功')
24 break
25 else:
26 if dic_info[inp_name][1] == 3:
27 print('當前用戶輸錯次數過多,已被鎖定')
28 with open('black_list', mode='at', encoding='utf-8')as f:
29 f.write(inp_name)
30 f.write('\n')
31 break
32 else:
33 dic_info[inp_name][1] += 1
34 print('密碼錯誤')
View Code
3、選做題(用到后面的知識):
在題目2的基礎上把賬號的永久鎖定改為
只鎖定3分鍾
1 import time
2 ## 將用戶與用戶的密碼及輸錯次數封裝在一個字典里
3 dic_info = {}
4 with open('user_info.txt', 'r', encoding='utf-8') as f:
5 for line in f:
6 user_name = line.strip().split(':')[0]
7 user_pwd = line.strip().split(':')[1]
8 # print(user_name)
9 # print(user_pwd)
10 dic_info[user_name] = [user_pwd, 1]
11 print(dic_info,'用戶注冊信息單')
12 #用戶輸入用戶名
13 while True:
14 end = time.time()
15 inp_name = input('請輸入用戶名:')
16 inp_pwd = input('請輸入用戶密碼:')
17 #將被鎖定名單一行一行讀到列表中,,放到這里可以被循環打開,看是否有新的鎖定賬號。
18 with open('lock_list', mode='rt', encoding='utf-8')as f2:
19 for line in f2:
20 lock_list = line.strip().split(':')
21 # print(lock_list)
22 if len(lock_list) > 1:##查看鎖定文件中是否有被鎖定名單
23 start = float(lock_list[1])#如果有就將開始生成時間賦值給start.
24 if not inp_name in dic_info:
25 print('用戶名不存在')
26 elif inp_name in lock_list and end - start < 180:#查看鎖定時間
27 print('用戶被鎖定中')
28
29
30 else:
31 if inp_pwd == dic_info[inp_name][0]:
32
33
34 print('用戶登錄成功')
35 break
36 else:
37 print('密碼錯誤')
38 #查看該賬號輸錯次數是否超過三次
39 if dic_info[inp_name][1] == 3:
40 print('當前用戶輸錯次數過多,已被鎖定三分鍾')
41 #將該鎖定賬號和其鎖定時間一同寫入文件中
42 with open('lock_list', mode='at', encoding='utf-8')as f:
43 start=time.time()
44 f.write('%s:%s\n'%(inp_name,start))
45 #記錄賬號輸錯次數
46 dic_info[inp_name][1] += 1
View Code