Python - 如何在不引用其值的情况下引用列表的项目(即变量)

时间:2017-02-18 18:32:14

标签: python list

好吧所以我试图创建一个二十一点游戏,其中使用了一张卡的图片,我让一切都运行得很好但是我决定采用另一种方式显示卡片,因为它会更有效率。我有一个列表,我需要的所有卡,并希望引用其中的变量名称,而不是变量的值。为了帮助澄清,继承了我的一些代码:

Jack = 10
Queen = 10
King = 10
Ace = 11    
cards = [ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King]

firstcard = cards[random.randrange(1,14)]
seccard = cards[random.randrange(1,14)]
total = firstcard + seccard
然而,问题在于它没有区分杰克,女王或国王。 id喜欢使用if语句,该语句将遵循以下几行:

if firstcard = cards[Jack]:
    (code for using the appropriate image)

再次,这里的问题是计算机总是看到索引名称并查看变量等于什么(在本例中为10)。我想知道是否有一种直接引用被选中的变量名而不是变量值的方法。我已经让我的卡片图像很好地工作了,这只是现在选择它们的一种情况。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

我想你最终想在这里使用字典。

答案 1 :(得分:0)

首先,请务必注意代码中===之间的区别。前a = b会将a设为等于b。后者a == b不会更改ab,如果相同则返回True,如果不相同则返回False。

至于如何将脸卡与10号和彼此区分开来,将卡存储为字符串可能会有所帮助,并使用字典从每张卡值中提取数字。

# store the cards as strings
cards = ["Ace", "2", "3", ..., "9", "10", "Jack", "Queen", "King"]
# use a dictionary to store the value of each string
values_of_cards = {"Ace": 1, "2": 2, ..., "10": 10, "Jack": 10, "Queen": 10, "King": 10}
# same code to find the first and second card, only they're strings now
first_card = cards[random.randomrange(1, 14)]
second_card = cards[random.randomrange(1, 14)]
# slight change on how you calculate the values of the cards
total = values_of_cards[first_card] + values_of_cards[second_card]
# figuring out what card you have is now super easy -- just make sure to use == instead of =
if first_card == "Jack":
    # code here

答案 2 :(得分:0)

您按价值引用变量,因为Jack,Queen,King和10的值为10,当然它们与Python解释器看起来相同。

如果您想拥有相同的值但不同的表示形式,则需要使用更复杂的结构。 dict可能是最容易理解的:

cards = {
    "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9,
    "ten": 10, "jack": 10, "queen": 10, "king": 10, "ace": 11
}
card_names = cards.keys()

# you can now create shortcuts like ACE = "ace" if you don't want to type string keys

# to generate the cards
first_card = random.choice(card_names)
second_card = random.choice(card_names)

# to get their total value
total = cards[first_card] + cards[second_card]

# and to check the card:
if first_card == "jack":
    print("It's a Jack!")

然而,如果您只是以OOP的方式进行操作,这将看起来更优雅(在某些情况下更高效)。