Python實驗報告——第8章 模組
例項01:建立計算BMi指數的模組
建立一個用於根據身高、體重計算BMI 指數的模組,命名為 bmi.py,其中 bmi為模組名,.py為副檔名。
程式碼如下:
(1)建立一個用於根據身高、體重計算BMI指數的模組
def fun_bmi(person,height,weight):
'''功能:根據身高和體重計算bmi指數
person:姓名
height:身高,單位:米
weight:體重,單位:千克
'''
print(person + "的身高" + str(height) + "米 \t 體重: " + str(weight) + "千克")
bmi = weight/(height*height)
print(person + "的BMI指數為:" + str(bmi)) #輸出BMI指數
# 判斷身材是否合理
if bmi < 18.5:
print("您的體重過輕 ~@_@~\n")
if bmi >= 18.5 and bmi <= 24.9:
print("正常範圍,注意保持 (-_-)\n")
if bmi >= 24.9 and bmi < 29.9:
print("您的體重過重 ~@_@~\n")
if bmi >= 29.9:
print("肥胖 ^@_@^\n")
def fun_bmi_upgrade(*person):
'''功能:根據身高、體重計算BMI指數(升級版)
*person:可變引數該引數中需要傳遞帶3個元素的列表,
分別為姓名、身高(單位:米)和體重(單位:千克)
'''
for list_person in person:
for item in list_person:
person = item[0] # 姓名
height = item[1] # 身高(單位:米)
weight = item[2] # 體重(單位:千克)
print("\n" + "=" * 13, person, "=" * 13)
print("身高:" + str(height) + "米 \t 體重:" + str(weight) + "千克")
bmi = weight / (height * height)
print("您的BMI指數為:" + str(bmi)) # 輸出BMI指數
# 判斷身材是否合理
if bmi < 18.5:
print("您的體重過輕 ~@_@~\n")
if bmi >= 18.5 and bmi <= 24.9:
print("正常範圍,注意保持 (-_-)\n")
if bmi >= 24.9 and bmi < 29.9:
print("您的體重過重 ~@_@~\n")
if bmi >= 29.9:
print("肥胖 ^@_@^\n")
(2)建立一個名稱為main.py的檔案
import bmi #匯入bmi模組
bmi.fun_bmi("尹一伊",1.75,120) #執行模組中的fun_bmi()函式
執行結果如下:
例項02:匯入兩個包括同名函式的模組
建立兩個模組,一個是矩形模組,其中包括計算矩形周長和麵積的函式;另一個是圓形,其中包括計算圓形周長和麵積的函式。然後在另一個Python檔案中匯入這兩個模組,並呼叫相應的函式計算周長和麵積。
程式碼如下:
(1)建立矩形模組
#rectangle.py
def girth(width, height):
return (width + height) * 2
def area(width, height):
return width * height
if __name__ == '__main__':
print(area(10, 20))
(2)建立圓形模組
#circular.py
import math
PI = math.pi
def girth(r):
return round(2*PI*r, 2)
def area(r):
return round(PI*r*r, 2)
if __name__ == '__main__':
print(girth(10))
(3)建立檔案
#compute.py
import rectangle as r
import circular as c
if __name__ == '__main__':
print("圓形的周長為: ", c.girth(10))
print("矩形的周長為: ", r.girth(10, 20))
執行結果如下:
例項03:在指定包中建立通用的設定和獲取尺寸的模組
建立一個名稱為settings的包,在該包下建立一個名稱為size的模組,通過該模組實現設定和獲取尺寸的通用功能。(1)在 settings包中,建立一個名稱為size的模組,在該模組中,定義兩個保護型別的全域性變數,分別代表寬度和高度,然後定義一個change()函式,用於修改兩個全域性變數的值,再定義兩個函式,分別用於獲取寬度和高度。(2)在settings包的上一層目錄中建立一個名稱為main.py的檔案,在該檔案中匯入.settings包下的size模組的全部定義,並且呼叫change()函式重新設定寬度和高度,然後再分別呼叫getWidth()和getHeight()函式獲取修改後的寬度和高度。
程式碼如下:
#size.py
_width = 800
_height = 600
def change(w,h):
global _width
_width = w
global _height
_height = h
def getwidth():
global _width
return _width
def getHeight():
global _height
return _height
#main.py
from settings.size import *
if __name__ =='__main__':
change(1024, 768)
print('寬度: ', getwidth())
print('高度: ', getHeight())
執行結果如下:
例項04:生成由數字、字母組成的4位驗證碼
在IDLE中建立一個名稱為checkcode.py的檔案,然後在該檔案中匯入 Python標準模組中的random模組(用於生成隨機數),然後定義一個保仔驗讓碼的受裡,世片 1o書飲A乎書的哈證碼,最後輸出在該迴圈中,呼叫random模組提供的randrange()和 randint()方法生成符合要求的驗證碼,最後輸出生成的驗證碼。
程式碼如下:
import random
checkcode = ""
for i in range(4):
index = random.randrange(0, 4)
if index != i and index + 1 != i:
checkcode += chr(random.randint(97, 122)) # 生成a~z中的一個小寫字母
elif index + 1 == i:
checkcode += chr(random.randint(65, 90)) # 生成A~Z中的一個大寫字母
else:
checkcode += str(random.randint(1, 9))
print("驗證碼:", checkcode)
執行結果如下:
實戰一:大樂透號碼生成器
使用Random模組模擬大樂透號碼生成器。選號規則為:前區在1~35的範圍內隨機產生不重複的5個號碼,後區在1~12的範圍內隨機產生不重複的2個號碼。效果如圖8.18所示。
程式碼如下:
import random
def number():
a=[random.randint(1,35) for i in range(5)]
list1=[]
for i in a:
if i not in list1:
list1.append(i)
else:
i=random.randint(1,35)
list1.append(i)
list1.sort()
a=[str(i) for i in list1]
b=[random.randint(1,12) for i in range(2)]
o=[]
for i in b:
if i not in o:
o.append(i)
else:
i=random.randint(1,12)
o.append(i)
o.sort()
b=[str(i) for i in o]
c=[" "*5]
for i in range(5):
if len(a[i])==2:
for j in range(2):
if len(b[j])==2:
pass
else:
b[j]='0'+b[j]
else:
a[i]='0'+a[i]
g=a+c+b
for i in g:
print(i,end=" ")
print("大樂透號碼生成器")
k=int(input("請輸入要生成的大樂透號碼注數:"))
for i in range(k):
number()
print("")
執行結果如下:
實戰二:春節集五福
最近兩年流行春節集五福活動。現程式設計實現模擬春節集五福的過程。效果如圖8.19所示。
程式碼如下:
import random
# 抽五福的方法
def Ji_fu():
fus = ['愛國福', '富強福', '和諧福', '友善福', '敬業福']
fu = random.sample(fus, 1)
return fu
# 列印當前擁有的所有福
def fus(fu):
print('當前擁有的福:')
# 字典的鍵值對遍歷方法 列印福卡
for i, j in fu.items():
print(i, ':', j, '\t', end='')
# 判斷是否集齊五福
def fu_ready(fu):
# 設定一個集齊的標識flag,等於1表示集齊了
flag = 1
for i,j in fu.items():
if j == 0: # 有一個福卡的數量為0
flag = 0 # 標識為0,可以繼續集福
return flag
print('開始集福了…………')
# 定義一個五福字典 儲存使用者的福卡
fu = {'愛國福': 0, '富強福': 0, '和諧福': 0, '友善福': 0, '敬業福': 0}
# 用一個while語句迴圈獲取五福,直到集齊為止
count = 0 # 設定一個計數器,記錄集福的次數
while fu_ready(fu) == 0: # 集齊標識為0
input("\n按下<enter>鍵獲取福卡:")
getfu = Ji_fu()[0] # 進行抽卡
print('獲取了:', getfu)
fu[getfu] += 1 # 將抽到的卡加入五福字典,相應數量+1
fus(fu) # 呼叫方法列印當前擁有的五福
fu_ready(fu) # 呼叫方法判斷是否集齊
count +=1
print("\n***五福已經集齊,真是有福之人***")
print("一共集福",count,'次')
執行結果如下:
實戰三:封裝使用者的上網行為
當下很多人都會用一定的時間上網。現程式設計實現封裝使用者的上網行為,對使用者的上網時間進行統計,當上網時間過長時,給出提示。效果如圖8.20所示。
程式碼如下:
# 網頁瀏覽時間統計
def web(time):
print("瀏覽網頁:"+str(time)+"小時;")
return time
# 看視訊時間統計
def video(time):
print("看視訊:"+str(time)+"小時;")
return time
# 玩網路遊戲時間統計
def playgame(time):
print("玩網路遊戲:"+str(time)+"小時;")
return time
# 上網學習時間統計
def study(time):
print("上網學習:"+str(time)+"小時。")
return time
# 合計上網時間統計
def total(time):
print('今天上網時間共計:'+str(time)+"小時,",end=' ')
if time >= 8:
print("請保護眼睛,合理安排上網時間!")
else:
print("比較合理,但也要注意休息!")
name = '小明'
print(name, '上網時間、行為統計……')
t1 = web(1.5)
t2 = video(2)
t3 = playgame(3)
t4 = study(2)
time = t1 + t2 + t3 + t4
total(time)
執行結果如下:
實戰四:計算個人所得稅
編寫一個計算個人所得稅的程式,隨時掌握自己的工資需要繳納多少個人所得稅。效果如圖8.21所示。
程式碼如下:
# 根據月收入算個稅模組
def tax(monthmoney):
# 最低起徵點3500
ds = 3500
baoxian = 7662
# 養老保險
yanglao = monthmoney * 0.08
# 醫療保險
yiliao = monthmoney * 0.02
# 失業保險
shiye = monthmoney * 0.005
# 公積金
housem = monthmoney * 0.12
# 計算三險一金總額,如超過上限按上限算
demoney = yanglao + yiliao + shiye + housem
if demoney >= 7662:
demoney = 7662
# 計算應徵稅額
lastmoney = monthmoney - demoney - ds
# 按不同檔次徵稅,定義稅額taxes
if lastmoney <= 0:
taxes = 0
elif 0< lastmoney < 1500:
taxes = lastmoney * 0.03
elif 1500 <= lastmoney < 4500:
taxes = lastmoney * 0.1 - 105
elif 4500 <= lastmoney < 9000:
taxes = lastmoney * 0.2 - 555
elif 9000 <= lastmoney < 35000:
taxes = lastmoney * 0.25 - 1005
elif 35000 <= lastmoney < 55000:
taxes = lastmoney * 0.3 - 2002
elif 55000 <= lastmoney < 80000:
taxes = lastmoney * 0.35 - 5505
elif 80000 <= lastmoney:
taxes = lastmoney * 0.45 - 13505
# if lastmoney < 0:
# taxes = 0
return taxes
m = float(input("請輸入您的月收入總額:"))
taxes = tax(m)
print('您應徵個人所得稅金額為:{:.2f} 元'.format(taxes))
執行結果如下: