2016-09-13 4 views
1

これはちょうど私がcodewars.comで楽しくやっている練習です。ポイントは、最後の文字を取り出して文字列に追加し、最初の文字を取り出して1(文字数が奇数の文字列の場合)または1になるまで別の文字列に追加することです。 0(文字数が偶数の文字列の場合)の文字が残っています。興味があれば、challengeへのリンクがあります。空リストからのポップエラー偶数要素のリストの場合のみ

文字列が奇数文字数があれば私のコードは私に正しい結果を与え
def pop_shift(test): 
    firstSol = [] 
    secondSol = [] 
    testList = list(test) 
    while len(testList) != 1: 
     firstSol.append(testList.pop()) 
     secondSol.append(testList.pop(0)) 
    return [''.join(firstSol), ''.join(secondSol), ''.join(testList)] 

['erehtse', 'example', 't'] 

しかし、私はこのエラーを取得する文字の偶数とし:

Traceback (most recent call last): 
    File "<pyshell#37>", line 1, in <module> 
    pop_shift("egrets") 
    File "<pyshell#35>", line 6, in pop_shift 
    firstSol.append(testList.pop()) 
IndexError: pop from empty list 

私はpop()メソッドに関連する質問をたくさん見てきましたが、これに似た何も聞こえませんでした。また、これをさまざまな文字列でテストし、popメソッドのドキュメントを調べました。私が紛失しているものがなければならない。任意のポインタが評価されます。これも私の最初の質問です。他に見たいものがあれば教えてください。

+0

これは、デバッガを使用することを学ぶ良い機会になります。 – JETM

答えて

0

の長さを見ることはありません、あなたが必要とする:while len(testList) > 1len(testList)は「偶数」に2から0にジャンプしますので、文字列:次に

def pop_shift(test): 
    firstSol = [] 
    secondSol = [] 
    testList = list(test) 
    while len(testList) > 1: 
     firstSol.append(testList.pop()) 
     secondSol.append(testList.pop(0)) 

    return [''.join(firstSol), ''.join(secondSol), ''.join(testList)] 

print(pop_shift("Monkeys")) 
> ['sye', 'Mon', 'k'] 

print(pop_shift("Monkey")) 
> ['yek', 'Mon', ''] 
+0

ありがとう!私は欠けていたロジックのいくつかのビットがあることを知っていたが、私はそれを見ることができなかった。とても有難い! – erenk

+0

@erenkよろしくお願いします!一人のキャラクターが行動を変える方法... –

0

ループがリストの長さが1でないかどうかを確認しています。あなたは、常に時間に2つの項目をポップので、偶数長のリストについては、それが代わりにwhile len(testList) != 1の1

関連する問題