5

私はプログラミングの初心者で、英語のテキストを Pig Latin に変換する宿題を割り当てられました。

私がこれまでに持っているコードは次のとおりです。

VOWELS = ("a", "e", "i", "o", "u", "A", "E", "I", "O", "U")
def vowel_start(word):
     pig_latin = word + "ay"
     return pig_latin
def vowel_index(word):
     for i, letters in enumerate(word):
          if letters in VOWELS:
               vowel_index = i
               pig_latin = word[vowel_index:] + word[:vowel_index] + "ay"
               return pig_latin
          else:
               pig_latin = word   #The issue here is that even if the word
               return pig_latin   #has vowels, the program will still only
                                  #return the untranslated word as shown
                                  #in else.
english_text = raw_input("What do you want to translate?")
translate = english_text.split()

pig_latin_words = []
translated_text = "".join(str(pig_latin_words)) #The issue here is that the list
                                                #will not join with the string.

for i in translate:
     first = i[0]
     vow = False
     if first in VOWELS:
          vow = True
     if vow == True:
          pig_latin_words.append(vowel_start(i))
     else:
          pig_latin_words.append(vowel_index(i))

print "The text you translated is " + english_text
print "The translated text is " + translated_text #The issue here is that the program
                                                  #displays "The translated text is "
                                                  #and that's it

def vowel_index 関数の else 側面をコメントアウトすると、if 側面が機能します。プログラムに残しておくと、if アスペクトが機能しなくなります。ここ数日、これを修正しようとしてきましたが、修正方法がわかりません。どんな助けでも大歓迎です、ありがとう!

課題の詳細については、次のとおりです。

  • 単語が母音で始まる場合は、単語をそのままにして、末尾に「ay」を追加します。
  • 単語に母音が含まれているが先頭にない場合は、母音の前の文字を単語の最後に移動し、最後に「ay」を追加します。
  • 単語に母音が含まれていない場合は、単語をそのままにしておきます。
4

3 に答える 3

5

関数が現在書かれている方法では、最初の文字が母音であるかどうかに基づいて、for ループの最初の繰り返しで常に戻ります。すべての文字をループして、どの文字も母音でない場合にのみ単語を変更せずに返す必要があります。

else;を削除することから始めます。母音ではない単一の文字が表示されたときに戻りたくありません。後の文字は母音である可能性があるためです。にreturnステートメントがあるのでif、 の文字が母音ではないことを返さずにループの最後に到達した場合wordは、 for ループの外で単語を変更せずに返すことができることがわかります。例えば:

def vowel_index(word):
    for i, letters in enumerate(word):
        if letters in VOWELS:
            vowel_index = i
            return word[vowel_index:] + word[:vowel_index] + "ay"
    return word

2 番目の問題については、ここでいくつかのことが進行中です。

最初に、新しい単語が既にtranslated_textあるように、の作成を移動する必要があります。pig_latin_wordsこれは、最後の print ステートメントの直前になります。

また、単語のリストをスペースで区切られた単一の文字列に変換するには、次を使用する必要があります。

translated_text = " ".join(pig_latin_words)

違いを示す簡単な例を次に示します。

>>> pig_latin_words = ['atcay', 'ogday']
>>> print "".join(str(pig_latin_words))  # your version
['atcay', 'ogday']
>>> print " ".join(pig_latin_words)      # my version
atcay ogday
于 2013-02-26T17:44:46.013 に答える
2

最初の問題:

def vowel_index(word):
     for i, letters in enumerate(word):
          if letters in VOWELS:
               vowel_index = i
               pig_latin = word[vowel_index:] + word[:vowel_index] + "ay"
               return pig_latin
          else:
               pig_latin = word  
               return pig_latin   

「BA」という単語がある場合、ループは最初に文字を「B」に設定し、次にelseを実行して、単語を返します。何かを返す前に、最初の母音を探す必要があります。

あなたの2番目の問題:

translated_text = "".join(str(pig_latin_words))

これはおそらく次のようになります。

translated_text = "".join(pig_latin_words)

これは、joinがリストを予期していて、それに文字列を渡していたためです。また、translated_textが空の文字列に設定されていることにも気づきました。そのリストに何かを入れる必要があります。

于 2013-02-26T17:46:28.017 に答える
2

他の回答は、最初の懸念に対処します。translated_text = "".join(str(pig_latin_words)) この行を for ループの後に移動することで、2 番目と 3 番目の問題を解決できると思います 。

pig_latin_words = []

for i in translate:
     first = i[0]
     vow = False
     if first in VOWELS:
          vow = True
     if vow == True:
          pig_latin_words.append(vowel_start(i))
     else:
          pig_latin_words.append(vowel_index(i))

translated_text = " ".join(pig_latin_words) #The issue here is that the list
                                                #will not join with the string.

print "The text you translated is " + english_text
print "The translated text is " + translated_text #The issue here is that the program
                                                  #displays "The translated text is "
                                                  #and that's it

str()また、他の場所で述べたように、 from aroundを削除することもできますpig_latin_words。また、空の文字列の代わりにスペースで結合したいと思うでしょう:" ".join()

于 2013-02-26T17:49:40.010 に答える