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" 

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

  • Python: elif или new if?
  • Python - импорт в if
  • Как делать «и» и «или» работать, когда они объединены в одном заявлении?
  • Почему `letter ==" A "или" a "всегда оценивается как True?
  • ошибка программы python elif else if
  • Условный оператор в одной строке лямбда-функции в python?
  • удаление данных из numpy.array
  • Python (странно) округляет значения
  • как создать идентификатор группы на основе 5-минутного интервала в pandas timeseries?
  • Python: сравнение двух файлов CSV и поиск похожих элементов
  • ValueError: Неизвестный компилятор MS версии 1900
  • Команда Python popen. Подождите, пока команда не будет завершена.
  • 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' 
    Python - лучший язык программирования в мире.