【Python CheckiO 题解】Bird Language
CheckiO 是面向初學(xué)者和高級(jí)程序員的編碼游戲,使用 Python 和 JavaScript 解決棘手的挑戰(zhàn)和有趣的任務(wù),從而提高你的編碼技能,本博客主要記錄自己用 Python 在闖關(guān)時(shí)的做題思路和實(shí)現(xiàn)代碼,同時(shí)也學(xué)習(xí)學(xué)習(xí)其他大神寫(xiě)的代碼。
CheckiO 官網(wǎng):https://checkio.org/
我的 CheckiO 主頁(yè):https://py.checkio.org/user/TRHX/
CheckiO 題解系列專(zhuān)欄:https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 所有題解源代碼:https://github.com/TRHX/Python-CheckiO-Exercise
題目描述
【Bird Language】:斯蒂芬(Stephan)的一個(gè)朋友恰巧是個(gè)小機(jī)器鳥(niǎo)。最近,他正試圖教它如何講基本語(yǔ)言。今天,這只鳥(niǎo)說(shuō)出了它的第一個(gè)詞:“ hieeelalaooo”。這聽(tīng)起來(lái)很像“hello”,但元音太多。斯蒂芬(Stephan)向尼古拉(Nikola)求助,他幫助檢查了鳥(niǎo)是如何改變單詞的。利用他們發(fā)現(xiàn)的信息,幫助他們制作翻譯模塊。
鳥(niǎo)通過(guò)兩個(gè)規(guī)則轉(zhuǎn)換單詞:(元音字母:aeiouy)
- 在每個(gè)輔音字母之后,小鳥(niǎo)都會(huì)附加一個(gè)隨機(jī)的元音字母(l?la 或 le);
- 在每個(gè)元音字母之后,小鳥(niǎo)都會(huì)附加兩個(gè)相同的字母(a?aaa)。
給您一個(gè)鳥(niǎo)類(lèi)學(xué)的短語(yǔ),它是由幾個(gè)空格隔開(kāi)的單詞(每對(duì)單詞由一個(gè)空格隔開(kāi))。鳥(niǎo)不知道如何標(biāo)點(diǎn)短語(yǔ),只說(shuō)字母。所有單詞均以小寫(xiě)形式給出。您應(yīng)該將此短語(yǔ)從鳥(niǎo)語(yǔ)翻譯成更容易理解的東西。
【鏈接】:https://py.checkio.org/mission/bird-language/
【輸入】:一個(gè)小鳥(niǎo)說(shuō)的短語(yǔ)(字符串)
【輸出】:翻譯過(guò)后的正確短語(yǔ)(字符串)
【前提】:re.match("\A([a-z]+\ ?)+(?<!\ )\Z", phrase);A phrase always has the translation.
【范例】:
translate("hieeelalaooo") == "hello" translate("hoooowe yyyooouuu duoooiiine") == "how you doin" translate("aaa bo cy da eee fe") == "a b c d e f" translate("sooooso aaaaaaaaa") == "sos aaa"解題思路
簡(jiǎn)單來(lái)說(shuō),我們要解決的問(wèn)題就是,將原來(lái)的字符串,去掉輔音字母后面的的一個(gè)元音字母,去掉元音字母后面的兩個(gè)相同的字母, 我們可以設(shè)置一個(gè)新列表,循環(huán)訪(fǎng)問(wèn)原字符串中的每一個(gè)元素;
當(dāng)遇到一個(gè)元音字母時(shí),就忽略該字母后兩個(gè)元素;
當(dāng)遇到一個(gè)輔音字母時(shí),就忽略該字母后一個(gè)元素;
當(dāng)遇到空格時(shí),就忽略掉該空格。
代碼實(shí)現(xiàn)
VOWELS = "aeiouy"def translate(phrase):new_list = []i = 0while i < len(phrase):new_list.append(phrase[i])if phrase[i] in VOWELS:i += 3elif phrase[i] == ' ':i += 1else:i += 2return ''.join(new_list)if __name__ == '__main__':print("Example:")print(translate("hieeelalaooo"))# These "asserts" using only for self-checking and not necessary for auto-testingassert translate("hieeelalaooo") == "hello", "Hi!"assert translate("hoooowe yyyooouuu duoooiiine") == "how you doin", "Joey?"assert translate("aaa bo cy da eee fe") == "a b c d e f", "Alphabet"assert translate("sooooso aaaaaaaaa") == "sos aaa", "Mayday, mayday"print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")大神解答
大神解答 NO.1
from re import subdef translate(phrase):prune = lambda exp, phr: sub(exp.format('aeiouy'), r'\1', phr)return prune(r'([{0}])\1\1', prune(r'([^ {0}])[{0}]', phrase))大神解答 NO.2
import redef translate(text):text = re.sub('(?P<c>[bcdfghjklmnpqrstvwxz])[aeiouy]', '\g<c>', text)text = re.sub('(?P<v>[aeiouy]){3}', '\g<v>', text)return text大神解答 NO.3
translate=lambda s:s and s[0]+translate(s[1+(s[0]!=' ')+(s[0]in'aeiouy'):])總結(jié)
以上是生活随笔為你收集整理的【Python CheckiO 题解】Bird Language的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1.9万元的戴尔XPS 13 Plus首
- 下一篇: 过期一天的食物还能吃吗?网友:主要穷舍不