6

Codecademy の pyglatin.py のバリエーションを作成して、複数の単語を受け入れて翻訳するトランスレータを作成しています。しかし、複数の単語を翻訳するのに苦労しています。生の入力をリストに転送して最初のものを翻訳することはできましたが、リスト内の次の項目を参照する方法がわかりません。どんな助けでも大歓迎です。

def piglatin1():

    pig = 'ay'

    original = raw_input('Enter a phrase:').split(' ')
    L = list(original)
    print L
    i = iter(L)
    item = i.next()


    for item in L:

        if len(item) > 0 and item.isalpha():
            word = item.lower()
            first = word
            if first == "a" or first == "e" or first == "i" or first == "o" or first =="u":
                new_word = word + pig
                print new_word
            else:
                new_word = word[1:] + word[0:1] + pig
            # first word translated    
                L = []
                M = L[:]


                L.append(new_word)

                print L # secondary list created.

                again = raw_input('Translate again? Y/N')
                print again

                if len(again) > 0 and again.isalpha():
                    second_word = again.lower()
                    if second_word == "y":
                        return piglatin()
                    else:
                        print "Okay Dokey!"

        else:
            print 'Letters only please!'
            return piglatin1()
4

4 に答える 4

7

私も最近この問題に取り組んでいて、次の解決策を思いつきました(範囲を使用するのではなく、列挙を使用してインデックスを取得します)。

for index, item in enumerate(L):
    next = index + 1
    if next < len(L):
        print index, item, next

この例は、現在のインデックス、現在のアイテム、そしてリスト内の次のアイテム (リストの境界内に存在する場合) にアクセスする方法を示しています。

于 2015-05-22T21:15:06.433 に答える
4

役立つかもしれないいくつかの注意事項を次に示します。

  1. i = iter(L)と 行item = i.next()は不要です。item行の直後に再定義しているため、このメソッドでは効果がありませんfor item in L。この 2 行をコメントアウトして、出力が変更されるかどうかを確認してください。
  2. ループ構造for item in Lは、リスト内のすべての項目を 1 回処理します。このループ内に記述したコードは、リスト内の項目ごとに 1 回実行されます。変数itemは、反復のリスト要素へのハンドルです。
  3. 反復中に、リスト内の「次の」要素にもアクセスしたい場合は、 などのループ構造の使用を検討してfor i in range(0,len(L))ください。それからL[i]現在のアイテムになりL[i+1]、次のアイテムを渡してくれます。
于 2013-10-19T00:44:11.043 に答える