循環:
while循環:
在循環開始之前對變量進行初始化
在循環體中重復執行相應的操作,并更新變量的值
循環結束時查看最終變量
將num賦值為1, 初始值為1,后面開始程序進行運算。直到輸出的值大于10,程序結束。
來個難一點的例子
gcd是最大公約數,1很明顯,是兩個值的最小公約數,所以從1開始循環。k賦值2,開始循環。當從2開始,小于等于這兩個整數的時候,k才有機會進行下一步的if語句,用這兩個整數除以k,余數等于0的時候,就是公約數,但是此時是需要同時滿足兩個整數整除的,所以此處用 and 語句,要是符合以上條件,之前符合的值就要被替換掉,因為我們需要的是最大的,所以往上逐漸遞增。滿足以上條件之后,k繼續加1,增大值來試試后面的條件符不符合。直到k大于n1或者大于n2。循環結束。
作業3-2:
這個作業讓我想了好久好久啊。我有點忘了什么是公倍數,上網查了一下例題,感受了一下。然而那只是一個感覺而已,記得小學課本是有三個條件的,但是具體是什么,只記得是賦值k,然后k>0,且k能被整除沒有余數。還是沒有具體步驟,去作業去偷看了一下同學們的作業。跟著敲下來,神奇的是,我完全復制后,整個頁面一動也不動,沒有輸出也沒有紅色警報,我不知道哪里出了錯。如下圖:
截圖給程序員小哥哥看,他說了一句:
“你輸入 hello world 試試看,看到底是環境問題還是代碼問題。”
這個思路!我要拿個小本記下來!
注意到的是,這個時候我輸入的所有代碼的前綴“In”后面的方括號都是*這樣的星號,而不是數字了。這可能是證明這個程序已經不能按著前面的順序繼續下去?
這個是昨晚發生的事情,解決不了,我就睡覺了。
今天一大早又開始,重新打開Anaconda,還是不能運行。截圖給給我們課程“解密大數據”的團隊QQ群里面,沒等團隊的小伙伴解答,我突然好像明白了,我賦值的是k,而前面公約數的時候k就已經被賦值過了,之前一家人的身高在前面賦值后,后面要在全家人身高里面找爸爸的身高時,并不用全部把數值重新輸一遍,都可以在底部進行數據的共享,所以,在同一個文件夾的賦值,是共用的!
也就是前面已經有k 的出現,到了后面再賦值k的時候,程序無法辨識這個k到底是上面的,還是這條語句的,結果就是沒有輸出。
這里我的問題是,難道這不算是一種錯誤類型嗎?為什么沒有紅色警報?
我的解決辦法就是把k變成i ,然后就行了:
開始想的是最大公約數是從1開始遞增到 n1 和 n2的值就結束,那么最小公倍數應該是從一個大數開始遞減,到n1 和 n2的值結束。
錯誤示范:
錯誤示范中都是賦值太多,總想創造新的賦值讓自己更清晰,但是賦值后才明白根本沒有想明白里面最簡單的邏輯,到了后面反而是太多賦值不知所措了。我們知道公約數和公倍數大于零,賦值的初始值可以設為1,從1開始遞增。(這里就不明白為什么求公約數的時候,k的初始值是2了。)
循環控制:break和 continue
使用break終止當前循環
使用continue終止當前迭代,繼續下一次循環迭代
讓我們先來個失敗的案例吧!
目瞪口呆。。。我覺得這個可以拿去玩“大家來找茬”,除了文字性描述沒有加上之外,還有就是空格鍵少打了,竟然第二次能夠得出正確結果?到底是什么問題?
嵌套循環(Nested Loops)
一個循環體中,包含了另一個循環
第一個循環稱為外部循環,第二個循環稱為內部循環
外部循環每迭代一次,內部循環都會執行它全部的迭代。
用嵌套循環打印一個九九乘法表:
為了輸出整齊好看,使用format函數,表示這樣的結果需要占4個位置(‘4d')。因為默認的print語句是會直接換行的,所以這里用 ?end=‘ ’ ?表示打印結果后不需要進行換行。‘\n’ 表示一個換行符。
在 i 的循環之中,和 j 的值先從1到9開始相乘,然后打印第一行的數值,直到 j 大于9,就換行,然后開始 i=2 和 j 值的相乘。循環往復。直到 i 的值大于9。
自定義函數
自定義函數,需要定義函數名和相應的執行語句塊,然后就可以在程序中反復調用該函數。
使用def開頭,后接函數名和參數,并用冒號結束該行;之后是代表函數體的代碼組,需要縮進。
參數由一對小括號包圍,其個數可以是0個,1個或多個,如果函數名后接空括號表明這個函數沒有指定參數。
調用函數時,使用函數名加上一對小括號,括號內是函數的參數。
老師說,自定義函數好處多多,具體是什么,應該后面會講到的。
為什么我這里不講呢?因為我都沒聽明白??
不過跟著打下面這個例子之后,我好像明白了一點點,相同的算法要是有很大批量的話,這個自定義函數就簡單多了,前面辛苦點打出一個基礎款,后面直接代入具體數值就可以了 。
函數可以沒有指定參數,也可以沒有返回值:
函數內部也可以調用函數:
案例:自定義一個每周工資計算器函數
輸入你的姓名,工作時間,和單位工資
如果一周工作時間大于40小時,加班時間按照常規工資1.5倍計算
先熟悉一個語法,下面是第一步和第二部:
然后我們自定義一個函數,這個函數叫salary_calculator,工資計算器。把里面的計算程序和賦值都定義好,然后就有一個很好用的輸入名字和加班時間,就能輸出一個月工資有多少的工資計算器啦!
這里要千萬記得,每次打中文和英文的切換,給你們看一個錯誤示范
這個輸出讓我一臉懵逼,我明明是按照老師的代碼,一字不差地打的啊!為啥又會出現紅色警報?用我視力5.3點視力來回掃,我都沒有看出哪里和老師的不同,于是截圖到我們課堂學習的QQ群,有小伙伴說,標點符號打的時候可能沒有切換回英文吧。恍然大悟!
重新試了一下,果然是!所以各位一定要記得:
切換中英文環境很重要!!!
切換中英文環境很重要!!!
切換中英文環境很重要!!!
緊張的最后一步來了,我想著要是我自己能學會打出一個我們公司的工資計算表,那得多牛逼啊!心里在笑,很大聲,不知道為什么能那么開心??????
然而這輸出讓我驚呆了,老師的最后一個數 明明5500的啊!為啥我的是1800 ?!!!這些人的錢呢?哪去了?
回看老師和我的代碼有什么不一樣,原來我最后一行沒有加上去,就是沒有合計這一項,這時不禁心虛。。。剛剛的豪情萬丈啊!現在在谷底。。。
然后加入最后一句,運行結果是這樣的:
其實它是需要一步一步輸入姓名/工作小時數/單位時間工資的,第一步是下圖:
來吧,讓我們在紅色警報的嘲笑中繼續堅韌生存吧~~??