2017-02-26 48 views
0

在我的游戏代码中,用户围绕着一个网格移动,如果他们着陆在宝箱上,他们的钱币收集量将增加10点。然而,一旦你登陆同一个宝箱3次,它会变成一个盗贼并设置你的钱币收藏为0.我挣扎于此,因为当用户确定首先有多少值时,很难计算列表中的单个值。这是当前代码我为:在Python中的列表和字典之间进行切换?

 TreasureCoords[(x,y)] = 0 
     Visits = TreasureCoords.get((x,y), None) 
     if Visits is None: 
      pass # Nothing happens 
     elif Visits > 3: 
      print("Uh oh there's a bandit! Your coin collection is now 0.") 
      CoinCollection = 0 
     else: 
      print("You have landed on a treasure chest! You can visit it %i more times before it becomes a bandit." % (2 - visits)) 
      CoinCollection += 10 
      TreasureCoords[(x,y)] += 1 

然而,当实现到我的代码,就会发生这样的错误: TreasureCoords [(X,Y)] = 0 类型错误:列表索引必须是整数,而不是元组 我相信这是为了处理上述代码使用TreasureCoords作为字典的事实,实际上它是一个充满x和y值的列表,宝箱位于其中。我不相信只要将我的TreasureCoords和BanditCoords改为词典,因为这些值是随机设置的,值的数量是由用户设置的,所以我不知道如何设置密钥或任何东西。我该怎么办?

回答

0

由于元组发生错误,解决此问题的最佳方法可能是使用字典,因为其余代码看起来好像根本不需要更改为字典。

事实上,行Visits = TreasureCoords.get((x,y), None)使用get方法,它甚至不能在列表上工作,所以这让我认为代码本来就是用来处理字典的。

实际上,你可以增加新项目的字典:

dict = {"Key1": 1} 
dict[(1, 2)] = 42 
print(dict[(1, 2)]) # prints 42 

你或许应该阅读这也:https://learnpythonthehardway.org/book/ex39.html

+0

是的,我同意了线的造访= TreasureCoords.get((X,Y),无)使用字典方法,但我不知道如何将我的列表更改为字典。该行本身并不真正起作用,因为TreasureCoords是一个列表,并且已被分配TreasureCoords = random.sample(PossibleCoords,TCNumber),其中PossibleCoords是网格中的所有坐标列表,当用户设置网格时,大小和TCNumber更改每场比赛的比赛,因为它是由用户设置的。 – George

+0

@George不幸的是,stackoverflow不用于回答这些广泛的问题。我给出的答案是,你应该尝试字典,如果你不知道如何做,那么你需要了解字典 - 它的简单。 –

+0

不,我知道如何创建一个字典,并阅读了您链接到我的网页,我只是看不到我如何将它们实现到我的代码中,并想知道是否有一个替代方法用于我的问题中使用的代码块。对不起,如果我的问题太广泛 – George

相关问题