學習目標
- 了解魔法積木的使用——自定義函數
- 了解魔法積木的結果反饋——自定義函數返回值
- 了解魔法積木的原料傳遞——自定義函數傳參
- 了解魔法積木的類型分類——類與對象
推薦
1.《備受好評的看得懂的C語言入門教程》
目錄
第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂
第二篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(二)魔法實習生第一步了解魔杖的使用
第三篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(三)使用初始魔法跟編程魔法世界打個招呼吧
第四篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(四)了解魔法百寶箱列表、字典及基本數據類型
第五篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(五)我的魔法竟然有了一絲邏輯
第六篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(六)精簡魔法更強大
本系列教程將會以一種“魔法世界”的形式編寫,歡迎各位支持。
歡迎大家關注公眾號,公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍2份喲~并且公眾號會更快更新喲。
一、了解魔法世界中的積木
我們通過之前章節的學習了解了一些基本的python編程,但是在我們編寫代碼過多的時候,將會導致代碼雜亂,并且整體邏輯不便于查看,出現一個錯誤則需要通過較多的流程去排錯。那么我們的代碼有一部分是通過積木搭建的方式組合成代碼,弱一部分出錯,就會很快的定位錯誤在哪一個積木塊里面,這時就只需要修改那個積木內的代碼就可以修正錯誤。這樣做是不是就可以極的使我們的代碼結構清晰,并且易于修改錯誤了呢?答案當然是對的。
1.1 了解自定義函數的編寫
我們在編寫一個點餐系統的時候,若經常會提示菜單欄,讓用戶進行選擇。若用戶進入了其它頁面,再返回首頁的時候又需要出新菜單的提示,那我們又需要重新輸出一次。這樣是不是就特別麻煩?我們可以看看以下示例:
print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')c=int(input('請輸入菜單序號:'))
if c:print('正在連接付款...')b=input('任意鍵返回...')if b:print('正在返回...')print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')
以上示例只是作為模擬當時情景,代碼不作為功能的參考。代碼最開始,提示了菜單內容,代碼如下:
print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')
提示內容后,接收用戶輸入一個值。用戶輸入的值,在此輸入任意值均可,判斷代碼的編寫:
if c:
以上代碼對c變量進行判斷,只要不是為空,那么任意數字都行。在python中,空的值最終判斷為False假,若有值都將為True真。隨后模擬連接支付系統,長時間則隨意輸入一個值確定后返回:
c=int(input('請輸入菜單序號:'))
if c:print('正在連接付款...')b=input('任意鍵返回...')if b:print('正在返回...')
接著再重新將菜單欄輸出。這是的菜單欄明顯是重復的代碼,使用了兩次;這樣的代碼看起來是不是太繁瑣了?簡直從視覺上就增加了難度。不過不用擔心,python提供了自定義函數讓我們解決這個問題。自定義函數表示自己可以定義的功能塊,這個功能塊可以重復使用,這個功能塊可以有多條代碼組成。
現在我們將菜單欄定義成一個自定義函數。定義成一個自定義函數的語法為def開頭,后接一個空格;空格后接一串字符表示該功能塊的名稱;隨后一堆圓括號,在圓括號后打上一個冒號。代碼如下:
def caidan():
以上代碼使用def開頭,表示我要編寫一個自定義函數,隨后接上名稱caidan,之后接一堆圓括號,一個冒號結束;接下來需要在函數中編寫函數的代碼,此時我們需要統一縮進格式,至少有一個:
def caidan():#這里寫caidan這個功能的代碼#這里寫caidan這個功能的代碼
我們可以直接把菜單提示的代碼全部復制黏貼到這個自定義函數caidan中:
def caidan():
print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')
那如上編寫對了嗎?錯了!一定要記得自定義函數后,你需要編寫該函數的功能一定要緊接著在函數名下使用縮進表示結構;所以該代碼的正確寫法應該如下:
def caidan():print('請選擇你要吃的食物序號進去付款')print('1.宮保雞丁')print('2.香辣雞翅')print('3.糯米飯')print('3.餃子')print('4.沙縣經典三件套')print('5.五花八門大丸子')
這是自定義函數功能已經編寫完畢,那如何使用呢?很簡單,你們應該記得print的使用方法吧?print和input都是函數,這些是系統自帶的函數;它們的使用方法是在函數名后加一對括號。如input();我們自己編寫的函數使用方法一致,直接函數名后加一對括號就可以完成自定義函數的使用,如:caidan()。先看這一部分的完整代碼:
def caidan():print('請選擇你要吃的食物序號進去付款')print('1.宮保雞丁')print('2.香辣雞翅')print('3.糯米飯')print('3.餃子')print('4.沙縣經典三件套')print('5.五花八門大丸子')caidan()
c=int(input('請輸入菜單序號:'))
if c:print('正在連接付款...')b=input('任意鍵返回...')if b:print('正在返回...')print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')
以上代碼在頭部就定義了自定義函數caidan,并且在caidan函數中編寫了功能;在函數下的代碼第一行,直接使用了caidan()調用函數,這是caidan()就等于函數內的代碼:
print('請選擇你要吃的食物序號進去付款')
print('1.宮保雞丁')
print('2.香辣雞翅')
print('3.糯米飯')
print('3.餃子')
print('4.沙縣經典三件套')
print('5.五花八門大丸子')
在程序運行時應該顯示函數中的代碼運行結果:
從運行結果上可以得知,使用caidan()替代了那一大串代碼,那我們也可以把原本代碼中的底部的菜單提示給取消;代碼如下:
def caidan():print('請選擇你要吃的食物序號進去付款')print('1.宮保雞丁')print('2.香辣雞翅')print('3.糯米飯')print('3.餃子')print('4.沙縣經典三件套')print('5.五花八門大丸子')caidan()
c=int(input('請輸入菜單序號:'))
if c:print('正在連接付款...')b=input('任意鍵返回...')if b:print('正在返回...')caidan()
運行結果:
運行結果一致,但是代碼少了很多,看起來就清爽多了。
1.2 了解有參數的自定義函數
還記得我們前幾節內容中完成的兩個數做加法運算的內容嗎?需求是用戶輸入兩個整數,計算機自動算出兩個數之和,并且會顯示出來告知我們。我們可以使用函數完成這個功能,方便我們之后需要使用到該功能的時候直接調用這個函數就可以了。
首先我們定義個函數,名為jiafa:
def jiafa():
這個函數需要傳入兩個值,函數只負責做加法運算,那如何編寫呢?這時需要哦們添加兩個參數,參數是指你需要用于“計算”的數字;就像平常你使用電飯鍋,電飯鍋的參數可以是米和水,因為電飯鍋的作用是做飯,沒米沒水怎么做飯?我們的兩數加法函數也一樣,沒有數字怎么樣進行計算?所以我們需要傳入兩個值,這兩個值就是參數。參數寫在jiafa后的圓括號內;參數我們可以使用兩個變量代替,例如數1變量:s1,數2變量:s2,那么代碼為:
def jiafa(s1,s2):
這樣就表示這個函數可以傳入2個參數,當然可以更多參數,在此只是做為一個舉例。傳入多個參數需要使用逗號對參數進行間隔。接收數后我們接下來就可以開始對這兩個變量進行計算。兩個變量相加那就是:
print(s1+s2)
完整jiafa函數代碼為:
def jiafa(s1,s2):print(s1+s2)
那如何使用呢?還記得print怎么傳參數嗎?print需要將顯示的值傳入到圓括號中;自定義函數的參數傳遞也是類似。我們傳入兩個數,一個1和一個10,代碼寫成:
jiafa(1,10)
完整代碼如下:
def jiafa(s1,s2):print(s1+s2)jiafa(1,10)
運行結果為:
這是可以看到,輸入1和10,他們之間使用逗號進行間隔,其中1的值將賦值給s1,10的值存入到s2,這是計算s1變量與s2變量的相加,那么輸出結果為11。
那我們修改代碼,使用input接收我們輸入的兩個值,再進行計算,代碼為:
def jiafa(s1,s2):print('兩個數相加等于:',s1+s2)a=int(input('請輸入一個數字:'))
b=int(input('請輸入另一個數字:'))
jiafa(a,b)
運行結果為:
1.3 了解有返回值的自定義函數
我現在突然感覺,我不想在函數里面輸出,我只想拿到結果,輸不輸出我想按照當時情況而定,那這個需求怎么實現呢?很簡單,我們把計算的值返回就可以了,這樣我們的函數只做計算,并不進行輸出;輸出與否按照當時情況而定,靈活的運用。
函數的返回使用return,在自定義函數中最末位一行使用return,后接一個空格,隨后一個值;這時整個函數運行完后將會有一個結果,這個結果就是使用return返回出去的值。例如我們修改1.2中的代碼:
def jiafa(s1,s2):return s1+s2
與原程序相比少了輸出,多了一個return,并且return后接一個空格,空格后接了兩個變量相加的表達式;這個表達式并不是直接的值,不過不用擔心,表達式最終會自動計算成一個值,使用return則將該值返回。若不理解也沒關系,我們可以寫成:
def jiafa(s1,s2):r=s1+s2return r
這時使用變量r接收了s1與s2的加法運算的值,最終返回r也是一樣的。
那么我們可以在代碼中調用函數后,將函數最終返回的結果賦給一個變量:
c=jiafa(a,b)
這時jiafa運行完自己函數內所有的代碼后,返回一個值,這個值將給予c變量。我們再使用print輸出c即可:
print('加法計算結果為:',c)
或者不使用變量接收,直接使用函數返回值輸出也行:
print('加法計算結果為:',jiafa(a,b))
最終代碼如下:
def jiafa(s1,s2):return s1+s2a=int(input('請輸入一個數字:'))
b=int(input('請輸入另一個數字:'))
print('加法計算結果為:',jiafa(a,b))
運行結果如下:
二、總結
- 了解自定義函數需要使用def進行定義,并且代碼內容需要使用縮進
- 了解自定義函數參數的使用方法,并且多個參數使用逗號進行間隔
- 了解自定義函數的返回值使用return進行返回