python 高級語法 - 函數(一)


前言:

圓的面積計算公式為:

S = πr2

假設我們需要計算3個不同半徑的圓的面積:

r1 = 1.1
r2 = 2.2
r3 = 3.3
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3

觀察 s1,s2,s3 的計算過程,π 的值 3.14 是不變的,只是半徑變而已,所以計算的過程中就會出現重復使用 π。

寫一個圓面積計算函數:

def area_of_circle(x):
    return 3.14*x*x  # x 為半徑


r = area_of_circle(1.1)  # 調用 area_of_circle 函數,只需要輸入半徑即可
print(r)

函數area_of_circle本身只需要寫一次,就可以多次調用。

Python不但能非常靈活地定義函數,而且本身內置了很多有用的函數,可以直接調用。


抽象

抽象是數學中非常常見的概念。舉個例子:

計算數列的和,比如:1 + 2 + 3 + ... + 100,寫起來十分不方便,於是數學家發明了求和符號∑,可以把1 + 2 + 3 + ... + 100記作:

100
∑n
n=1

這種抽象記法非常強大,因為我們看到 ∑ 就可以理解成求和,而不是還原成低級的加法運算。

而且,這種抽象記法是可擴展的,比如:

100
∑(n2+1)
n=1

還原成加法運算就變成了:

(1 x 1 + 1) + (2 x 2 + 1) + (3 x 3 + 1) + ... + (100 x 100 + 1)

可見,借助抽象,我們才能不關心底層的具體計算過程,而直接在更高的層次上思考問題。



函數的使用

  1. 定義函數
def 函數名(參數):
    代碼1
    代碼2
    return 表達式 

定義函數的過程中,需要注意以下幾點:

  • 函數代碼塊以def關鍵詞開頭,一個空格之后接函數標識符名稱和圓括號(),再接個冒號。
  • 任何傳入的參數必須放在圓括號中間。
  • 函數內容以冒號起始,並且縮進。
  • 使用return結束函數。默認返回None。
  • return語句依然在函數體內部,不能回退縮進。直到函數的所有代碼寫完,才回退縮進,表示函數體結束。


如何調用函數

函數寫出來就是給其他地方調用的,要調用一個函數,必須使用函數名后跟圓括號的方式才能調用函數。

函數名(參數)

根據實際情況,參數可有可無。

先定義函數,后調用函數。


函數的參數作用

完成需求如下:完成兩個數 3 和 5 的相加

# 定義函數
def add():
    return 3 + 5

print(add())  # 調用函數

上訴函數只完成了 3 和 5 的相加,如果想要這個函數變得更靈活,可以計算任何用戶指定的兩個數字的和,要進行以下修改。

把兩個值設置為變量

# 定義函數時同時定義了接收用戶數據的參數a和b,a和b是形參
def add(a, b):
    return a + b

print(add(3, 8))  # 調用函數的時候,需要傳入兩個參數,分別傳給 a 和 b

  • 形參:函數定義時書寫的參數(非真實數據)
  • 實參:函數調用時書寫的參數(真實數據)
def add(a, b):
    return a + b

x, y = 8 ,9

print(add(x, y))  # 17    使用變量,傳遞參數。
print(add(8, 9))  # 17    直接傳遞值也是可以的。

在上面的例子中,a,b叫做形式參數,簡稱形參。
而x,y和8,9 叫做實際參數,簡稱實參,也就是實際要傳遞的值。
我們通常討論的參數,指的都是形參。



函數嵌套使用

def testB():
    print('---- testB start----')
    print('這里是testB函數執行的代碼......')
    print('---- testB end----')

def testA():
    print('---- testA start----')
    testB()  # 調用函數testB
    print('---- testA end----')

testA()
"""
執行結果:
---- testA start----
---- testB start----
這里是testB函數執行的代碼......
---- testB end----
---- testA end----

"""



執行流程:
遇到函數不執行,調用函數才執行。

  1. 首先調用了函數 testA()
  2. 執行testA()函數的過程中,遇到函數 testB()
  3. 調用了函數 testB(),執行 testB()


函數的應用

計算三個數之和

def sum_num(a, b, c):
    return a + b + c


result = sum_num(1, 2, 3)
print(result)  # 6

計算三個數的平均值

def sum_num(a, b, c):
    return a + b + c


