如何解决为什么遍历字典会得到不同的结果
我有两个函数可以在拼字游戏的字典上进行迭代。我不明白为什么一个不起作用,而另一个却使用测试输入。我使用pythontutor.com尝试找出为什么其中一个没有获得正确的输出。 此功能可提供正确的输出
def updateHand(hand,word):
newhand = hand.copy()
for letter in word:
if letter in newhand.keys():
newhand[letter] -= 1
return newhand
print(updateHand({'h': 1,'e': 1,'l': 2,'o': 1},'hello'))
print(updateHand({'a': 1,'q': 1,'m': 1,'u': 1,'i': 1},'quail'))
正确的输出:
{'h': 0,'e': 0,'l': 0,'o': 0}
和
{'a': 0,'q': 0,'l': 1,'u': 0,'i': 0}
def updateHand(hand,word):
newhand = hand.copy()
for letter in word:
newhand[letter] = hand.get(letter,0) - 1
return newhand
{'h': 0,'o': 0}
解决方法
原因是l
中hand
的计数在第二个解决方案中未更新。
尝试一下:
def updateHand(hand,word):
newhand = hand.copy()
for letter in word:
# use newhand here
newhand[letter] = newhand.get(letter,0) - 1
return newhand
在您的代码中,遇到newhand
时只需跟踪hand
和l
的状态:
在第一个l
之后:新手= {'h': 0,'e': 0,'l': 1,'o': 1}
,手= {'h': 1,'e': 1,'l': 2,'o': 1}
第二l
之后:由于hand = {'h': 1,'o': 1}
,因此newhand = {'h': 0,'o': 1}
。
关键要点是,新手计数将被基于手的修改数据覆盖。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。