非常適合Python菜鳥練手的趣味題
Python雖然入門容易,但是涉及的知識點非常多,而且技巧性很強!這些技巧就像一串一串的珠子,需要一些題目的不斷的練手才能熟練掌握串聯起來,把知識點掌握牢固!
今天我就精選了3道趣味的Python題目,大家一起動動手,練起來!
學習Python中有不明白推薦加入交流群
號:960410445
群裡有志同道合的小夥伴,互幫互助,
群裡有不錯的視訊學習教程和PDF!
1.字串中的字元替換
字串是Python中最基本也是最重要的知識點,下面這道題是關於字串替換。看看菜鳥和高手是如何處理的:
題目:
建立一個函式,這個函式能把輸入的字串進行處理,並將返回替換了某些字元的字串,規則如下
- 如果一個字母是大寫子音,請將該字元替換為“Iron”。
- 如果字母是小寫子音或非字母字元,則對該字元不執行任何操作
- 如果一個字母是大寫母音,請將該字元替換為“Iron Yard”。
- 如果一個字母是小寫母音,請用“Yard”替換該字元。
測試用例
輸入: "Hello WORLD!"
輸出: "IronYardllYard IronIron YardIronIronIron!"
菜鳥解法:
高手解法:
def tiy_fizz_buzz(s): return "".join(("Iron "*c.isupper() + "Yard"*(c.lower() in "aeiou")).strip() or c for c in s)
(程式碼可以左右滑動)
點評:
高手解法最巧妙不是用類似推到列表這樣的方法來迴圈處理字串,而且非常巧妙的用"Iron"*True 或者"Iron"*False,如果是前者則為字串本身,而後者則為空""。然後在把兩個字串用+合成,再用or分類!完美把上面的if-elif-elif-else融合到了一行程式碼裡面,確實不錯!
2.趣味體重排序
老王在一個"胖子健身俱樂部",每到月底老王就很擔心,因為每個月都會公佈一份成員體重列表,每個月他都是列表中的最後一個,這意味著他是最重的。於是他就建議會長修改規則,比如新的規則如下:
新的排序規則將是按照“權重”來進行排序,如果權重相同,則按照體重字串來進行排序。(權重的計算規則:體重數字不同位數上的數字的總和)
給定某種正常順序俱樂部的成員的體重字串,如何實現按照新規則排序呢?測試用例:輸入: "99 189 86 75"輸出: "75 86 189 99"
菜鳥解法:
高手解法:
點評:
高手的解法同樣是比較簡潔!我們大部分人用for c in x 的時候都用到這一層就結束了,其實還可以對c再進行進一步操作然後再sum一下,這個例子可以舉一反三!一下子集合了很多sorted的高階用法,簡潔而有效!
3.扔骰子游戲
用五個六面骰子玩的骰子游戲,每投骰子組一次,就會出現5個數字的陣列(數字:1-6),統計數組裡每個數字出現的次數,將每個數字出現的次數拆分成 3次 和 1次 的組合,然後按照下面的規則進行計數。注意:如果出現次數大於或者等於3次,那麼必須至少有一個按照3次來計算,不能全部按照1次來計算
3次1 = = 1000分 3次6 = = 600分 3次5 = = 500分 3次4 = = 400分 3次3 = = 300分 3次2 = = 200分 1次1 => 100分 1次5 => 50分 1次2 => 0分 1次3 => 0分 1次4 => 0分 1次6 => 0分
例如,5出現了5次,那麼應當做作3個5、1個5和1個5來計算得分;5出現了6次,那麼應當作3個5、3個5來計算得分,其他數字同理。
測試用例:扔骰子計算得分 --------- ------------------ 5 1 3 4 1 50 + 2 * 100 = 250 1 1 1 3 1 1000 + 100 = 1100 2 4 4 5 4 400 + 50 = 450
菜鳥解法:
高手解法:
點評:
高手的解法在於設計的資料結構非常巧,提前根據題目的意思就設計好了幾個容器,然後counter列表巧妙的將(1-6)與(1-6)出現的次數關聯起來。points和extra列表巧妙將數字出現的次數(3次和1次)和得分關聯表示,減少誤輸得分的情況,提高程式碼複用性,整個解法非常巧妙!
上面這幾道題目看起來好像大家都會做,但是解法就是沒有別人的簡潔巧妙!就好像廚藝大賽,看似一道簡單的蛋炒飯其實是非常考驗功底的!程式設計本身就是蘊含演算法+資料結構的融合,大家有空可以多學習學習優秀的程式碼,對自己功力大有好處!