Python小白學習之路(四)——第一次練習題
寫在前面:
今天下雪了呢!連著兩天都沒有更新學習記錄。
我沒有偷懶呢。做了一天的練習題,昨天學的內容還沒總結完,太累了就回去睡覺了
連續一週早起,強大的內心也無法支撐我疲憊的身體
今天早起做了整理。加油哦(貴在堅持,一定要好好堅持下去)
1.執行 Python 指令碼的兩種方式
(1)進入python直譯器,等待使用者實時輸入(2)python.exe + 執行檔案的路徑
2.簡述位、位元組的關係
1位元組 = 8位
3.簡述 ASCII,Unicode,utf-8、gbk 的關係
ASCII是最早美國用的標準資訊交換碼,把所有的字母的大小寫,各種符號用二進位制來表示,共有256中,加入些拉丁文等字元,1bytes代表一個字元.
Unicode是為了統一世界各國語言的不用,統一用2個bytes代表一個字元,可以表達2**16=65556個,稱為萬國語言,特點:速度快,但浪費空間,可以用在記憶體處理中,相容了utf-8,gbk,ASCII.
utf-8是為了改變Unicode的浪費記憶體空間的缺點,規定1個英文字元用1個位元組表示,1箇中文字元用3個位元組表示,特點;節省空間,速度慢.
gbk是中文的字元編碼,用2個位元組代表一個字元.
4.請寫出 “李傑” 分別用 utf-8 和 gbk 編碼所佔的位數
utf-8: 48位gbk: 32位
5.Pyhton 單行註釋和多行註釋分別用什麼?
單行註釋: #多行註釋: """......"""
6.宣告變數注意事項有那些?
變數由數字、字母和下劃線構成。需要注意三點:第一,第一位不可以是數字;第二,不可以使用python裡的關鍵字;第三,儘量不要和python內建的東西重複
7.如有一下變數 n1 = 5,請使用 int 的提供的方法,得到該變數最少可以用多少個二進位制位表示?
程式: test = 5 v = test.bit_length() print(v) 執行結果: 3
8.布林值分別有什麼?
真(True)或假(False),真為1 假為0
9.閱讀程式碼,請寫出執行結果
a = "alex" b = a.capitalize()print(a) print(b)
請寫出輸出結果: alex Alex#(說明字串一旦建立便不可修改)
10.寫程式碼,有如下變數,請按照要求實現每個功能
name = " aleX" a. 移除 name 變數對應的值兩邊的空格,並輸入移除後的內容 b. 判斷 name 變數對應的值是否以 "al" 開頭,並輸出結果 c. 判斷 name 變數對應的值是否以 "X" 結尾,並輸出結果 d. 將 name 變數對應的值中的 “l” 替換為 “p”,並輸出結果 e. 將 name 變數對應的值根據 “l” 分割,並輸出結果。 f. 請問,上一題 e 分割之後得到值是什麼型別(可選)? g. 將 name 變數對應的值變大寫,並輸出結果 h. 將 name 變數對應的值變小寫,並輸出結果 i. 請輸出 name 變數對應的值的第 2 個字元? j. 請輸出 name 變數對應的值的前 3 個字元?
程式:
name = ' aleX' a = name.lstrip() b = name. startswith('al') c = name.endswith('X') d = name.replace('l','p') e = name.partition('l') f = type(e) g = name.upper() h = name.lower() i = name[1] print(a,b,c,d,e,f,g,h,i)
執行結果:
aleX False True apeX (' a', 'l', 'eX') <class 'tuple'> ALEX alex
#請輸出 name 變數對應的值的前 3 個字元
for j in range(0,3): print((name[j])) 執行結果: a
k. 請輸出 name 變數對應的值的後 2 個字元? l. 請輸出 name 變數對應的值中 “e” 所在索引位置? m. 獲取子序列,僅不包含最後一個字元。如: oldboy 則獲取 oldbo; root 則獲取 roo
#k.程式一: name = ' aleX' for j in range(4,6): print(name[j]) #k.程式二: name = ' aleX' v = name[4:6] print(v) #k.程式三: name = ' aleX' v1 = name.find('e') v2 = name.find('X') for j in range(v1,v2 + 1): print(name[j])‘ #l.程式: name = ' aleX' v1 = name.find('e') print(v1) #m.程式: name = ' aleX' v1 = name.find('X') v2 = name[0:v1] print(v2)
21.字串是否可迭代物件?如可以請使用 for 迴圈每一個元素?
字串為可迭代物件。
程式: test = 'abcdefg' for j in test: print(j)
#簡單的來理解,可迭代物件為可以被for進行迴圈獲取的
22.請用程式碼實現:
a. 利用下劃線將列表的每一個元素拼接成字串,li = "alexericrain"
b. 利用下劃線將列表的每一個元素拼接成字串,li = ['alex', 'eric', 'rain']
a.程式: li = "alexericrain" v = '_'.join(li) print(v) b.程式: li = ['alex', 'eric', 'rain'] v1 = ''.join(li) v2 = '_'.join(v1) print(v2)
#b題的程式我是在還沒有學習列表知識前就試著想把列表轉成字串來處理。#是因為我理解錯題目意思了,對於列表中的每一個元素,是用逗號來分割的。
#改程式如下: li = ['alex', 'eric', 'rain'] v1 = '_'.join(li) print(v1)
23.Python2 中的 range 和 Python3 中的 range 的區別
在Python2中,range一旦建立,記憶體便開闢,連續數字已經建立。python中有xrange,用法同Python中的range在Python3中,rang建立之後,需要通過for迴圈來一個一個建立連續數字,也可以通過引數設定來確定步長
24.實現一個整數加法計算器
程式: while True: num1 = input('請輸入第一個加數:') x1 = int(num1) num2 = input('請輸入第二個加數:') x2 = int(num2) print(x1,'+',x2,'=',x1 + x2)
#我想,我的理解能力真的有待提高,老師的意思是使用者直接輸入5+9,讓我來寫程式計算結果(手動捂臉)#修改程式:
while True: test1 = input(">>>") test2 = test1.partition('+') v1 = int(test2[0]) v2 = int(test2[2]) print(v1+v2)
25.計算使用者輸入的內容中有幾個十進位制小數?幾個字母?
test = input(">>>") m = 0 n = 0 for j in test: if (96 < ord(j) < 123) or (64 < ord(j) < 91): m += 1 elif 47 < ord(j) < 58: n += 1 else: pass print('字母個數:',m,'數字個數:',n)
26.簡述 int 和 9 等數字以及 str 和 "xxoo" 等字串的關係?
類和物件的關係
27.製作趣味模板程式
需求:等待使用者輸入名字、地點、愛好,根據使用者的名字和愛好進行任意現實
while True: test1 = input('請輸入您的姓名:') test2 = input('請輸入您喜歡做的事情:') test3 = input('請輸入您喜歡在哪裡做喜歡的事情') v1 = [test1,'最喜歡在',test3,test2] v2 = ''.join(v1) print(v2)
#我好想總是喜歡把問題複雜化,可能是學過的知識不能靈活應用#慢慢來吧,其實這個題用.format直接格式化會很簡單
#程式修改: while True: test = '敬愛可親的{0},最喜歡在{1}{2}' name = input('請輸入您的姓名:') something = input('請輸入您喜歡做的事情:') place = input('請輸入您喜歡在哪裡做喜歡的事情:') v = test.format(name,place,something) print(v)
28.製作隨機驗證碼,不區分大小寫。
流程: - 使用者執行程式 - 給使用者顯示需要輸入的驗證碼 - 使用者輸入的值 - 使用者輸入的值和顯示的值相同時現實正確資訊;否則繼續生成隨機驗證碼繼續等待使用者輸入
#隨機驗證碼產生 def check_code(): import random checkcode = '' for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) else: temp = random.randint(0,9) checkcode += str(temp) return checkcode while True: code = check_code() print(code) usercode = input('>>>') v = usercode.upper() if v == code: print('驗證碼輸入正確') break else: print('驗證碼輸入錯誤')
29.開發敏感詞語過濾程式,提示使用者輸入內容,如果使用者輸入的內容中包含特殊的字元:
如 "蒼老師" "東京熱",則將內容替換為 ***
while True: test = input('>>>') v = test.replace('東京熱','***') v = v.replace('蒼井空','***') print(v)
30. 製作表格
迴圈提示使用者輸入:使用者名稱、密碼、郵箱 (要求使用者輸入的長度不超過 20 個字元,如果超過則只有前 20 個字元有效) 如果使用者輸入 q 或 Q 表示不再繼續輸入,將使用者輸入的內容以表格形式列印
while True: test1 = input('username:') test2 = input('password;') test3 = input('mailbox:') test4 = ' username\t password\t mailbox\n' test5 = [test1, '\t', test2, '\t', test3] v1 = test4.expandtabs(20) v2 = ''.join(test5) v4 = v2.expandtabs(20) print(v1, v4) if input('') == 'q' or 'Q': break else: pass
#我自己寫的這個程式後面發現是有點問題的,因為只能列印一個使用者的資訊,當下一個使用者資訊輸入時,就會覆蓋掉前一個使用者資訊
#程式完善: s = 'username\tpassword\tmailbox\n' while True: test1 = input('username:') test2 = input('password;') test3 = input('mailbox:') template = '{0}\t{1}\t{2}\n' v = template.format(test1,test2,test3) s = s + v if input('') == 'Q' or 'q ': break else: pass print(s.expandtabs(20))
其實,要想實現一個功能,程式可以有很多種方法。我們不僅僅是侷限於當期,寫完一個程式要多思考、多完善。加油!