有人知道如何在python中将强盗的语言翻译成英语吗?
喜欢这个但反过来?
def translate(s):
consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(a + 'o' + a if a in consonants else a for a in s)
print(translate("hej"))
答案 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