文科生學(xué)Python系列6: 循環(huán)/自定義函數(shù)

循環(huán):

while循環(huán):

在循環(huán)開始之前對變量進行初始化

在循環(huán)體中重復(fù)執(zhí)行相應(yīng)的操作,并更新變量的值

循環(huán)結(jié)束時查看最終變量

打印一組數(shù)

將num賦值為1, 初始值為1,后面開始程序進行運算。直到輸出的值大于10,程序結(jié)束。

來個難一點的例子

最大公約數(shù)的查找

gcd是最大公約數(shù),1很明顯,是兩個值的最小公約數(shù),所以從1開始循環(huán)。k賦值2,開始循環(huán)。當(dāng)從2開始,小于等于這兩個整數(shù)的時候,k才有機會進行下一步的if語句,用這兩個整數(shù)除以k,余數(shù)等于0的時候,就是公約數(shù),但是此時是需要同時滿足兩個整數(shù)整除的,所以此處用 and 語句,要是符合以上條件,之前符合的值就要被替換掉,因為我們需要的是最大的,所以往上逐漸遞增。滿足以上條件之后,k繼續(xù)加1,增大值來試試后面的條件符不符合。直到k大于n1或者大于n2。循環(huán)結(jié)束。

作業(yè)3-2:

作業(yè)3-2

這個作業(yè)讓我想了好久好久啊。我有點忘了什么是公倍數(shù),上網(wǎng)查了一下例題,感受了一下。然而那只是一個感覺而已,記得小學(xué)課本是有三個條件的,但是具體是什么,只記得是賦值k,然后k>0,且k能被整除沒有余數(shù)。還是沒有具體步驟,去作業(yè)去偷看了一下同學(xué)們的作業(yè)。跟著敲下來,神奇的是,我完全復(fù)制后,整個頁面一動也不動,沒有輸出也沒有紅色警報,我不知道哪里出了錯。如下圖:

沒有反應(yīng)的運行

截圖給程序員小哥哥看,他說了一句:

“你輸入 hello world 試試看,看到底是環(huán)境問題還是代碼問題?!?/b>

這個思路!我要拿個小本記下來!

注意到的是,這個時候我輸入的所有代碼的前綴“In”后面的方括號都是*這樣的星號,而不是數(shù)字了。這可能是證明這個程序已經(jīng)不能按著前面的順序繼續(xù)下去?

這個是昨晚發(fā)生的事情,解決不了,我就睡覺了。

今天一大早又開始,重新打開Anaconda,還是不能運行。截圖給給我們課程“解密大數(shù)據(jù)”的團隊QQ群里面,沒等團隊的小伙伴解答,我突然好像明白了,我賦值的是k,而前面公約數(shù)的時候k就已經(jīng)被賦值過了,之前一家人的身高在前面賦值后,后面要在全家人身高里面找爸爸的身高時,并不用全部把數(shù)值重新輸一遍,都可以在底部進行數(shù)據(jù)的共享,所以,在同一個文件夾的賦值,是共用的!

也就是前面已經(jīng)有k 的出現(xiàn),到了后面再賦值k的時候,程序無法辨識這個k到底是上面的,還是這條語句的,結(jié)果就是沒有輸出。

這里我的問題是,難道這不算是一種錯誤類型嗎?為什么沒有紅色警報?

我的解決辦法就是把k變成i ,然后就行了:

求48和78的

開始想的是最大公約數(shù)是從1開始遞增到 n1 和 n2的值就結(jié)束,那么最小公倍數(shù)應(yīng)該是從一個大數(shù)開始遞減,到n1 和 n2的值結(jié)束。

錯誤示范

找公倍數(shù)的錯誤示范

錯誤示范中都是賦值太多,總想創(chuàng)造新的賦值讓自己更清晰,但是賦值后才明白根本沒有想明白里面最簡單的邏輯,到了后面反而是太多賦值不知所措了。我們知道公約數(shù)和公倍數(shù)大于零,賦值的初始值可以設(shè)為1,從1開始遞增。(這里就不明白為什么求公約數(shù)的時候,k的初始值是2了。)

循環(huán)控制:break和 continue

使用break終止當(dāng)前循環(huán)

使用continue終止當(dāng)前迭代,繼續(xù)下一次循環(huán)迭代

讓我們先來個失敗的案例吧!

錯誤示范
正確示范

目瞪口呆。。。我覺得這個可以拿去玩“大家來找茬”,除了文字性描述沒有加上之外,還有就是空格鍵少打了,竟然第二次能夠得出正確結(jié)果?到底是什么問題?

嵌套循環(huán)(Nested Loops)

