2016-10-07 4 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'에 대한 값을 업데이트하지 않기 때문에 dict에 키를 입력하십시오. 그래서 같은 상황은 당신의 코드와 같이이다 :

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