这与字典有关

This has to do with dictionaries

我的代码是:

cart={}
line=input('Sale: ')
while line:
  parts = line.split()
  name = parts[0]
  number = parts[1]
  cart[name] = int(number)
  number+=number
  cart.update(cart)
  print(number,name, 'sold so far')
  line = input('Sale: ')

问题是:我输入了一个键和一个值。然后代码说你已经卖掉了这个价值的钥匙。如果您在 while 循环的另一次迭代中输入相同的键,该值将更新为新值,例如:

Sale: apples 5
5 apples sold so far
Sale: oranges 2
2 oranges sold so far
Sale: apples 3
8 apples sold so far
Sale: 

我原以为我的代码会执行此操作,但当我键入:apples 5 时却出现了这样的结果:

Sale: apples 5
55 apples sold so far
Sale: 

我认为 number+=number 应该添加到以前的变量中,但它却打印了第二次。如果可以,请解释并提供帮助。

这里有一些东西。

您从输入中获取数字并将其设置为字典键的整数,覆盖开头的任何内容。然后,您获取原始字符串,并将其添加到自身;所以如果你输入“5”,你会得到“55”。这个值与字典中现在的内容无关。然后,您用自身更新购物车,这当然不会做任何更改。

编程时,您需要按照逻辑步骤进行思考。它可能会帮助您在编写代码之前用英语写下这些步骤。在这里,首先,您需要从字典中获取当前值。然后,将您的输入转换为 int。接下来,将现有值添加到新值,并将该值设置回字典。最后,打印新的总数。

我不会 post 这个问题的确切代码,因为这个问题显然是家庭作业,但希望这可以帮助您解决当前的问题。

两件事,本例中的数字是一个字符串,因为它被分配了一个字符串值。要将它用作整数,可以像在代码的其他地方那样进行转换:

number = int(parts[1])

number+=number相当于做number+number并将这个值赋值回number。换句话说,如果 number 是一个整数,它每次都会加倍。因此,如果算法不是预期的,则应对其进行审查。

尝试遵循@Daniel Roseman 的建议,最好自己尝试。但是,如果您遇到困难,这里的内容可能会对您有所帮助。

cart={}
line=raw_input('Sale: ')
while line:
  parts = line.strip().split()
  name = parts[0]
  number = int(parts[1]) #converting number from string to int

  #this checks if key already exists in the dictionary, if it does not it is created
  if name not in cart:
      cart[name] = number
  #otherwise it is updated
  else:
      cart[name] += number

  #you were trying to do number += number; in your case you did not change number to int variable
  #so number was being treated as string and in context of string += is basically
  #concatenating the string.

  print(str(cart[name]) + ' ' + name + ' sold so far')
  line = raw_input('Sale: ')