python模組1練習題
1、 執行 Python 指令碼的兩種方式
1)/usr/bin/python3 xx.py 2)python3 xx.py #注xx.py需要在內容裡面呼叫由什麼直譯器執行
2、 簡述位、位元組的關係
1Byte = 8bit
1bit 表示某個二進位制 0 1
3、 簡述 ascii、unicode、utf-8、gbk 的關係
最初計算機是由美國發明的,計算機需要一套相應的字元編碼集ascii,來表示英文字元 後來中國也表示也用來計算機,也需要一套字元編碼集來表示漢字字元,也就是gbk 由於各國需要用計算機都需要一套相應的字元編碼,來表示自已國家的字元, 於是就出現統一的字元編碼的集也就是unicode,所有的字元都表示兩個位元組, 原來英文字元只佔用一個位元組,存放英文字元文件,會浪費一倍的空間,美國肯定不會同意 於是就出現了utf-8編碼,可變長的字元編碼,英文字元編碼表示1個位元組,漢字表示3個位元組 這下美國就開興了哈!
4、 請寫出 “你好” 分別用 utf-8 和 gbk 編碼所佔的位數
你好 在utf-8中一箇中文字元3個位元組(Byte) 1位元組 = 8位(bit) 你好就在utf-8表示24位
你好 在gbk中一箇中文字元用2個位元組(Byte) 1位元組 = 8位(bit) 你好就在gbk中表示16位
5、 Pyhton 單行註釋和多行註釋分別用什麼?
單行註釋:用 #註釋內容 多行註釋:用'''註釋內容''' 或者 """註釋內容"""
6、 宣告變數注意事項有那些?
1 變數名不能以數字開頭 2 變數名只能是數字,下劃線,英文字母的組合 3 變數名不能有特殊符號 4 某些特定的字元不能用做變數名
7、 如何檢視變數在記憶體中的地址?
id(變數名)
8、 執行 Python 程式時,自動生成的 .pyc檔案的作用是什麼?
當執行xx.py的python會 把編譯的結果會儲存在位於記憶體中的Pycodeobject中, python程式執行結束,python直譯器則將PyCodeObject寫回到pyc檔案中。 當python再次執行xx.py時,首先程式會在硬碟中尋找pyc檔案,直接載入,否則就重複上面的 過程 .pyc檔案在_pycache_ 注:自已理解,我也不是很瞭解
9、寫程式碼
a.實現使用者輸入使用者名稱和密碼,當用戶名為seven且密碼為123時,
顯示登陸成功,否則登陸失敗!
程式碼如下:
user = "seven" passwd = 123 username = input("please the enter user:") password = int(input("please the enter passwd:")) if username == user and password == passwd: print("logon successfull") else: print("logon failed") 注意:input()輸入的任何內容都是字串View Code
b.實現使用者輸入使用者名稱和密碼,當用戶名為 seven且密碼為 123 時,
顯示登陸成功,否則登陸失敗,失敗時允許重複輸入三次
程式碼如下
user = "seven" passwd = 123 for i in range(3): username = input("please the enter user:") password = input("please the enter passwd:") if password.isdigit(): password = int(password) if username == user and passwd == password: print("logon successfull") break else: print("logon failed") else: print("logon failed")View Code
c.實現使用者輸入使用者名稱和密碼,當用戶名為 seven 或 alex 且密碼為 123 時,
顯示登陸成功,否則登陸失敗,失敗時允許重複輸入三次
程式碼如下:
user = ["seven","alex"] passwd = 123 for i in range(3): username = input("please the enter user:") password = input("please the enter passwd:") if password.isdigit(): password = int(password) if (username in user) and passwd == password: print("logon successfull") break else: print("logon failed") else: print("logon failed")View Code
10、寫程式碼
a.使用 while 迴圈實現輸出 2-3+4-5+6 ...+100 的和
程式碼如下:
even = 0 count = 1 while count<100: count+=1 #方法1:得出偶數-奇數+偶數-奇數... #方法2:求出所有的偶數減去所有的奇數和 (跟小學的換位運算類似) if count % 2 == 0: print("2-100的偶數",count) even += count else: print("2-100的奇數",count) even -= count print(even) #得出的結果View Code
b.使用 for 迴圈和 range 實現輸出1-2+3-4+5-6....-98+99 的和
程式碼如下:
uneven = 0 for i in range(1,100): #方法1:得出的奇數-偶數+奇數-偶數.... #方法2:求出奇數和,求出偶數和,用奇數和減偶數和 if i % 2 == 1: print("1-99的奇數",i) uneven += i else: print("1-99的偶數",i) uneven -= i print(uneven) #得出結果View Code
c.使用 while 迴圈實現輸出1,2,3,4,5,7,8,9,11,12
程式碼如下:
count = 0 while count <12: count += 1 if count == 6: continue elif count ==10: continue print(count)View Code
d.使用 while 迴圈實現輸出 1-100 內的所有奇數
程式碼如下:
count = 0 while count < 100: count += 1 if count % 2 == 1: print("1-100的奇數",count)View Code
e. 使用 while 迴圈實現輸出1-100內的所有偶數
程式碼如下:
count = 0 while count < 100: count += 1 if count % 2 == 0: print("1-100的偶數",count)View Code
11、分別書寫數字5,10,32,7的二進位制表示
在python直譯器中執行bin(number),把某個數字轉換成二進位制 二進位制的表示:0b (binary) bin(5) #0b101 bin(10) #0b1010 bin(32) #0b100000 bin(7) #0b111View Code
12、簡述物件和 類的關係(可用比喻的手法)
類:用來描述具有相同屬性和方法的物件集合,
它定義每個物件的屬性所共有的屬性和方法,物件是類的例項
物件:通過類定義的資料結構例項
假如:人是一個種類,我們自已本身就是類的物件
類是一張圖紙(該圖紙上畫了建築的模型,以及怎樣實現),實際高樓大夏就是圖紙
實現的物件,
類是抽象的,物件是實際存在的。
13、現有如下兩個變數,請簡述 n1 和 n2是什麼關係?
n1=123
n2=123
n1和n2關係是一樣 ,我們可以用id(n1),id(n2)在記憶體中的地址的表示
14、現有如下兩個變數,請簡述 n1 和 n2是什麼關係?
n1 = 123456
n2 = 123456
n1和n2雖然在值是一樣的,在記憶體地址表示中是不一樣的 注: (在python內部中,記憶體還有一個(小數字池,字串池)快取池,對於經常用的, 在python內部編譯有一個優化,在這個快取池,如果重複使用,都是使用同一記憶體快取池的記憶體(地址)空間 如果大於這個快取池,則會在記憶體獨立開闢新的一個記憶體(地址)空間 例如 數字的快取池 -5 至 256 可以用不相同的變數名,相同的值,用id(變數名),看它們的記憶體地址)
15、現有如下兩個變數,請簡述 n1 和 n2 是什麼關係?
n1 = 123456
n2 = n1
n2 是 n1 值的引用 它們在記憶體的地址是一樣和內容也是一樣的,只是不同命名
變數的賦值:
賦值不會開闢新的記憶體空間,它只是複製了新物件的引用,如果n1的值發生改變,
n2還是原來的改變之前值
16、如有一下變數 n1 =5,請使用 int 的提供的方法,
得到該變數最少可以用多少個二進位制位表示?
n1= 5 print(n1.bit_length()) #結果 3
17、布林值分別有什麼?
True False
18、閱讀程式碼,請寫出執行結果
a = "alex"
b = a.capitalize()
print(a)
print(b)
請寫出輸出結果:
alex #a Alex #b
19、寫程式碼,有如下變數,請按照要求實現每個功能
name = " aleX"
a. 移除 name 變數對應的值兩邊的空格,並輸入移除有的內容
print(name.strip()) #結果 aleXView Code
b.判斷 name 變數對應的值是否以 "al" 開頭,並輸出結果
print(name.startswith("al")) #結果 FalseView Code
c.判斷 name 變數對應的值是否以 "X" 結尾,並輸出結果
print(name.endswith("X")) #結果 TrueView Code
d.將 name 變數對應的值中的 “ l” 替換為 “ p”,並輸出結果
print(name.replace("l","p")) #結果 apeXView Code
e.將 name 變數對應的值根據 “ l” 分割,並輸出結果。
print(name.split("l")) #結果 ['\ta', 'eX'] #\t 表示使用了tabView Code
f.請問,上一題 e分割之後得到值是什麼型別?
print(type(name.split("l"))) #結果 <class 'list'> #列表View Code
g.將 name 變數對應的值變大寫,並輸出結果
print(name.upper()) ALEXView Code
h.將 name 變數對應的值變小寫,並輸出結果
print(name.lower()) #結果 alexView Code
i.請輸出 name 變數對應的值的第 2 個字元?
print(name[2]) #結果 lView Code
j. 請輸出 name 變數對應的值的前 3 個字元?
print(name[:3]) #結果 alView Code
k. 請輸出 name 變數對應的值的後 2 個字元?
print(name[-2:]) #結果 eXView Code
l.請輸出 name 變數對應的值中 “ e” 所在索引位置?
print(name.index('e')) #結果 3View Code
20、字串是否可迭代?如可以請使用 for 迴圈每一個元素?
字串可以迭代 程式碼如下: hobby = "一條龍" for i in hobby: print(i) 顯示結果如下: 一 條 龍View Code
21、請用程式碼實現:利用下劃線將列表的每一個元素拼接成字串,
li = ['alex', 'eric', 'rain']
print("_".join(li)) #結果 alex_eric_rainView Code
22、寫程式碼,有如下列表,按照要求實現每一個功能
li = ['alex','eric','rain']
a.計算列表長度並輸出
print(len(li)) #結果 3View Code
b.列表中追加元素 “seven”,並輸出新增後的列表
li.append("seven") print(li) #結果 ['alex', 'eric', 'rain', 'seven']View Code
c.請在列表的第1個位置插入元素 “Tony”,並輸出新增後的列表
li.insert(0,"Tony") print(li) #結果 ['Tony', 'alex', 'eric', 'rain']View Code
d.請修改列表第2個位置的元素為 “Kelly”,並輸出修改後的列表
li[1] = "Kelly" print(li) #結果 ['alex', 'Kelly', 'rain']View Code
e.請刪除列表中的元素 “eric”,並輸出修改後的列表
第一種:得出“eric”索引,通過索引來刪除該值 第二種:直接刪除"eric" 1) del li[1];print(li) #結果['alex', 'rain'] li.pop(1);print(li) #結果['alex', 'rain'] 2) li.remove("eric") print(li) #結果 ['alex', 'rain']View Code
f.請刪除列表中的第2個元素,並輸出刪除的元素的值和刪除元素後的列表
print(li.pop(1));print(li) #結果 eric ['alex', 'rain']View Code
g.請刪除列表中的第3個元素,並輸出刪除元素後的列表
print(li.pop(2));print(li) #結果 rain ['alex', 'eric']View Code
h.請刪除列表中的第2至4個元素並輸出刪除元素後的列表
del li[1:3] print(li) #結果 ['alex']View Code
i.請將列表所有的元素反轉,並輸出反轉後的列表
li.reverse() print(li) #結果 ['rain', 'eric', 'alex']View Code
j.請使用 for、len、range 輸出列表的索引
#3種方法,建議用第三種 1)for for i in li: #list.index()列表有相同元素的,只是的獲取(相同元素中的第一個元素)的索引 print(li.index(i),i) #如果列表內有相同的元素,不建議使用此方法 #結果 0 alex 1 eric 2 rain 2)len zero = [] for i in li: print(len(zero),i) zero.append(i) #結果 0 alex 1 eric 2 rain 3)range for i in range(len(li)): print(i,li[i]) #結果 0 alex 1 eric 2 rainView Code
k.請使用 enumrate 輸出列表元素和序號(序號從 100 開始)
for index,i in enumerate(li,start=100): print(index,i) #結果 100 alex 101 eric 102 rainView Code
l.請使用 for 迴圈輸出列表的所有元素
for i in li: print(i) #結果 alex eric rainView Code
23、寫程式碼,有如下列表,請按照功能要求實現每一個功能
li=["hello",'seven',["mon",["h","kelly"],'all'],123,446]
a. 請輸出 “Kelly”
print(li[2][1][1]) #結果 kellyView Code
b.請使用索引找到 'all'元素並將其修改為 “ALL”
li[2][2] = "ALL" print(li) #結果 ['hello', 'seven', ['mon', ['h', 'kelly'], 'ALL'], 123, 446]View Code
24、寫程式碼,有如下元組,按照要求實現每一個功能
tu=('alex','eric','rain')
a.計算元組長度並輸出
print(len(tu)) #結果 3View Code
b.獲取元組的第2個元素,並輸出
print(tu[1]) #結果 ericView Code
c.獲取元組的第 1-2個元素,並輸出
print(tu[0:2]) #結果 ('alex', 'eric')View Code
d.請使用 for 輸出元組的元素
for i in tu: print(i) #結果 alex eric rainView Code
e.請使用 for、len、range 輸出元組的索引
#跟22題j列表用法類似 for i in range(len(tu)): print(i,tu[i]) #結果 0 alex 1 eric 2 rainView Code
f.請使用 enumrate 輸出元祖元素和序號(序號從 10 開始)
for index,i in enumerate(tu,start=10): print(index,i) #結果 10 alex 11 eric 12 rainView Code
25、有如下變數,請實現要求的功能
tu=("alex",[11,22,{"k1":'v1',"k2":["age","name"],"k3":(11,22,33)},44])
a.講述元祖的特性
元祖和列表類似都是有序的從0開始
不同的是元祖的元素是不能修改的
b.請問 tu 變數中的第一個元素 “alex” 是否可被修改?
不能修改
c.請問tu變數中的"k2"對應的值是什麼型別?是否可以被修改?
如果可以,請在其中新增一個元素 “Seven”
print(type(tu[1][2]["k2"])) #結果 <class 'list'> 列表型別可以修改 tu[1][2]["k2"].append("seven") print(tu) #結果 ('alex', [11, 22, {'k2': ['age', 'name', 'seven'], 'k3': (11, 22, 33), 'k1': 'v1'}, 44]) 注:表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。 tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說, tuple的每個元素,指向永遠不變。但指向的這個list本身是可變的!View Code
d.請問 tu 變數中的"k3"對應的值是什麼型別?是否可以被修改?
如果可以,請在其中新增一個元素 “Seven”
print(type(tu[1][2]["k3"])) #結果 <class 'tuple'> #對應值是元祖,不能修改View Code
26、字典
dic ={'k1':"v1","k2":"v2","k3":[11,22,33]}
a.請迴圈輸出所有的 key
for i in dic: print(i) #結果 k1 k3 k2 注:字典是無序的View Code
b.請迴圈輸出所有的value
for i in dic: print(dic[i]) #結果 [11, 22, 33] v2 v1View Code
c.請迴圈輸出所有的 key 和 value
for i in dic: print(i,dic[i]) #結果 k2 v2 k3 [11, 22, 33] k1 v1View Code
d.請在字典中新增一個鍵值對,"k4":"v4",輸出新增後的字典
dic["k4"] = "v4" print(dic) #結果 {'k4': 'v4', 'k2': 'v2', 'k3': [11, 22, 33], 'k1': 'v1'}View Code
e.請在修改字典中 “k1” 對應的值為 “alex”,輸出修改後的字典
dic['k1'] = "alex" print(dic) #結果 {'k3': [11, 22, 33], 'k1': 'alex', 'k2': 'v2'}View Code
f.請在 k3 對應的值中追加一個元素44,輸出修改後的字典
dic["k3"].append(44) print(dic) #結果 {'k2': 'v2', 'k3': [11, 22, 33, 44], 'k1': 'v1'}View Code
g.請在 k3 對應的值的第1個位置插入個元素18,輸出修改後的字典
dic["k3"].insert(0,18) print(dic) #結果 {'k1': 'v1', 'k2': 'v2', 'k3': [18, 11, 22, 33]}View Code
27、轉換
a.將字串 s="alex" 轉換成列表
print(list(s)) #結果 ['a', 'l', 'e', 'x']View Code
b.將字串 s="alex" 轉換成元祖
print(tuple(s)) #結果 ('a', 'l', 'e', 'x')View Code
c.將列表 li =["alex","seven"]轉換成元組
print(tuple(li)) #結果 ('alex', 'seven')View Code
d.將元祖 tu =('Alex',"seven")轉換成列表
print(list(tu)) #結果 ['Alex', 'seven']View Code
e.將列表 li=["alex","seven"]轉換成字典且字典的key按照10開始向後遞增
dic1 = {} for key,value in enumerate(li,start=10): dic1[key] = value print(dic1) #結果 {10: 'alex', 11: 'seven'}