前言:
圓的面積計算公式為:
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)
可見,借助抽象,我們才能不關心底層的具體計算過程,而直接在更高的層次上思考問題。
函數的使用
- 定義函數
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----
"""
執行流程:
遇到函數不執行,調用函數才執行。
- 首先調用了函數 testA()
- 執行testA()函數的過程中,遇到函數 testB()
- 調用了函數 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()
