《假如編程是魔法之零基礎看得懂的Python入門教程 》——(七)我把魔法變成了積木

學習目標

  1. 了解魔法積木的使用——自定義函數
  2. 了解魔法積木的結果反饋——自定義函數返回值
  3. 了解魔法積木的原料傳遞——自定義函數傳參
  4. 了解魔法積木的類型分類——類與對象

推薦

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))

運行結果如下:
在這里插入圖片描述

二、總結

  1. 了解自定義函數需要使用def進行定義,并且代碼內容需要使用縮進
  2. 了解自定義函數參數的使用方法,并且多個參數使用逗號進行間隔
  3. 了解自定義函數的返回值使用return進行返回

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287697.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Activity的getReferrer():如何在Activity中獲取調用者?

http://blog.csdn.net/u013553529/article/details/53856800 關于Activity的getReferrer()之一:如何在Activity中獲取調用者? http://blog.csdn.net/u013553529/article/details/53882440 關于Activity的getReferrer()之二:調用者的包名是如何…

java之七 高級類設計

static的用法 有時你希望定義一個類成員,使它的使用完全獨立于該類的任何對象。通常情況下,類成員必須通過它的類的對象訪問,但是可以創建這樣一個成員,它能夠被它自己使用,而不必引用特定的實例。在成員的聲明前面加上…

【遙感數字圖像處理】實驗:Erdas 軟件的認識與使用

Erdas軟件下載地址:《GISer福音來了:測繪地理信息類專業軟件版本大全匯總下載!》 1.1 簡介 ERDAS IMAGINE 是美國 ERDAS(Earth Resource Data Analysis System)公司開發的遙感圖像處理系統,它以其先進的圖像處理技術,友好、靈活的用戶界面和操作方式,面向廣闊應用領域…

import 別名_Python基礎找茬系列09--import和from-import的引用區別

一、語法區別二、兩種導包在內存上的區別一圖看懂import與from-import的區別無論是使用import隱式導包還是form-import顯示導包,整個模塊都會被加載到內存中例如:from test import b,整個模塊依舊進入內存,因為如果只有函數b進入內存&#xf…

Android Studio之提示Gradle sync failed: Plugin with id ‘com.novoda.bintray-release‘ not found.

