CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。
CheckiO 官网:https://checkio.org/
我的 CheckiO 主页:https://py.checkio.org/user/TRHX/
CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise
【Bird Language】:斯蒂芬(Stephan)的一个朋友恰巧是个小机器鸟。最近,他正试图教它如何讲基本语言。今天,这只鸟说出了它的第一个词:“ hieeelalaooo”。这听起来很像“hello”,但元音太多。斯蒂芬(Stephan)向尼古拉(Nikola)求助,他帮助检查了鸟是如何改变单词的。利用他们发现的信息,帮助他们制作翻译模块。
鸟通过两个规则转换单词:(元音字母:aeiouy)
给您一个鸟类学的短语,它是由几个空格隔开的单词(每对单词由一个空格隔开)。鸟不知道如何标点短语,只说字母。所有单词均以小写形式给出。您应该将此短语从鸟语翻译成更容易理解的东西。
【链接】:https://py.checkio.org/mission/bird-language/
【输入】:一个小鸟说的短语(字符串)
【输出】:翻译过后的正确短语(字符串)
【前提】: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"
简单来说,我们要解决的问题就是,将原来的字符串,去掉辅音字母后面的的一个元音字母,去掉元音字母后面的两个相同的字母, 我们可以设置一个新列表,循环访问原字符串中的每一个元素;
当遇到一个元音字母时,就忽略该字母后两个元素;
当遇到一个辅音字母时,就忽略该字母后一个元素;
当遇到空格时,就忽略掉该空格。
VOWELS = "aeiouy"
def translate(phrase):
new_list = []
i = 0
while i < len(phrase):
new_list.append(phrase[i])
if phrase[i] in VOWELS:
i += 3
elif phrase[i] == ' ':
i += 1
else:
i += 2
return ''.join(new_list)
if __name__ == '__main__':
print("Example:")
print(translate("hieeelalaooo"))
# These "asserts" using only for self-checking and not necessary for auto-testing
assert 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 sub
def 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 re
def 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'):])