2016-10-07 10 views
0

私は、指定された単語にその文字が含まれている場合、リスト内の文字の量を最小限に抑える機能を持っています。これは、関数のデフです:リストの上の偽の反復

word = 'better' 
hand = {'b':1, 'r':1, 's':3, 't':2, 'z':1, 'e':3} 
def updateHand(hand, word): 
    handCopy = hand.copy() 
    for x in word: 
     print(x) 
     print(hand) 
     handCopy[x] = hand.get(x,0) - 1 
     print(handCopy) 
    return handCopy 

そして、それは出力です:

b 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
e 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 2, 'r': 1, 'e': 2} 
t 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 1, 'r': 1, 'e': 2} 
t 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 1, 'r': 1, 'e': 2} 
e 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 1, 'r': 1, 'e': 2} 
r 
{'s': 3, 'b': 1, 'z': 1, 't': 2, 'r': 1, 'e': 3} 
{'s': 3, 'b': 0, 'z': 1, 't': 1, 'r': 0, 'e': 2} 
Out[110]: {'b': 0, 'e': 2, 'r': 0, 's': 3, 't': 1, 'z': 1} 

なぜ二tをスキップ私の関数であり、および/またはリストからそれを排除しないのですか?ありがとう!

+2

'handCopy [x] = hand.get(x、0) - 1' - この行を注意深く考えてください。 – user2357112

+1

また、それはリストではありません。 – user2357112

+2

'hand.get( 't')'は '2'です。 – melpomene

答えて

0

はのは、このような状況を考えてみましょう:

hand = {'b':1, 'r':1, 's':3, 't':2, 'z':1, 'e':3} 

は、私たちは辞書として手を持っています。今、私たちは、このいずれかを実行します。

x = hand.get('t',0) - 1 
print x 

結果は、1のは再びそれをやってみましょうされます。もう一度

x = hand.get('t',0) - 1 
print x 

1.なぜ?あなたは't'の値を更新していないので、手書きでキーを押します。だから、それはあなたのコードの場合と同じような状況だ:

handCopy[x] = hand.get(x,0) - 1 

ので、あなたはこの方法でそれを実行する必要があります。

handCopy[x] = handCopy.get(x, 0) - 1 

ソリューション

word = 'better' 
hand = {'b':1, 'r':1, 's':3, 't':2, 'z':1, 'e':3} 
def updateHand(hand, word): 
    handCopy = hand.copy() 
    for x in word:   
     print(x)   
     print(hand)   
     handCopy[x] = handCopy.get(x,0) - 1 
     print(handCopy)  
    return handCopy 

結果:

b 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 3, 't': 2, 'r': 1, 'z': 1} 
e 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 2, 't': 2, 'r': 1, 'z': 1} 
t 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 2, 't': 1, 'r': 1, 'z': 1} 
t 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 2, 't': 0, 'r': 1, 'z': 1} 
e 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 1, 't': 0, 'r': 1, 'z': 1} 
r 
{'b': 1, 'e': 3, 's': 3, 'r': 1, 't': 2, 'z': 1} 
{'s': 3, 'b': 0, 'e': 1, 't': 0, 'r': 0, 'z': 1} 
Out[110]: {'s': 3, 'b': 0, 'e': 1, 't': 0, 'r': 0, 'z': 1} 
+0

どのような愚かな間違いをする。ご協力いただきありがとうございます! –

+0

@MickeyMahoney、問題ありません。我々はすべての間違いを犯します。 – turkus