1 問題 導入別人的模塊到Android Studio,錯誤提示如下 Gradle sync failed: Plugin with id com.novoda.bintray-release not found. 2 解決辦法 在project的build.gradle里面添加如下 dependencies {classpath com.android.tools.build:gradle:3.5.2//加上下面的代碼classp…

設計一個限速器

限速器 (Rate Limiter) 相信大家都不會陌生,在網絡系統中,限速器可以控制客戶端發送流量的速度,比如 TCP, QUIC 等協議。而在 HTTP 的世界中, 限速器可以限制客戶端在一段時間內發送請求的次數,如果超過設定的閾值&…

C語言新手的100個報錯解法 已更新11個錯誤

學習目標 收藏文章報錯可以過來查 [更新數據] 此文將會持續更新,收錄錯誤信息,若本文沒有收錄記得聯系我~ CSDN 1_bit 持續更新中… [發布日期:2020年11月16日 14:55:00] 更新: 暫無 C語言教程 C語言真的很難嗎?那…

【遙感數字圖像處理】實驗:遙感圖像顯示與數據輸入/輸出(Erdas版)

一、實驗平臺:Erdas 9.1 二、實驗內容:視窗功能簡介、圖形和圖像顯示操作、實用菜單操作、顯示操作、AOI菜單操作、矢量和柵格菜單、數據的輸入輸出等。 三、實驗目的:初步了解Erdas的主要功能模塊,在此基礎上,掌握視…

在Windows Server2016中安裝SQL Server2016(轉)

在Windows Server2016中安裝SQL Server2016(轉) 轉自: http://blog.csdn.net/yenange/article/details/52980135 參考: SQL Server2016企業版 附全版本key - moonpure的專欄 - CSDN博客 http://blog.csdn.net/moonpure/article/d…

mysql的復雜查詢_mysql復雜查詢

所謂復雜查詢,指涉及多個表、具有嵌套等復雜結構的查詢。這里簡要介紹典型的幾種復雜查詢格式。一、連接查詢連接是區別關系與非關系系統的最重要的標志。通過連接運算符可以實現多個表查詢。連接查詢主要包括內連接、外連接等。假設有Student和Grade兩個表如下&…

數據庫調優要點紀要

數據庫瓶頸一般在IO和CPU 1、少用group by, order by 2、通過索引來排序(不要所有字段都用索引,因為insert、update要重構索引很耗時) 3、避免select * 4、少用join 5、join和子查詢,還是用join來代替子查詢吧 6、少用or 7、用uni…

Unity3D 之UGUI 滑動條(Slider)

這里來講解下UGUI 滑動條(Slider)的用法 控件下面有三個游戲對象 Background -->背景 Fill Area --> 前景區域 Handle Slide Area --> 滑動條 Slider的屬性 其他幾個設置和其他控件都差不多,這里來講解幾個特有的屬性。 Direction -->方向 Whole Number…

Android Studio導入別人的module提示錯誤Plugin with id ‘com.jfrog.bintray‘ not found.

1 問題 Android Studio導入別人的module提示錯誤如下 Plugin with id com.jfrog.bintray not found. Plugin with id com.github.dcendents.android-maven not found 2 解決辦法 在我們的項目的build.gradle添加如下配置 buildscript {repositories {google()jcenter()}dep…

C語言真的很難嗎?那是你沒看這張圖,化整為零輕松學習C語言。

真不難 C語言難不難?這個問題是相對的,對于找到合適方法學習C語言的同學想必是覺得很簡單;但對于一部分同學來說,沒有眾觀全局就會誤以為剛入門就需要學習龐大的知識,學著學著開始看不懂,由于心理作怪&…

【中間件】.net Core中使用HttpReports進行接口統計,分析, 可視化, 監控,追蹤等...

HttpReports 基于.Net Core 開發的APM監控系統,使用MIT開源協議,主要功能包括,統計, 分析, 可視化, 監控,追蹤等,適合在微服務環境中使用。官方地址:https://www.yuque.com/httpreports/docs/u…

【遙感數字圖像處理】實驗:遙感影像輻射糾正(大氣糾正)完整操作圖文教程(Erdas版)

一、實驗平臺:Erdas 9.1 二、實驗數據:dmtm.img 三、實驗內容:利用回歸分析法校正影像 四、實驗原理:大氣散射只影響短波波段,長短波進行對比,找出影響短波的程輻射值,將其減去 五、實驗目的:掌握回歸分析法校正影像的方法及步驟,能熟練地對影像進行校正 六、實…

Android之開源視頻壓縮框架RxFFmpeg的commands設置

1 Android視頻壓縮框架 地址:https://github.com/microshow/RxFFmpeg 2 問題 用ffmpeg進行壓縮的時候,我們需要采用ffmpeg命令壓縮官網給的命令如下 String text = "ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emul…

Acitivty生命周期

為什么80%的碼農都做不了架構師?>>> Acitivty 有七個生命周期: onCreate:當第一次調用一個Activity就會執行onCreate方法 onStart:當Activity處于可見狀態的時候就會調用onStart方法 onResume:當Activity可…

listview嵌套gridview

1.首先要自定義一個繼承gridview的類 public class MyGridView extends GridView {public boolean hasScrollBar true;public MyGridView(Context context) {super(context);}public MyGridView(Context context, AttributeSet attrs) {super(context, attrs);}Overrideprotec…

還不懂你現在學習的編程語言能做什么?還不懂如何進階?過來看圖

前言說七說八 本篇文章的配圖標注、內容并不代表僅有;本篇僅以個人經驗及當前大學(大專、本科)相關課程作對比,列出比較常規的語言發展走向及相關技術;再次重申,本圖及本文所涉及的技術發展走向并不代表著…