def average_num(a, b, c):
    sumResult = sum_num(a, b, c)
    return sumResult / 3

result = average_num(1, 2, 3)
print(result)  # 2.0


隨機生成20個學生的成績,判斷這20個學生成績的等級.

import random


def get_level(score):
    if 90 < score <= 100:
        return '非常優秀'

    elif 80 < score <= 90:
        return '優秀'

    elif 60 < score <= 80:
        return '及格'

    else:
        return '不及格'


def main():
    # scores = []
    # 生成所有的成績;
    # for count in range(20):
    #     scores.append(random.randint(1, 100))

    for i in range(20):
        score = random.randint(1, 100)
        # 調用函數
        level = get_level(score)
        print("成績:%s, 等級: %s" % (score, level))


if __name__ == "__main__":
    main()


使用python實現簡單計算器的功能


# 定義函數
def add(x, y):
    """加法"""
    return x + y


def subtract(x, y):
    """減法"""
    return x - y


def multiply(x, y):
    """乘法"""
    return x * y


def divide(x, y):
    """除法"""
    return x / y


def number():
    num1 = int(input("請輸入運算的第一個數字:\n"))
    num2 = int(input("請輸入運算的第二個數字:\n"))
    return num1, num2


if __name__ == '__main__':
    while 1:
        # 用戶輸入
        print("選擇運算方式:1、加法;2、減法;3、乘法;4、除法;5、退出")
        choice = int(input("請選擇運算方式(1/2/3/4/5):\n"))

        # num1 = int(input("請輸入運算的第一個數字:"))
        # num2 = int(input("請輸入運算的第二個數字:"))

        # 選擇1就是加法,調用加法的函數
        if choice == 1:
            num1, num2 = number()
            result = add(num1, num2) # 調用函數
            print("%d + %d = %2d" % (num1, num2, result))

        # 選擇2就是減法,調用減法的函數
        elif choice == 2:
            num1, num2 = number()
            result = subtract(num1, num2)  # 函數調用
            print("%d - %d = %2d" % (num1, num2, result))

        elif choice == 3:
            num1, num2 = number()
            result = multiply(num1, num2)
            print("%d * %d = %d" %(num1, num2, result))

        elif choice == 4:
            num1, num2 = number()
            result = divide(num1, num2)
            print("%d / %d = %s" %(num1, num2, result))

        elif choice == 5:
            print("end!")
            break

        else:
            print("非法輸入,請輸入正確的運算方式!")



完成注冊,登錄,退出系統功能


def userN():
    username = input("請輸入賬號: \n")
    password = input('請輸入密碼: \n')
    return username,password


def register():
    # 注冊函數封裝
    username,password= userN()
    temp = username + "|" + password
    with open('D:\\1221\\Test_Python\\login.md','w') as file:
        file.write(temp)


def login():
    # 登錄函數封裝
    username,password = userN()
    with open('D:\\1221\\Test_Python\\login.md') as file:
        user = file.read().split("|")
    if username == user[0] and password == user[1]:
        print("登錄成功!")
        getNick()  # 跳轉到主頁面
        # return '登錄成功'

    elif username == user[0] and password != user[1]:
        print("輸入密碼有誤,請重試!")

    elif username != user[0] and password == user[1]:
        print("輸入賬號有誤,請重試!")

    elif username == "" or password == "":
        print("輸入賬號或密碼為空,請重試!")

    else:
        print("登錄失敗,請檢查賬號或者密碼!")
        # return '登錄失敗,請檢查賬號或者密碼'


def getNick():
    # 查看個人主頁
    with open('D:\\1221\\Test_Python\\login.md') as file:
        user = file.read().split("|")
        print('%s您好,歡迎再次回來!' % (user[0]))


def exit():
    # 退出系統
    import sys
    print('系統已退出,歡迎下次再登錄!')
    sys.exit(1)


def Main():
    while True:
        put = int(input('請選擇 1.注冊 2.登錄 3.退出系統'))
        if put == 1:
            # 調用注冊函數
            register()

        elif put == 2:
            # 調用登錄函數
            login()
            # getNick()  # 跳轉到主頁面

        elif put == 3:
            # 調用退出函數
            exit()

        else:
            print('輸入錯誤,請重新輸入...')
            continue


if __name__ == '__main__':
    Main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM