1. 程式人生 > >大作業day3

大作業day3

練習題
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())