强盗的语言倒退了吗?

时间:2017-12-29 12:14:33

标签: python python-3.x

有人知道如何在python中将强盗的语言翻译成英语吗?

喜欢这个但反过来?

def translate(s):
  consonants = 'bcdfghjklmnpqrstvwxz'
  return ''.join(a + 'o' + a if a in consonants else a for a in s)

print(translate("hej"))

3 个答案:

答案 0 :(得分:1)

可能是这样的:

def translate(s):
    consonants = 'bcdfghjklmnpqrstvwxz'
    counter = 0
    outputcounter = 0
    output = s
    while counter < len(s):
        char = s[counter]
        if char in consonants:
            output = output[:outputcounter] + char + output[outputcounter + 3:]
            counter += 3
            outputcounter += 1
        else:
            counter += 1
            outputcounter += 1
    return output

试一试! (我不知道这是不是很好的代码风格,但是)

答案 1 :(得分:0)

这是另一种方法

由于这是一个有趣的问题,我决定自己去。这是使用O(1) set lookup编写第一个函数的有效方法:

def translate_english_robber(s):
    consonants = 'bcdfghjklmnpqrstvwxz'

    # using a set instead is more efficient
    lookup = set(consonants + consonants.upper())

    result = ""
    for char in s:
        if char in lookup:

            # anonymous function for converting the case of the letter "o"
            convert_case = lambda x: "o" if x.islower() else "O" 

            # add it to the result
            result += char + convert_case(char) + char
        else:
            result += char

    return result

然后,对于反向翻译,您需要做的就是找到一个辅音,然后将其附加到列表中,然后以某种方式删除接下来的2个字符,并在最后一个删除的字符后继续下一次迭代。否则,如果当前字符不是常量,请正常添加。

例如,如果我的强盗语言为"hohey",我会首先找到"h",添加它,然后删除"o""h",然后开始迭代"e"。最后,我们将"hey"作为英文翻译。

使用迭代器在这里很有用。您还可以阅读迭代器here,它们对于这样的问题非常有用。

这是我的尝试:

def translate_robber_english(s):
    consonants = 'bcdfghjklmnpqrstvwxz'
    lookup = set(consonants + consonants.upper())

    # create the iterator
    it = iter(list(s))

    result = ""

    # loop till we reach the end
    while True:
        try:
            # get the current letter
            current = next(it)

            # add it regardless
            result += current

            # if consonant, skip the next to letters
            if current in lookup:
                next(it)
                next(it)

        # If this exception occurs, break out of the loop
        except StopIteration:
            break

    return result

现在你可以使用上述两个功能获得反向翻译:

>>> robber = translate_english_robber("black")
>>> print(robber)
boblolacockok
>>> english = translate_robber_english(robber)
>>> print(english)
black

答案 2 :(得分:0)

您可以尝试这样的事情:

def reverse_translate(s):
    vowel = ['a', 'e', 'i', 'o', 'u']

    final = []
    for i in range(len(s)):

        if s[i] in vowel:
            final.append(s[i])

        else:

            try:
                if s[i] == s[i + 2]:
                    final.append(s[i:i + 3])
            except IndexError:
                pass

    for j, i in enumerate(final):
        if i == 'o':
            try:
                if final[j] == final[j + 1]:
                    pass
                else:
                    del final[j]
            except IndexError:
                del final[j]

    return "".join(list(map(lambda x: x[0], final)))

现在test_cases:

正常test_case:

print(reverse_translate('boblolacockok'))

输出:

black

但如果文字还包含“&#39; o&#39;现在是元音:

print(reverse_translate('boblolocockok'))

输出:

block