資源簡介 (共35張PPT)3.2.5函數與模塊2自定義函數可以復用的代碼函數可分為系統函數和用戶自定義函數。前面使用過的print( )和input( )函數都是系統函數自定義函數:一般包括函數名、參數、函數體和返回值等四部分。自定義函數的基本格式是:def 函數名(參數):函數體[return 返回值]2自定義函數可以復用的代碼def 函數名(參數):函數體[return 返回值]函數名:命名規則和變量名一樣參數:即形式參數,簡稱形參,是調用該函數需要提供的數據;參數是用來向函數傳遞值的,當有多個參數時,各個參數之間用逗號隔開函數體:是函數需要執行的具體代碼(計算過程)函數值:函數執行完后,由return語句將表達式值返回給調用者,結束函數。def Area(a,b,c):p=(a+b+c)/2s=(p*(p-a)*(p-b)*(p-c))**0.5return ss1=Area(3,4,5)s2=Area(5,12,13)print(s1+s2)完成函數的構造后,在程序中就可以根據需要調用該函數。def 函數名(參數):函數體[return 返回值]2自定義函數可以復用的代碼(1)無參數def x1():s=1for i in range(1,5):s=s*ireturn sprint(x1())(2)無返回值def x1():s=1for i in range(1,5):s=s*iprint(x1())討論:自定義函數x1的功能以及輸出的值。2自定義函數可以復用的代碼(3)有1個參數(4)有多個參數時,參數間用逗號分隔開。def x1(n):s=1for i in range(1,n+1):s=s*ireturn sprint(x1(4))print(x1(3)+x1(5))def x2(h1,h2):s=h1*h2return sprint(x2(2,3))print(x2(3,4)+x2(5,6))討論:自定義函數x1、x2的功能以及輸出的值。 1、形參:在定義函數階段定義的參數, 叫形式參數, 簡稱形參(相當于變量名) 2、實參:再調用函數的階段傳入的值, 叫實際參數, 簡稱實參(相當于變量值)形參和實參默認形參: 在定義階段就已經被賦值的,稱之為默認參數 特點:意味著在調用階段可以不賦值默認(行)形參def func(x, y=2):print (x, y)func(3)func(x=3, y=4)如果沒有傳遞實參,則會使用默認參數,當然也可以通過傳遞實參來替換它的默認值。3典例分析:輸入年份輸出生肖【編程】輸入一個農歷年份(>=1900),輸出該年對應的生肖,直到輸入0結束,運行結果如下所示:請輸入農歷年份,輸入0結束:2004生肖是:猴請輸入農歷年份,輸入0結束:3典例分析:輸入年份輸出生肖def shengxiao(y):L1=["鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬"]i=(y-1900)%12return L1[i]year=int(input("請輸入出生年份,輸入0結束:"))while year!=0:print("你的生肖是:",shengxiao(year))year = int(input("請輸入出生年份,輸入0結束:"))3.2.5函數與模塊模塊(庫)的導入及應用2導入模塊(庫)可以復用的代碼庫(模塊):Python 的一大特色是其豐富的模塊,基本上只要你能想到的常見開發需求,都能找到別人已經實現的庫直接使用,或者相關的工具/框架來輔助實現。import 庫名import 庫名 as 別名1.導入庫(模塊)2.指定別名:使用簡短的別名,讓你使用更方便。import mathimport math as m語法:import 模塊名(文具在哪個文具盒,相當于導入的是一個文具盒,是相對路徑)import語句from-import語句語法:from 模塊名 import 函數名(文具盒中哪個文具,是絕對路徑)from 模塊名 import **是通配符,表示導入文具盒中的全部文具,和import 模塊名效果相同。2導入模塊(庫)4math 庫(模塊)math庫中的常用常數函數與函數名稱 含義math.e 自然常數emath.pi 圓周率πmath.ceil(x) 對x向上取整,如x=1.2,返回2math. floor(x) 對x向下取整,如x=1.2,返回1math.pow(x,y) 指數運算,返回x的y次方(返回值為浮點型)math.log(x) 對數運算,默認基底為emath.sin(x)/math.cos(x) 正弦函數/余弦函數math.tan(x) 正切函數math.degrees(x) 弧度轉換成角度math.radians(x) 角度轉換成弧度4math 庫(模塊)試試這個:import mathx=int(input("number:"))x=math.sqrt(x)print("square rooting x:",x)試試這個:from math import sqrtx=int(input("number:"))x=sqrt(x)print("square rooting x:",x)輸入半徑求圓面積import mathr=float(input("半徑: "))p=math.pis=print("面積是: ",str(s))4math 庫(模塊)from math import pi r=float(input("半徑: "))s=print("面積是: ",str(s))p*math.pow(r,2)pi*(r**2)4典例分析:【快遞收費】快遞重量(千克) 快遞運費1千克以下(包含1千克) 9元1千克以上3千克以下(包含3千克) 11元3千克以上5千克以下(包含5千克) 14元5千克以上 5千克以內(含5千克)收14元,超過5千克部分,每千克加收2元,不足1千克按1千克計算某快遞公司為計算快遞運費編寫了Python程序,當用戶輸入快遞重量“單位是千克)后,根據快遞公司的收費標準,計算出快遞運費。快遞公司的具體收費標準如下表所示4典例分析:【快遞收費】import mathweight=float(input("請輸入快遞質量(kg:)"))if weight<=1:money=9elif weight<=3:money=11elif weight<=5:money=14else:money=14+2*print("你需支付的快遞運費是:",money,"元")math.ceil(weight-5)5random 庫(模塊)random庫(模塊):用來生成隨機數。random庫中的常用函數名稱 含義random.random() 隨機生成一個【0,1)范圍內的實數random.uniform(a,b) 隨機生成一個【a,b】范圍內的實數random.randint(a,b) 隨機生成一個【a,b】范圍內的整數random.choice(seq) 從序列的元素中隨機挑選一個元素如:random.choice(range(10)),即從0到9中隨機挑選一個整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序import randomcla=['(2)班','(3)班','(4)班','(5)班','(6)班']random.shuffle(cla)for c in cla:print(c,end=' ')5random 庫(模塊)random庫(模塊):用來隨機安排出場順序import randomxs=["小紅","小藍","小綠","小花","老張","老王","老李","老趙"]n=int(input("想抽幾個人 : "))print("1 人: ",random.choice(xs))print(n,"人: ",random.sample(xs,n))random.shuffle(xs)for i in xs:print(i, " ,", end='')5random 庫(模塊)random庫(模塊):用來抽獎5典例分析【隨機點名】編程:隨機點名。同時點名人數由用戶輸入,當用戶輸入0時結束程序。運行如右圖所示:5典例分析【隨機點名】import random as rdmd=['王佳慈','蘇鑒槐','楊金蘭','李炳臻','高倩南','段金麗','張葉芳','馮趙祝滿','袁楊洋','字葉楓','趙志鋒','吳麗娟','余艷','李艷秋','楊佳馨','董璇','楊樹宏','馮佳藝','楊漾槐','倪登城','周連琪','許佳雪','馬趙琴','段姝慧','段鈺','楊禮兵','莽麗潔','和琴艷','陳璞','羅福星','陳繞青','李曉育','畢麗汝','車江欒','李榮','徐苗','史小禾','劉賢','常曉會','蘇艷聰','趙波','韓左輝','白承絢','時雪緣']zrs= len(md)rs=int(input("輸入隨機點名人數或輸入0退出:"))while rs!=0:b=rd.sample(range(zrs),rs)i=0while ix=b[i]print(md[x],end=" ")i+=1print("")rs = int(input("輸入隨機點名人數或輸入0退出:"))Image模塊是PIL庫中的重要模塊# 獲得圖像的文件格式 geshi = img.format# 獲得圖像的高和寬 h, w = img.size# 獲得圖像的顏色模式 mo = img.mode# 將圖像旋轉45度后顯示 img.rotate(45).show()from PIL import Imageim=Image.open('小飛象.jpg') #打開小飛象.jpg圖像文件print(im.format) #獲取圖像文件格式print(im.size) #獲取圖像尺寸大小(以像素為單位表示圖像的寬度和高度)print(im.mode) #獲取圖像的顏色模式im.rotate(45).show() #將圖像旋轉45°后顯示6Image模塊from PIL import Imageim=Image.open("pil.jpg")print(im.format)print(im.size)print(im.mode)im.rotate(45).show()6Image模塊Image模塊是PIL庫(Python Imaging Library)中重要的模塊1.下面程序段定義的函數fa用于計算n!,請在劃線處填入合適的代碼?def fa(n):i=1s=1while i<=n:s*=ii=i+1a=int(input("請輸入整數a的值:"))print(fa(a))若輸入的值是是5,則輸出的結果為return s120隨堂練習2.以下程序段定義的函數reverse能夠得到整數n翻轉后的數字(例:1234翻轉后是4321)。def reverse(n):r = 0while n > 0:c = n % 10r = ①n = ②return ra=int(input("請輸入整數a的值:"))print(reverse(a))①的程序是②的程序是若輸入的值是是20221106,則輸出的結果為r*10+cn//10601122021. 局部變量在一個函數內或者語句塊內定義的變量稱為局部變量。局部變量的作用域僅限于定義它的函數體或語句塊中。def fun1(a):x=a+10……def fun2(a,b):x,y=a,b……變量的作用域在所有函數之外定義的變量稱為全局變量,它可以在多個函數中被引用。x = 30def func():x = 20print('x的值是', x)func()print('x的值是', x)2. 全局變量變量的作用域x的值是 20x的值是 30def myfun(a):print('a=',a)return a+1a=10print('a=',a)myfun(5)print('a=',a)a=10a=5a=10在函數內定義的變量稱為局部變量。只在函數體內有效在函數外定義的變量稱為全局變量。跳過困難題全局變量和局部變量的區別 (簡單)def Area(a,b,c):p=(a+b+c)/2s=(p*(p-a)*(p-b)*(p-c))**0.5return s地塊面積S=Area(3,4,5)+Area(5,12,13)3121354要用到兩次海倫公式,可用函數簡化能否再定義一個函數quad(),輸入3,4,5,12,13就能計算地塊的面積呢?def quad(a,b,c,d,e):s=Area(a,b,c)+Area(c,d,e)return s調用方法:quad(3,4,5,12,13)在函數體中,可以嵌套使用其他函數全局變量和局部變量的區別 (困難)思考:現在請看整個程序s=0def Area(a,b,c):p=(a+b+c)/2s=(p*(p-a)*(p-b)*(p-c))**0.5return sprint("s=",s)def quad(a,b,c,d,e):s=Area(a,b,c)+Area(c,d,e)print("s=",s)quad(3,4,5,12,13)print(quad(3,4,5,12,13))print("s=",s)已知兩個三角形的面積分別為30和6,請小組討論這段代碼的輸出結果是什么?答案:s= 36.0s= 36.0Nones= 0定義在函數內部的變量是局部變量,只能在其被聲明的函數內部訪問定義在函數外的全局變量可以在整個程序范圍內訪問。直接調用quad函數,并沒有把函數值賦值給外面的s,所以s仍然為0①②③④全局變量和局部變量的區別 (困難)3.以下程序能實現對輸入的數進行取整:n = input("請輸入一個數:")n = math.floor(float(n))print(n)該程序段劃線處應填入的代碼為若輸入的值是是3.14,則輸出的結果為import math3隨堂練習4.下面程序段可以生成10個[1,100]范圍內的隨機整數(允許重復)存放在列表numbers中:from random import randintnumbers = []for i in range(0, 10):n =numbers.append(n)print(numbers)該程序段劃線處應填入的代碼為該程序輸出的結果可能為randint(1, 100)隨堂練習Thanks 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