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
  • Назначение во время цикла в Python?
  • Вложенный цикл while в Python
  • Вложенные петли WHILE в Python
  • Python: Как продолжать повторять программу до тех пор, пока не будет получен конкретный вход?
  • Выйти из цикла нажатием клавиши ENTER
  • Как остановить цикл While?
  • Выход из цикла в Python
  • 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' 
    Interesting Posts

    пользовательские представления в Djangocms?

    Как уменьшить использование памяти палочки?

    Соответствовать многострочному регулярному выражению в файловом объекте

    f2py: указание реальной точности в fortran при взаимодействии с python?

    Переопределить оператор «in» Python?

    Поиск исходного кода для встроенных функций Python?

    Ошибка PyCharm: «Нет модуля» при попытке импортировать собственный модуль (скрипт python)

    Отбросить все повторяющиеся строки в Python Pandas

    Импорт майави из python создает всплывающее окно с черным фоном в пользовательском интерфейсе (Mavericks / Canopy)

    Альтернативные реализации точек ввода / вывода python / setuptools (расширения) на других языках / приложениях

    Установить выделение жирным шрифтом выделенного текста с помощью тегов

    Доски Django в views.py

    Проверьте, содержит ли список другой список в python

    Как отлаживать проблемы с увольнением? (Рабочий не смог загрузить)

    Создание необработанного HTTP-запроса с сокетами

    Python - лучший язык программирования в мире.