1. 程式人生 > >python全棧開發-前方高能-函式 python_day_9

python全棧開發-前方高能-函式 python_day_9

一.今日主要內容 函式: 函式:對功能的封裝 語法: def 函式名(形參): 函式體 函式名(實參) 函式名:命名規則和變數一樣

函式的返回值: return, 函式執行完畢. 不會執行後面邏輯

  1. 如果函式中不寫return返回None
  2. 只寫return 返回None
  3. return 返回值. 返回一個值
  4. return 值1, 值2,... 返回多個值. 呼叫方接收到的是元組

引數: 在函式執行的時候給函式傳遞的資訊 函式的引數的個數沒有限制 1. 形參:

  • 1. 位置引數.
  • 2. 預設值引數. 當呼叫的時候不給傳值使用預設值
  • 3. 混合使用. 順序: 1. 位置引數, 2, 預設值引數

2. 實參:

  • 1.位置引數. 按照位置給形參賦值
  • 2. 關鍵字引數. 按照名稱給形參賦值
  • 3. 混合引數. 先用位置引數, 再用關鍵字引數

09. 前⽅⾼能-初識函式 

本節內容: 

  • 1. 什麼是函式 
  • 2. 函式定義, 函式名, 函式體以及函式的調⽤ 
  • 3. 函式的返回值 
  • 4. 函式的引數

⼀. 什麼是函式 我們可以先去定義⼀個事 情或者功能. 等到需要的時候直接去⽤就好了. 那麼這⾥定義的東⻄就是⼀個函式.

函式: 對程式碼塊和功能的封裝和定義

執行流程:

三. 函式的返回 

執⾏完函式之後. 我們可以使⽤return來返回結果. 函式中return的使⽤:

返回值可以是多個結果:

總結⼀下: 

1. 遇到return. 此函式結束, 函式後⾯的東⻄將不會再執⾏ 

2. return 返回值 關於返回值: 如果return什麼都不寫 或者 ⼲脆不寫return .那麼返回的就是None 如果

return後⾯寫了⼀個值. 則調⽤者可以接收⼀個結果 如果return後⾯寫了多個結果, 則調⽤者可以接收

⼀個tuple, 調⽤者可以直接解構成多個變數 OK. 完美. 可以得到結果了. 但是我們的約的⽅式是不是有

點⼉問題呢?, 陌陌現在還能約到 麼?約不到了吧. 該換探探了. 那過兩天探探也死掉了呢? 是不是還會

有⼀個替代品. 那你想. 有⼀個替代的.你就需要去改⼀下程式碼. 是不是不太合適了. 最好的⽅式是不是想

⽤什麼約就 ⽤什麼約? ok. 我們可以通過函式的引數來給函式傳遞⼀些資訊.

四. 函式的引數 引數, 函式在調⽤的時候指定具體的⼀個變數的值. 就是引數. 語法:

def fun():
    print("你無情,你殘酷,你無理取鬧!")
    print("我哪裡無情,哪裡殘酷,哪裡無理取鬧!")
    print("你就是無情,就是殘酷,就是無理取鬧!")
    return "你才無情,你才殘酷,你才無理取鬧!","我沒有無情,沒有殘酷,沒有無理取鬧!","ending"

a,b,c = fun()
print(a)
print(b)
print(c)
引數:在函式執行過程中給函式才傳遞的資訊
形參:在函式宣告的位置,宣告出來的變數
實參:在函呼叫過程中,實際你給函式傳遞的值

game(Internet,games):#形參
    print("開啟手機")
    print("連上%s" % Internet)
    print("開啟%s" % games)
    print("玩到手機關機!")
