我有一个键列表:带有附加到特定键的整数值的值...
这些整数值表示特定手中的字母数...
例如,这是一只手 -
hand = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}
displayHand(hand) # Implemented for you
a q l l m u i
hand = updateHand(hand, 'quail') # You implement this function!
hand
{'l': 1, 'm': 1}
displayHand(hand)
l m
在这种情况下 - 这个电话 -
updateHand({'a': 1, 'i': 1, 'm': 1, 'l': 2, 'q': 1, 'u': 1}, quail)
应该导致这个结果 -
{'a': 0, 'q': 0, 'u': 0, 'i': 0, 'm': 1, 'l': 1}
注意鹌鹑这个词中的字母是如何减少的?
那么如果密钥的值大于零,如何通过将密钥值减1来更改密钥的值?
这是我到目前为止的代码 -
for c in word:
if c in hand:
x = int(hand.get(c))
x -= 1
return hand
答案 0 :(得分:1)
这是你的代码:
def updateHand(hand, word):
for c in word:
if c in hand:
x = int(hand.get(c))
x -= 1
return hand
但这对hand
没有任何作用。为什么不?好吧,尝试更改内容的行是x -= 1
行。但这只会更改x
的值,您刚定义为int(hand.get(c))
。在Python中,这意味着如果hand
的{{1}}值为2
,则您将设置c
。但不意味着更改x = 2
会更改x
中c
的值。相反,你需要做一些不同的事情:
hand
在这种特殊情况下无关紧要,但此函数实际上修改了输入def updateHand(hand, word):
for c in word:
if c in hand:
hand[c] -= 1
return hand
,然后返回相同的输入。例如:
hand
通常,您希望让>>> hand = {'a': 1, 'i': 1, 'm': 1, 'l': 2, 'q': 1, 'u': 1}
>>> new_hand = updateHand(hand, 'quail')
>>> new_hand
{'l': 1, 'm': 1}
>>> hand
{'l': 1, 'm': 1}
返回一个新词典并保留旧词典,或让它不返回任何内容并仅修改输入参数。因为看起来你得到了代码
updateHand
你应该做到这两个中的第一个。实现此目的的一种方法是将hand = updateHand(hand, 'quail')
添加为hand = hand.copy()
的第一行;然后它会让旧的一个人独自留下。
现在,另一件事是你的代码将updateHand
值放入输出中,如果它们曾经是1,但你的赋值根本就不包括它们。我将让你弄清楚如何处理这种情况,但作为一种方法的提示:你可以通过语句0
从字典中删除项目。
不建议你这样做,但作为@Jared的一小部分来展示Python::)
del hand[c]
(在调用def updateHand(hand, word):
return collections.Counter(hand) - collections.Counter(word)
时包装返回值以使其完全符合所需的接口)
答案 1 :(得分:0)
嗯......在我们知道语言之前,我经历过这样做的麻烦,所以我不妨发布它,但它是Javascript。不知道有多少可能是Pythonizable ©,但它给出了我的评论的要点,并且在查看之后还有一个工作小提琴。
注意,使用带有开放式Javascript控制台的浏览器来查看输出。
var hand = {a:1, q:1, l:2, m:1, u:1, i:1},
quail = 'quail';
displayHand(hand);
hand = updateHand(hand, quail);
displayHand(hand);
function displayHand(obj) {
var log = '',
key;
for (key in obj) {
if (obj.hasOwnProperty(key) && obj[key]) {
log += key;
}
}
console.log(log.split('').join(' ') || 'Nothing');
}
function updateHand(obj, tokens) {
var pos = 0,
token;
while (token = tokens[pos++]) {
if (obj.hasOwnProperty(token) && obj[token] > 0) {
obj[token]--;
}
}
return obj;
}