Python雖然入門容易翠胰,但是涉及的知識點非常多,而且技巧性很強自脯!這些技巧就像一串一串的珠子,需要一些題目的不斷的練手才能熟練掌握串聯(lián)起來斤富,把知識點掌握牢固膏潮!今天我就精選了3道趣味的Python題目,大家一起動動手满力,練起來焕参!
1.字符串中的字符替換
字符串是Python中最基本也是最重要的知識點,下面這道題是關(guān)于字符串替換油额〉祝看看菜鳥和高手是如何處理的:
題目:
創(chuàng)建一個函數(shù),這個函數(shù)能把輸入的字符串進行處理潦嘶,并將返回替換了某些字符的字符串涩嚣,規(guī)則如下
- 如果一個字母是大寫輔音,請將該字符替換為“Iron”。
- 如果字母是小寫輔音或非字母字符航厚,則對該字符不執(zhí)行任何操作
- 如果一個字母是大寫元音顷歌,請將該字符替換為“Iron Yard”。
- 如果一個字母是小寫元音幔睬,請用“Yard”替換該字符眯漩。
測試用例
輸入: "Hello WORLD!"
輸出: "IronYardllYard IronIron YardIronIronIron!"
菜鳥解法:
高手解法:
點評:
高手解法最巧妙不是用類似推到列表這樣的方法來循環(huán)處理字符串,而且非常巧妙的用"Iron"True 或者"Iron"False,如果是前者則為字符串本身麻顶,而后者則為空""赦抖。然后在把兩個字符串用+合成,再用or分類辅肾!完美把上面的if-elif-elif-else融合到了一行代碼里面队萤,確實不錯!
2.趣味體重排序
老王在一個"胖子健身俱樂部"宛瞄,每到月底老王就很擔心浮禾,因為每個月都會公布一份成員體重列表,每個月他都是列表中的最后一個份汗,這意味著他是最重的盈电。于是他就建議會長修改規(guī)則,比如新的規(guī)則如下:
新的排序規(guī)則將是按照“權(quán)重”來進行排序杯活,如果權(quán)重相同匆帚,則按照體重字符串來進行排序。(權(quán)重的計算規(guī)則:體重數(shù)字不同位數(shù)上的數(shù)字的總和)
給定某種正常順序俱樂部的成員的體重字符串旁钧,如何實現(xiàn)按照新規(guī)則排序呢吸重?
測試用例:
輸入: "99 189 86 75"
輸出: "75 86 189 99"
菜鳥解法:
高手解法:
點評:
高手的解法同樣是比較簡潔!我們大部分人用for c in x 的時候都用到這一層就結(jié)束了歪今,其實還可以對c再進行進一步操作然后再sum一下嚎幸,這個例子可以舉一反三!一下子集合了很多sorted的高級用法寄猩,簡潔而有效嫉晶!
3.扔骰子游戲
用五個六面骰子玩的骰子游戲,每投骰子組一次田篇,就會出現(xiàn)5個數(shù)字的數(shù)組(數(shù)字:1-6)替废,統(tǒng)計數(shù)組里每個數(shù)字出現(xiàn)的次數(shù),將每個數(shù)字出現(xiàn)的次數(shù)拆分成 3次 和 1次 的組合泊柬,然后按照下面的規(guī)則進行計數(shù)椎镣。
注意:如果出現(xiàn)次數(shù)大于或者等于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出現(xiàn)了5次冷守,那么應(yīng)當做作3個5、1個5和1個5來計算得分剪况;5出現(xiàn)了6次教沾,那么應(yīng)當作3個5、3個5來計算得分译断,其他數(shù)字同理授翻。
測試用例:
扔骰子計算得分 --------- ------------------
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
菜鳥解法:
高手解法:
點評:
高手的解法在于設(shè)計的數(shù)據(jù)結(jié)構(gòu)非常巧,提前根據(jù)題目的意思就設(shè)計好了幾個容器孙咪,然后counter列表巧妙的將(1-6)與(1-6)出現(xiàn)的次數(shù)關(guān)聯(lián)起來堪唐。points和extra列表巧妙將數(shù)字出現(xiàn)的次數(shù)(3次和1次)和得分關(guān)聯(lián)表示,減少誤輸?shù)梅值那闆r翎蹈,提高代碼復用性淮菠,整個解法非常巧妙!
上面這幾道題目看起來好像大家都會做荤堪,但是解法就是沒有別人的簡潔巧妙合陵!就好像廚藝大賽,看似一道簡單的蛋炒飯其實是非吵窝簦考驗功底的拥知!編程本身就是蘊含算法+數(shù)據(jù)結(jié)構(gòu)的融合,大家有空可以多學習學習優(yōu)秀的代碼碎赢,對自己功力大有好處低剔!