#函式的引數的個數沒有限制
game("資料","王者榮耀")#實參
game("WiFi","刺激戰場

注意引數的順序:

mation(id,name,age,sex):
    print("序號:%s\n姓名:%s\n年齡:%s\n性別:%s" % (id,name,age,sex))

information(1,"corn",21,"男")#位置引數
information(id = 2,name = "corn1",age = 22,sex = "女")#關鍵字引數

information(3,"corn2",age = 23,sex = "不詳")#混合引數:注意順序,位置引數在前,關鍵字引數在後

#預設值引數和為主引數的混合引數:位置引數在前,預設值引數在後

def regist(id,name,age,sex = "男"):#預設值引數
    print("序號:%s\n姓名:%s\n年齡:%s\n性別:%s" % (id,name,age,sex))
regist(1,"corn",21)
regist(2,"corn1",22)
regist(3,"corn3",23

注意, 必須先宣告位置引數, 才能宣告預設值引數

作業:

二.寫函式,檢查獲取傳入列表或元組物件的所有奇數位索引對應的元素,並將其作為新列表返回給呼叫者。
def odd(lst):
    li = []
    for i in range(len(lst)):
        if i%2 != 0:
            li.append(lst[i])
    return li

a = odd([1,2,3,4,5,6,7,8,9])
print(a)
三.寫函式,判斷使用者傳入的物件(字串、列表、元組)長度是否大於5。
def i(lst):
    if len(lst) > 5:
        return"長度大於5"
    else:
        return"長度不大於5"

a = i([1,2,3,4,5,6])
print(a)
四.寫函式,檢查傳入列表的長度,如果大於2,將列表的前兩項內容返回給呼叫者。
def i(lst):
    if len(lst) > 2:
        return lst[0],lst[1]
    else:
        return"列表長度不大於2"
a = i([1,2,3])
print(a)
五,寫函式,計算傳入函式的字串中, 數字、字母、空格 以及其他內容的個數,並返回結果。
def time(l):
    num = 0
    zm = 0
    blank = 0
    other = 0
    for i in l:
        if i.isdigit() == True:
            num += 1
        elif i.isalpha() == True:
            zm += 1
        elif i == " ":
            blank += 1
        else:
            other += 1
    return "數字出現了%s次,字母出現了%s次,空格出現了%s次,其他出現了%s次" % (num,zm,blank,other)
a = time("1 2 3 4 5 6 a,b,c,d,e,f,")
print(a)
六,寫函式,接收兩個數字引數,返回比較大的那個數字。
def n(num,num1):
    if num > num1:
        return num
    elif num < num1:
        return num1
    else:
        return"兩個數一樣大"

a = n(32,34)
print(a)
七.寫函式,檢查傳入字典的每一個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。
PS:字典中的value只能是字串或列表
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
def zd(dic):
    for i in dic:
        if len(dic[i]) > 2:
            dic[i] = dic[i][0:2]
    return dic

a = zd({"1":"dasd","2":[1,2,3,4,5,6],"3":"你好!"})
print(a)
八,寫函式,此函式只接收一個引數且此引數必須是列表資料型別,
此函式完成的功能是返回給呼叫者一個字典,此字典的鍵值對為此列
表的索引及對應的元素。例如傳入的列表為:[11,22,33] 返回的字典
為 {0:11,1:22,2:33}。
def d(lst):
    dic = {}
    for i in range(len(lst)):
        dic[i] = lst[i]
    return dic

a = d([11,22,33,44,55,66,77,88])
print(a)
九,寫函式,函式接收四個引數分別是:姓名,性別,年齡,學歷。使用者通過輸入這四個內容,
然後將這四個內容傳入到函式中,此函式接收到這四個內容,將內容追加到一個student_msg檔案中。
def w(name,sex,age,edu):
    f = open("student_msg",mode='w',encoding="utf-8")
    f.write("姓名:%s\n性別:%s\n年齡:%s\n學歷:%s" % (name,sex,age,edu))
    f.flush()
    f.close()

w("corn","男",21,"專科")
 十,對第9題升級:支援使用者持續輸入,Q或者q退出,性別預設為男,如果遇到女學生,則把性別輸入女。
def func(name, age,edu,sex ="男"):
    f = open("student.msg", mode="a", encoding="utf-8")
    f.write(name+"_"+str(age)+"_"+sex+"_"+edu+"\n")
    f.flush()
    f.close()


while 1:
    content = input("請問. 是否要錄入學生資訊, 輸入q退出:")
    if content.upper() == "Q":
        break
    n = input("請輸入名字:")
    a = input("請輸入年齡:")
    s = input("請輸入性別:")
    e = input("請輸入學歷:")
    if s == "":
        func(n,a,e)
    else:
        func(n,a,e,s)
十一,寫函式,使用者傳入修改的檔名,與要修改的內容,執行函式,完成整個檔案的批量修改操作(升級題)。
def mod(r,m,n):
    import  os
    with open(r,mode="r",encoding="utf-8")as f, \
            open("a1.txt",mode="w",encoding="utf-8")as f1:
        for line in f:
            s = line.replace(m,n)
            f1.write(s)
    os.remove(r)
    os.rename("a1.txt",r)

mod("a.txt","我不好!","我很好!")
十二,寫一個函式完成三次登陸功能,再寫一個函式完成註冊功能(升級題)
def dl():
    count = 3
    while count > 0:
        account = input("請輸入你的賬號:")
        password = input("請輸入你的密碼:")
        count -= 1
        for i in dic:
            if account == i and password ==dic[i]:
                print("登入成功")
                return

        print('賬號或者密碼錯誤,請重新輸入(還剩%s次機會):' % count)
        x = input("按Q返回上一選單,其他鍵繼續:")
        if x.upper().strip() == "Q":
            return


def login():
    while 1:
        account = input("請輸入你註冊的賬號(6位以上):")
        password = input("請輸入你的密碼:")
        password1 = input("請重新輸入一遍你的密碼:")
        if len(account) <= 6 or account.isdigit() == False:
            print("賬號不合法!請重新輸入!")
        elif password == password1:
            dic[account] = password
            print("恭喜你,註冊成功!")
            return
        else:
            print("你輸入的兩次密碼不匹配,請重新輸入")
            x = input("按Q返回上一選單,其他鍵繼續:")
            if x.upper().strip() == "Q":
                break
dic = {}
menus = ("1, 登入", "2, 註冊", "3, 退出")
while 1:
    for item in menus:
        print(item)
    s = input('請輸入您要選擇的選單項:')
    if s == '1':
        dl()
    elif s == "2":
        login()
    elif s == "3":
        break
    else:
        print("指令錯誤!")