大作業day3
阿新 • • 發佈:2018-11-01
練習題
1. 檔案a1.txt內容
序號 部門 人數 平均年齡 備註
1 python 30 26 單身狗
2 Linux 26 30 沒物件
3 運營部 20 24 女生多
.......
通過程式碼,將其構建成這種資料型別:
[{'序號':'1','部門':Python,'人數':30,'平均年齡':26,'備註':'單身狗'},......]
import os a = ''' 序號 部門 人數 平均年齡 備註 1 python 30 26 單身狗 2 Linux 26 30 沒物件 3 運營部 20 24 女生多 ''' with open('a1.txt',encoding='utf-8',mode='w+') as write_f: write_f.write(a) l1 = [] # 定義一個list f1 = open('a1.txt',encoding='utf-8',mode='r') data1 = f1.readline().split() for i in f1: # 迴圈檔案所有元素 dic = {} # 定義一個dict l = i.split() # 將得到結果刪除空格 for j in range(len(l)): # 迴圈每個f1檔案每行的長度 dic[data1[j]] = l[j] # 利用輸出的長度來得到結果鍵值對 l1.append(dic) # 一個迴圈玩後新增到l1元組中 print(l1) f1.close()
2. 傳入函式的字串中,[數字]、[字母]、[空格] 以及 [其他]的個數,並返回結果。
def func1(x): num = 0 letter = 0 blank = 0 other = 0 for i in x: if i.isdecimal(): # 數字個數 num += 1 elif i.isalpha(): # 字母個數 letter += 1 elif i.isspace(): # 空格個數 blank += 1 else: # 其他字元 other += 1 print("數字個數為{},字母個數為{},空格個數為{},其他字元個數為{}".format(num,letter,blank,other)) func1('jinyuan123;;; ')
3. 寫函式,接收兩個數字引數,返回比較大的那個數字。
def func2(x, y): return x if x > y else y print(func2(88, 44))
4. 寫函式,檢查傳入字典的每一個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字串或列表
def func3(arg): ret = {} for key,value in arg.items(): # 把每個key、value取出 if len(value) > 2: ret[key] = value[:2] # 將ret新增key、value else: ret[key] = value return ret dic = {"k1": "v1v1", "k2": [11,22,33,44],'k3':'aaaaaa'} print(func3(dic))
5. 寫函式,此函式只接收一個引數且此引數必須是列表資料型別,此函式完成的功能是返回給呼叫者一個字典,
此字典的鍵值對為此列表的索引及對應的元素。例如傳入的列表為:[11,22,33] 返回的字典為 {0:11,1:22,2:33}。
def func4(*args): a = 0 b = {} # 定義字典 for i in args[0]: # args[0]用於取出值 b[a] = i # 值新增b字典中 a += 1 return b print(func4([11,22,33,44]))
6. 寫函式,函式接收四個引數分別是:姓名,性別,年齡,學歷。使用者通過輸入這四個內容,
然後將這四個內容傳入到函式中,此函式接收到這四個內容,將內容追加到一個student_msg檔案中。
def func5(*args): # 傳入值 import os # 呼叫模組 with open('student_msg',encoding='utf-8',mode='a') as f1: # 開啟檔案(或者開啟檔案)a為追加 for i in args: # 把每個值迴圈新增到檔案裡 f1.write(i+'\n') name = input("輸入名字:") sex = input("輸入性別:") age = input("輸入年齡:") degree = input("輸入學歷:") func5(name,sex,age,degree)
7. 對第6題升級:支援使用者持續輸入,Q或者q退出,性別預設為男,如果遇到女學生,則把性別輸入女。
def func7(name,age,degree,sex = '男'): import os a = name,sex,age,degree with open('student_msg',encoding='utf-8',mode='a') as f1: for i in a: f1.write(i+'\n') while 1: name = input("輸入名字q/Q退出:").upper() if name == 'Q': break # sex = input("輸入性別預設為男:") age = input("輸入年齡:") degree = input("輸入學歷:") sex = input("輸入性別預設為男:") if sex == '女': func7(name,sex,age,degree) else: func7(name,age,degree)
8. 寫函式,使用者傳入修改的檔名,與要修改的內容,執行函式,完成整個檔案的批量修改操作。
讀程式碼,回答:程式碼中,打印出來的值a,b,c分別是什麼?為什麼?
a=10
b=20
def test5(a,b):
print(a,b)
c = test5(b,a)
print(c)
# a = 20 b = 10 c = None # 因為a、b作為實參時呼叫了位置,所以a=20 b=10 # c因為只是用來呼叫函式,而在函式裡沒有使用return來構造一個返回值
9. 讀程式碼,回答:程式碼中,打印出來的值a,b,c分別是什麼?為什麼?
a=10
b=20
def test5(a,b):
a=3
b=5
print(a,b)
c = test5(b,a)
print(c)
# a = 3 b = 5 # 因為a、b在全域性雖然已經定義了變數,但是在函式體裡又重新賦值 # c因為只是用來呼叫函式,而在函式裡沒有使用return來構造一個返回值
10. 寫函式,傳入函式中多個實參(均為可迭代物件如字串,列表,元祖,集合等),將每個實參的每個元素依次新增到函式的動態引數args裡面.
例如 傳入函式兩個引數[1,2,3] (22,33)最終args為(1,2,3,22,33)
def func10(*args): print(args) func10(*[1,2,3],*(22,33)) # 特殊定義
11. 寫函式,傳入函式中多個實參(實參均為字典),將每個實參的鍵值對依次新增到函式的動態引數kwargs裡面.
例如 傳入函式兩個引數{‘name’:’alex’} {‘age’:1000}最終kwargs為{‘name’:’alex’ ,‘age’:1000}
def func11(**kwargs): print(kwargs) func11(**{"name":"alex"} ,**{"age":1000}) #特殊定義
12判斷下列函式是否成立
# 題目一: # a = 2 # def wrapper(): # print(a) # wrapper() # 成立 # 題目二: # a = 2 # def wrapper(): # a += 1 # print(a) # wrapper() # 不成立 因為a為全域性變數,函式體內不能對全域性變數進行修改,只能呼叫 # 題目三: # def wrapper(): # a = 1 # # def inner(): # print(a) # inner() # wrapper() # 成立 # 題目四: # def wrapper(): # a = 1 # # def inner(): # a += 1 # print(a) # inner() # wrapper() # 不成立 因為函式體就算巢狀都是單獨存在的,只能進行呼叫,不能修改
13. 寫函式,接收兩個數字引數,將較小的數字返回.
def func13(x,y): return x if x < y else y print(func13(1,2))
14. 寫函式,接收一個引數(此引數型別必須是可迭代物件),將可迭代物件的每個元素以’_’相連線,形成新的字串,並返回.
例如 傳入的可迭代物件為[1,'老男孩','武sir']返回的結果為’1_老男孩_武sir
def func14(args): print(args) a = "" # 定義一個None for i in args: # 呼叫每個元素 a += str(i)+'_' # 在每個元素後面新增'_' return a.strip('_') # 刪除字串左右'_' print(func14([1,'老男孩','武sir']))
15. 寫函式,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}
例如:如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此題用到max(),min()內建函式)
def func15(*args): print('min:',min(args),'max:',max(args)) # min函式取最小 max函式取最大 func15(9,3,4,6)
16. 寫函式,傳入一個引數n,返回n的階乘
例如:cal(7) 計算7*6*5*4*3*2*1
def func16(n): sum = 1 for i in range(n, 0, -1): # n為傳入的值 倒敘複製 sum = sum * i # 求和 現有sum=1 1*7=7 然後7*6一直遞迴42*5 return sum # 返回結果 print(func16(7))
17. 寫函式,返回一個撲克牌列表,裡面有52項,每一項是一個元組
例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
def func17(): let1 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A'] let2 = ['紅心','草花','黑桃','方片'] let3 = [] for i in let1: # 迴圈let1所有元素 for j in let2: # 迴圈let2所有元素 let3.append((j,i)) # 將值新增到let3中,注意加(),按要求取每對為元組 return let3 print(func17())