Pig Latin Translator

Итак, у меня есть базовый переводчик Pig Latin, который работает только для одного слова.

def Translate(Phrase): Subscript = 0 while Phrase[Subscript] != "a" or Phrase[Subscript] != "e" or Phrase[Subscript] != "i" or Phrase[Subscript] != "o" or Phrase[Subscript] != "u": Subscript += 1 if Phrase[Subscript] == "a" or Phrase[Subscript] == "e" or Phrase[Subscript] == "i" or Phrase[Subscript] == "o" or Phrase[Subscript] == "u": return Phrase[Subscript:] + Phrase[:Subscript] + "ay" 

Может ли кто-нибудь помочь мне в редактировании этого переводчика, чтобы взять несколько слов? Спасибо.

3 Solutions collect form web for “Pig Latin Translator”

Вот свиной латинский диалект, который учитывает, как произносятся слова:

 #!/usr/bin/env python # -*- coding: utf-8 -*- import re sentences = ["Pig qoph an egg.", "Quiet European rhythms.", "My nth happy hour.", "Herb unit -- a dynasty heir."] for sent in sentences: entsay = " ".join(["".join(map(to_piglatin, re.split("(\W+)", nonws))) for nonws in sent.split()]) print(u'"{}" → "{}"'.format(sent, entsay)) 

Вывод

  «Свиньи яйцо».  → «igpay ophqay anway eggway».
 «Тихие европейские ритмы».  → «ietquay uropeaneay ythmsrhay».
 «Мой счастливый час».  → «ymay nthway appyhay hourway».
 «Единица травы - наследник династии».  → «herbway itunay - прочь от yastastyday heirway». 

Заметка:

  • Суффикс "-way" используется для слов, начинающихся с гласного звука
  • qu в «тихом» рассматривается как единица
  • European , начните с согласного
  • y в «ритмах», «династия» – гласная
  • nth , hour , herb , heir начинается с гласного

где to_piglatin() :

 from nltk.corpus import cmudict # $ pip install nltk # $ python -c "import nltk; nltk.download('cmudict')" def to_piglatin(word, pronunciations=cmudict.dict()): word = word.lower() #NOTE: ignore Unicode casefold i = 0 # find out whether the word start with a vowel sound using # the pronunciations dictionary for syllables in pronunciations.get(word, []): for i, syl in enumerate(syllables): isvowel = syl[-1].isdigit() if isvowel: break else: # no vowels assert 0 if i == 0: # starts with a vowel return word + "way" elif "y" in word: # allow 'y' as a vowel for known words return to_piglatin_naive(word, vowels="aeiouy", start=i) break # use only the first pronunciation return to_piglatin_naive(word, start=i) def to_piglatin_naive(word, vowels="aeiou", start=0): word = word.lower() i = 0 for i, c in enumerate(word[start:], start=start): if c in vowels: break else: # no vowel in the word i += 1 return word[i:] + word[:i] + "w"*(i == 0) + "ay"*word.isalnum() 

Чтобы разделить текст на предложения, слова, вы можете использовать nltk nltk. Можно изменить код, чтобы соблюдать регистр букв (в верхнем и нижнем регистре), сокращения.

Функции наиболее полезны, если они достигают одной маленькой задачи, поэтому я бы оставил вашу текущую функцию более или менее, как есть (с несколькими исправлениями стиля):

 def translate(word): subscript = 0 while word[subscript] not in ("a", "e", "i", "o", "u"): subscript +=1 if word[subscript] in ("a", "e", "i", "o", "u"): return word[subscript:] + word[:subscript] + "ay" 

А затем напишите дополнительную функцию, которая использует эту единственную функцию слова для перевода целого предложения:

 def translate_sentence(sentence): words = sentence.split() pigged = [] for word in words: pigged_word = translate(word) pigged.append(pigged_word) # Turn it back into a single string result = " ".join(pigged) return result 

Пример:

 s1 = "Pig latin is fun" translate_sentence(s1) Out[12]: 'igPay atinlay isay unfay' 

Просто для funzies вот довольно читаемая версия re.split использующая re.split :

 >>> import re >>> def pig_latin(sentence): ... vowels = re.compile('|'.join('aeiouAEIOU')) ... for word in sentence.split(): ... first_syl = re.split(vowels, word)[0] ... if first_syl: ... yield word[len(first_syl):] + first_syl + 'ay' ... else: ... yield word + 'yay' 

И пример использования:

 >>> phrase = 'The quick brown fox jumps over the lazy dog' >>> ' '.join(pig_latin(phrase)) 'eThay uickqay ownbray oxfay umpsjay overyay ethay azylay ogday' 
  • замена цикла while со списком
  • Назначение во время цикла в Python?
  • Печать python после выполнения
  • Печать формы в Python
  • Как я могу осмыслить предложение `else` петель Python?
  • Почему мой цикл while не останавливается?
  • Сохраняется только последняя итерация цикла while
  • Вложенный цикл while в Python
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.