一個循環(huán)體中,包含了另一個循環(huán)

第一個循環(huán)稱為外部循環(huán),第二個循環(huán)稱為內(nèi)部循環(huán)

外部循環(huán)每迭代一次,內(nèi)部循環(huán)都會執(zhí)行它全部的迭代。

用嵌套循環(huán)打印一個九九乘法表:

九九乘法表

為了輸出整齊好看,使用format函數(shù),表示這樣的結(jié)果需要占4個位置(‘4d')。因為默認的print語句是會直接換行的,所以這里用 ?end=‘ ’ ?表示打印結(jié)果后不需要進行換行?!甛n’ 表示一個換行符。

在 i 的循環(huán)之中,和 j 的值先從1到9開始相乘,然后打印第一行的數(shù)值,直到 j 大于9,就換行,然后開始 i=2 和 j 值的相乘。循環(huán)往復(fù)。直到 i 的值大于9。

自定義函數(shù)

自定義函數(shù),需要定義函數(shù)名和相應(yīng)的執(zhí)行語句塊,然后就可以在程序中反復(fù)調(diào)用該函數(shù)。

使用def開頭,后接函數(shù)名和參數(shù),并用冒號結(jié)束該行;之后是代表函數(shù)體的代碼組,需要縮進。

參數(shù)由一對小括號包圍,其個數(shù)可以是0個,1個或多個,如果函數(shù)名后接空括號表明這個函數(shù)沒有指定參數(shù)。

調(diào)用函數(shù)時,使用函數(shù)名加上一對小括號,括號內(nèi)是函數(shù)的參數(shù)。

老師說,自定義函數(shù)好處多多,具體是什么,應(yīng)該后面會講到的。

為什么我這里不講呢?因為我都沒聽明白??

不過跟著打下面這個例子之后,我好像明白了一點點,相同的算法要是有很大批量的話,這個自定義函數(shù)就簡單多了,前面辛苦點打出一個基礎(chǔ)款,后面直接代入具體數(shù)值就可以了 。

用自定義函數(shù)計算最大公約數(shù)


函數(shù)可以沒有指定參數(shù),也可以沒有返回值:

沒有指定參數(shù)和返回值的函數(shù)


函數(shù)內(nèi)部也可以調(diào)用函數(shù):

調(diào)用內(nèi)部函數(shù)的函數(shù)


案例:自定義一個每周工資計算器函數(shù)

輸入你的姓名,工作時間,和單位工資

如果一周工作時間大于40小時,加班時間按照常規(guī)工資1.5倍計算

先熟悉一個語法,下面是第一步和第二部:

顯示的第一步
第二步

然后我們自定義一個函數(shù),這個函數(shù)叫salary_calculator,工資計算器。把里面的計算程序和賦值都定義好,然后就有一個很好用的輸入名字和加班時間,就能輸出一個月工資有多少的工資計算器啦!

工資計算器的自定義函數(shù)

這里要千萬記得,每次打中文和英文的切換,給你們看一個錯誤示范

工資計算器的錯誤示范

這個輸出讓我一臉懵逼,我明明是按照老師的代碼,一字不差地打的??!為啥又會出現(xiàn)紅色警報?用我視力5.3點視力來回掃,我都沒有看出哪里和老師的不同,于是截圖到我們課堂學(xué)習(xí)的QQ群,有小伙伴說,標(biāo)點符號打的時候可能沒有切換回英文吧?;腥淮笪?!

重新試了一下,果然是!所以各位一定要記得:

切換中英文環(huán)境很重要?。?!

切換中英文環(huán)境很重要?。?!

切換中英文環(huán)境很重要!??!

緊張的最后一步來了,我想著要是我自己能學(xué)會打出一個我們公司的工資計算表,那得多牛逼??!心里在笑,很大聲,不知道為什么能那么開心??????

“怎么會是這個結(jié)果?!”

然而這輸出讓我驚呆了,老師的最后一個數(shù) 明明5500的?。樯段业氖?800 ??。?!這些人的錢呢?哪去了?

回看老師和我的代碼有什么不一樣,原來我最后一行沒有加上去,就是沒有合計這一項,這時不禁心虛。。。剛剛的豪情萬丈?。‖F(xiàn)在在谷底。。。

左邊是老師的運行,右邊是我的

然后加入最后一句,運行結(jié)果是這樣的:

計算工資結(jié)果

其實它是需要一步一步輸入姓名/工作小時數(shù)/單位時間工資的,第一步是下圖:

輸入名字



來吧,讓我們在紅色警報的嘲笑中繼續(xù)堅韌生存吧~~??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容