Python添加未知值到列表

2024-10-04 03:16:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个寻宝游戏,我需要它,这样一旦一个包含宝箱的广场被访问了3次,它就会变成一个“强盗”。 为了统计一个宝箱被访问的次数,我在宝箱坐标列表中又添加了许多相同的坐标。然后我计划有一个if语句,这样如果任何一个坐标被写了3次,所有3个都将被删除并放入“bandit”列表中。 以下是我的部分代码草案:

            # Treasure Chests Collecting Coins #
        if (x,y) in TreasureCoords[0:(TCNumber -1)]:
            print("You have landed on a treasure chest! You can visit it 2 more times before it becomes a bandit.")
            CoinCollection = CoinCollection + 10
            TreasureCoords.append(x,y)

        #if TreasureCoords.count(any item) > 3:
            #remove all copies of item from list
            #add item to bandit list

x,y表示用户当前所在的坐标。CoinCollection是一个单独的变量,当用户登陆宝箱或班迪特这样,坐标的数量是无限的,因为用户在游戏的早期就决定了。 那么,我如何复制我的坐标列表,一旦它们出现在列表中3次,然后把它们放到一个新的列表中呢?我想这是最简单的方法来“计算”用户在一个广场上的次数,并把宝箱换成强盗。在


Tags: 用户you游戏列表ifititem次数
2条回答

首先。。。您不需要在列表中搜索三次任何坐标。那太浪费了。如果你删除了它们,那么唯一可能出现三次的坐标就是你刚刚访问过的坐标。在

如果你真的想按照你的问题所示去做,只需做一些类似while (x,y) in TreasureCoords: TreasureCoords.remove((x,y))的事情。但是,使用dict可能更容易。甚至可以避免使用单独的变量。假设ItemCoords最初填充的坐标表示未访问的宝箱:

ItemCoords[(x,y)] = 0 # add a treasure

…然后你就可以看看有多少次宝藏被访问了:

^{pr2}$

这仍然过于简单。您可能想要一种更面向对象的方法,正如Christian所暗示的那样:

^{3}$

我认为在这种情况下,一个对象将是有益的——与其用关于同一事物的事实来跟踪单独的列表,不如使用一个存储所有相关信息的对象列表。在

可能是这样的:

class Monster(object):
    #define like you like it
    pass

class Treasure(object):
   def init(x, y):
      self.x = x
      self.y = y
      self.visits = 0

    def visit():
        self.visits += 1

        if self.visits >= 3:
            return Monster()
        else:
            return 10


calling code:
    treasure = Treasure(1,1)
    rv = treasure.visit()
    if isinstance(rv, Monster):
        # lets the monster rip him to shreds
    else:
        CoinCollection +=treasure.visit()

相关问题 更多 >