Python練習(xí)題詳解之常用操作符(小白友好)
你好蛤铜!歡迎來(lái)到Python練習(xí)題詳解系列官研。為了讓小白(也就是我本人)更好的理解代碼,打好編程基礎(chǔ)泻骤,我決定仔細(xì)地解說(shuō)一些練習(xí)題漆羔。歡迎觀看!奧利給狱掂!
在開(kāi)始練習(xí)題詳解前演痒,我們先簡(jiǎn)單看看,操作符究竟是什么東東呢~
Python的常用操作符包括但不限于算術(shù)趋惨,比較鸟顺,賦值,邏輯等操作符器虾。
算術(shù)操作符
算術(shù)操作符就是我們熟知的加減乘除讯嫂,值得注意的有以下幾點(diǎn):
1. 在python中,/ 代表有小數(shù)點(diǎn)的精確除法兆沙,eg. 6 / 4 = 1.5
????而 //? 所運(yùn)算的除法則舍棄了小數(shù)點(diǎn)后面的數(shù)字欧芽, 讓答案變成最接近商的整數(shù)?eg. 6 // 4 = 1
2. % 代表計(jì)算除法的余數(shù),eg. 6 % 4 = 2
3. ** 代表冪運(yùn)算葛圃,eg. 2 ** 3 = 8
4. 優(yōu)先級(jí)問(wèn)題
先乘除 后加減千扔,遇到括號(hào)先算括號(hào)里面的。
冪操作里装悲,**比左側(cè)優(yōu)先級(jí)高昏鹃,比右側(cè)優(yōu)先級(jí)低尚氛。(也就是說(shuō)***的右側(cè)優(yōu)先于左側(cè))
也就是說(shuō) -3 ** 2 = -9
因?yàn)?- 3在左側(cè)诀诊,**比 -3優(yōu)先級(jí)高,運(yùn)算出來(lái)就是 -(3**2)
如果是 3 ** -2阅嘶,那就等于 0.1111111属瓣,因?yàn)橛覀?cè)優(yōu)先級(jí)高载迄,就是3的負(fù)二次方。
Python支持的數(shù)字運(yùn)算如下:
比較運(yùn)算符
邏輯運(yùn)算符
邏輯操作符包括 and 抡蛙,or 护昧,和 not。也就是我們熟知的與或非粗截。
and 代表惋耙,當(dāng)左右同時(shí)為T(mén)rue,則返回True熊昌,
or 代表绽榛,左邊或者右邊任意一邊為T(mén)rue,則返回True婿屹,
not 代表一個(gè)一元操作符灭美,他會(huì)返回一個(gè)相反類(lèi)型的值,所以not true 就是 false昂利;
優(yōu)先級(jí)問(wèn)題:NOT 優(yōu)先 AND 優(yōu)先 OR
賦值運(yùn)算符
編程世界里賦值就是等于號(hào)届腐,a = b? 就是把 b 的值賦給 a,
還有幾個(gè)比較特殊的賦值符號(hào)蜂奸,讓我們一起來(lái)看看~(圖片來(lái)自W3School)
啊噢犁苏,好像把知識(shí)點(diǎn)都po上來(lái)了~復(fù)習(xí)復(fù)習(xí)也挺好的!話不多說(shuō)扩所,馬上做題傀顾!
題目1:
請(qǐng)計(jì)算:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
(旁白:第一眼看這道題目,我是拒絕的碌奉,但題目還是要做的嘛短曾!怎么做咧?)
思路:
首先赐劣,我們應(yīng)該想到邏輯運(yùn)算符的優(yōu)先級(jí)問(wèn)題:NOT 優(yōu)先于 AND 優(yōu)先于 OR
所以嫉拐,我們根據(jù)這個(gè)優(yōu)先級(jí)來(lái)給我們的式子加上括號(hào)~加完括號(hào)如下:
(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
加完括號(hào),兔子沾沾自喜魁兼,以為已經(jīng)接近答案婉徘,其實(shí)一看,what咐汞?盖呼!3 and 4是什么東東,要怎么計(jì)算吖化撕。
所以几晤,我們引入一個(gè)短路邏輯。(不是腦子短路了噢~)
短路邏輯規(guī)則如下:
若 or 的左側(cè)邏輯值為 True 植阴,則輸出 or 左側(cè)表達(dá)式 蟹瘾。如圖圾浅,4是true,那么直接輸出4憾朴。
若 or 的左側(cè)邏輯值為 False 狸捕,則輸出or右側(cè)的表達(dá)式。如圖众雷,0是false灸拍,那么直接輸出4。
若 and 的左側(cè)邏輯值為 True, 則輸出and右側(cè)的表達(dá)式砾省。如圖株搔,4是true,那么輸出3纯蛾。
若 and 的左側(cè)邏輯值為 False 纤房,?則輸出and左側(cè)的表達(dá)式。
回到我們的題目:
(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
= 0 or 0 or 4 or 6 or 9
=?0 or 4 or 6 or 9
= 4 or 6 or 9
= 4 or 9
= 4
那么翻诉,答案就是4啦~~~
題目2 算閏年:
要求玩家輸入一個(gè)數(shù)字炮姨,程序判斷它是不是閏年~如圖所示:
思路:
首先,我們要具備一個(gè)小學(xué)的知識(shí)(雖然兔子也是百度才想起來(lái)的)碰煌,那就是舒岸,閏年的條件:能被4整除但不能被100整除,或者能被400整除都是閏年。所以芦圾,我們可以運(yùn)用我們的邏輯運(yùn)算符和算術(shù)運(yùn)算符來(lái)表達(dá)對(duì)閏年的判斷蛾派。
于是我們可以列出三個(gè)式子:(year % 4 == 0),? (year % 100 != 0) , (year % 400 == 0)
這三個(gè)式子要用邏輯運(yùn)算符連接在一起。首先个少,前兩個(gè)式子是必須要在一起的洪乍,因?yàn)椤澳鼙?整除但不能被100整除”,這兩個(gè)條件都必須滿(mǎn)足夜焦,所以壳澳,我們用AND把他們連在一起。第三個(gè)式子茫经,我們要用 OR 來(lái)跟前面的兩個(gè)式子連在一起巷波,因?yàn)槟攴葜灰獫M(mǎn)足第三個(gè)式子,即使不滿(mǎn)足前兩個(gè)式子卸伞,也可以是閏年抹镊!
于是式子就變成:(year%4 == 0) and (year%100 != 0) or (year % 400==0)
這里出現(xiàn)一個(gè)優(yōu)先級(jí)問(wèn)題,我們需要先比較AND再比較OR荤傲, 而在規(guī)則里垮耳,AND 剛好優(yōu)先于 OR,所以我們可以不加括號(hào)弃酌。但是為了讓看我們代碼的人們可以更好地理解氨菇,其實(shí)加括號(hào)也是非常妥當(dāng)?shù)倪x擇~ 小小的括號(hào),還生動(dòng)形象地體現(xiàn)了打代碼的小白的細(xì)心呢妓湘!
于是式子就變成:((year%4) == 0) and ((year%100) != 0) or ((year % 400)==0)
答案(不一定是最好滴查蓉!僅供參考!歡迎指教0裉):
(這里在第3豌研,4行我加了一個(gè)上一篇文章中提到的判斷數(shù)據(jù)類(lèi)型的代碼。感興趣的小伙伴可以點(diǎn)擊鏈接去看看上一篇文章的詳解~~唬党。)
現(xiàn)在我們坐上小飛機(jī)鹃共,開(kāi)始遨游一下這篇代碼。一開(kāi)始用戶(hù)輸入一個(gè)字符串驶拱,程序就進(jìn)入了循環(huán)霜浴。在第三行,我們首先判斷這個(gè)循環(huán)是不是整數(shù)蓝纲,如果不是阴孟,就輸出“格式有誤,請(qǐng)輸入一個(gè)整數(shù)税迷∮浪浚”而如果輸入的字符串本身就是整數(shù),就不會(huì)進(jìn)入第三行的while循環(huán)箭养,直接來(lái)到了第五行慕嚷。給這個(gè)字符串整型為int,并叫他year毕泌。整型之后喝检,我們來(lái)到一個(gè)if 函數(shù),判斷一下這個(gè)年份是不是閏年撼泛,如果是蛇耀,就break。break的意思就是跳出循環(huán)坎弯,跳出循環(huán)之后我們直接來(lái)到第11行纺涤,輸出(year,“是閏年”)抠忘;如果不是撩炊,就會(huì)輸出(year,“不是閏年”)崎脉,然后再要求用戶(hù)重新輸入一個(gè)年份拧咳,用戶(hù)在第十行輸入的這個(gè)字符串會(huì)繼續(xù)來(lái)到第二行,進(jìn)行下一次循環(huán)~
飛機(jī)著陸啦~來(lái)看看下一道題目吧囚灼。
題目2 奇數(shù)來(lái)聚會(huì):
請(qǐng)寫(xiě)一個(gè)程序打印出 0~20 所有的奇數(shù)骆膝。如圖所示祭衩。
思路:
看到奇數(shù),聰明的孩子馬上就想到阅签,奇數(shù) / 2時(shí)掐暮,余數(shù)不等于0。
于是我們便寫(xiě)出這個(gè)式子:i % 2 != 0
然后政钟,我們還需要一個(gè)循環(huán)路克,來(lái)讓這個(gè)程序持續(xù)輸出30以?xún)?nèi)的奇數(shù)。所以while后面跟著的條件應(yīng)該是讓 i 小于或等于 30养交。
在while循環(huán)里面精算,我們寫(xiě)一個(gè)if函數(shù),當(dāng)?i % 2 不等于0碎连,就代表此時(shí)的 i 是一個(gè)奇數(shù)灰羽,我們就把這個(gè) i 打印出來(lái)。如果等于0鱼辙,那就不打印谦趣。w
在這里,無(wú)論是 if 還是 else座每,后面都要寫(xiě)一個(gè) i += 1前鹅,讓 i + 1 賦值給 i,就能確保我們的 i 一直增加峭梳,直到30舰绘。
答案:
題目3 愛(ài)因斯坦的臺(tái)階
愛(ài)因斯坦曾出過(guò)這樣一道有趣的數(shù)學(xué)題:有一個(gè)長(zhǎng)階梯,若每步上2階葱椭,最后剩1階捂寿;若每步上3階,最后剩2階孵运;若每步上5階秦陋,最后剩4階;若每步上6階治笨,最后剩5階驳概;只有每步上7階,最后剛好一階也不剩旷赖。請(qǐng)編程求解該階梯有多少階顺又?
思路1:
這道題又是一道結(jié)合了算術(shù)運(yùn)算符和邏輯運(yùn)算符的題目,如果每步上2階等孵,最后剩1階稚照,那用式子表達(dá)就是 i % 2 = 1,而愛(ài)因斯坦?fàn)敔斦f(shuō)的這些條件必須全部同時(shí)被滿(mǎn)足,所以要用AND把他們連接到一起果录。以此類(lèi)推上枕,我們得到這樣一個(gè)式子:((i % 2 == 1) and (i % 3 == 2)and (i % 5 == 4) and (i % 7 == 0))
剩下的思路是不是就跟上一道題目很像呢~ 讓我們來(lái)看看思路1的答案:
程序run起來(lái)是這樣滴,代表了1-1000的范圍內(nèi)所有的答案
思路2:?
題目說(shuō)弱恒,只有每步上7階辨萍,最后剛好一階也不剩。所以我們可不可以去生成一些7的倍數(shù) x 斤彼,然后再去判斷前面那些條件合不合適呢分瘦?yes蘸泻!進(jìn)一步地想琉苇,7的倍數(shù),也就是 7 * 1悦施, 7 * 2并扇, 7 * 3 ……那么我們就要生成一個(gè)變量 s ,讓它從1逐漸增長(zhǎng)(也就是 i += 1 ) 最后抡诞,讓 7 * s 就是一連串7的倍數(shù)——x啦穷蛹。
等等,我還有另一個(gè)要求昼汗,就是如果我們while后面跟著的范圍不夠大肴熏,這個(gè)數(shù)字找不到,我想讓讓系統(tǒng)提示“在程序限定的范圍內(nèi)找不到答案顷窒!”
看到這里蛙吏,有的小伙伴可能覺(jué)得,呀鞋吉,那還不簡(jiǎn)單鸦做,直接增加一個(gè)變量,再加一個(gè)print就好啦~
如圖:
粗略來(lái)看好像行得通谓着,但是泼诱,這樣其實(shí)是錯(cuò)的!只要是7的倍數(shù)但不符合條件的赊锚,都會(huì)被print?“在程序限定的范圍內(nèi)找不到答案治筒!”, 你可能run出來(lái)會(huì)看到一排眼花繚亂的“在程序限定的范圍內(nèi)找不到答案舷蒲!”然后才是階梯的答案矢炼。不信我試給你看看~
這里我們還應(yīng)該增加一個(gè)限定,只有在范圍內(nèi)找不到的時(shí)候才print那句提示阿纤,而不應(yīng)該在每一次7的倍數(shù)print句灌。
我們這里引入一個(gè)新的變量flag,目的就是為了讓提示的那句話只跟范圍有關(guān),跟倍數(shù)循環(huán)無(wú)關(guān)胰锌。
如下圖答案所示骗绕,第7行,當(dāng)符合條件時(shí)资昧,我們給flag賦值1酬土,不符合我們就默默讓他成為下一個(gè)7的倍數(shù)。
在第12行格带,我們?cè)僮宖lag == 1 時(shí)撤缴,輸出答案,而當(dāng)flag 等于0叽唱,則說(shuō)明while循環(huán)里面沒(méi)有輸出一個(gè)flag == 1的數(shù)屈呕,flag還是等于第三行的賦值0,就會(huì)print出我們的提示棺亭,表示while后面的范圍里面找不到符合條件的階梯數(shù)虎眨。
好啦!聰明的你看懂了嗎~?喜歡的話可以收藏~也可以給兔子點(diǎn)個(gè)贊噢~奧利給镶摘!