0

これは、codeacademy で使用されている標準の pig ラテン コードです。うまく機能しますが、一度に 1 つの単語に対してしか機能しないという欠点があります。

pyg = 'ay'

original = raw_input('Enter a word or phrase:')

if len(original) > 0 and original.isalpha():
    word = original.lower()
    translate = word[1:] + word[0]
    if word[0] != "a" and word[0] != "e" and word[0] != "i" and word[0] != "o" and word[0] != "u":
        new_word = translate + pyg
        print new_word
    else:
        new_word = word + pyg
        print new_word
else:
    print 'Input is empty or illegal'

だからフレーズができるようにしたかったのです。これは私が思いついたものです:

pyg = 'ay'

count = 0

original_input = raw_input('Enter a word or phrase:')

original = original_input

original_list = []

#converts to a list
while " " in original:
    if count > 50:
        break
    word = original[0:original.index(" ")]
    original_list.append(word)
    space = original.index(" ")
    space += 1
    original = original[space:]
    count += 1
#this works great until there is a word left and no spaces i.e. the last word
if len(original) > 0:
    original_list.append(original)
#this adds the last word

print original_list

def pyglatin(phrase):
#old code doesn't work because phrase is a list
        #now I have to translate BACK to a string
        for words in phrase:
            new_word = str(words)
    """this works for one word, how do I assign a new variable for every word if I don't know the phrase length ahead of time"""

それで私の質問に行き着きます:必要なアイテムの数がわからない場合、すべてのアイテムに変数を割り当てて、そのコードを(古いpyglatinトランスレーターを介して)コールバックできるようにするにはどうすればよいですか?

4

2 に答える 2

0

たぶん、このようなものですか?

def latinize(word):
        word = word.lower()
        translate = word[1:] + word[0]
        return (translate if word[0] in 'aeiou' else word) + 'ay'

original = raw_input('Enter a word or phrase:')
print ' '.join(latinize(word) for word in original.split())

入力と出力の例:

Enter a word or phrase:Gallia est omnis divisa in partes tres
galliaay steay mnisoay divisaay niay partesay tresay

しかし、最初の子音だけでなく、すべての最初の子音を最後に移動するべきではありませんか?

編集:

すべての最初の子音を最後に移動したい場合は、次を使用できます。

def latinize(word):
        word = word.lower()
        firstvowel = min (word.index (v) if v in word else 42042 for v in 'aeiou')
        if firstvowel == 42042: raise Exception ('No vowel in word')
        return word [firstvowel:] + word [:firstvowel] + 'ay'

original = raw_input('Enter a word or phrase:')
print ' '.join(latinize (word) for word in original.split () )

入力と出力の例:

Enter a word or phrase:star chick mess string
arstay ickchay essmay ingstray
于 2013-11-12T13:30:22.613 に答える