Я точно не знаю, почему вы проверяли буквы в своем глаголе. Вы хотите, чтобы все слово было подчеркнуто, но только это слово.
Вместо этого я проверяю все слова на соответствие вашей цели и переводим только это.
def translate_word(verb):
translation = ""
for letter in verb:
translation = translation + letter + "\u0332"
return translation
def translate(phrase, verb):
if isinstance(verb, str):
verb = verb.split()
elif isinstance(verb, (list, set, tuple)):
pass
else:
raise TypeError(f"unknown type for verb:{type(verb)}")
#convert the verb into a set, casefold for upper/lower/accented chars
verbs = {v.casefold() for v in verb }
li = []
for word in phrase.split():
#upper/lowercase and accented chars
if word.casefold() in verbs:
li.append(translate_word(word))
else:
li.append(word)
return " ".join(li)
вывод:
второй тест имел ("eau", "si")
в качестве входных глаголов.
Une e̲a̲u̲ pure pour que le vert dure, c'est si beau!
Une E̲a̲u̲ pure pour que le vert dure, c'est s̲i̲ beau!
Нет регулярные выражения были повреждены в этой программе .
Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них есть две проблемы.
Наконец, phrase.split()
- приблизительная стратегия. Если у вас есть фраза с двумя пробелами, как иногда используется после двоеточий, вы бы потеряли один пробел таким образом. Или, если бы у вас было une eau, si douce
, вы бы пропустили это совпадение глаголов.
См. Как сохранить разделители Regex.Split? для более комплексного подхода, подходящего на основе регулярных выражений. , Нечто, основанное на регулярном выражении, например \s+,.
, будет вашим предпочтительным разделителем слов вместо str.split()
.