好吧所以我试图创建一个二十一点游戏,其中使用了一张卡的图片,我让一切都运行得很好但是我决定采用另一种方式显示卡片,因为它会更有效率。我有一个列表,我需要的所有卡,并希望引用其中的变量名称,而不是变量的值。为了帮助澄清,继承了我的一些代码:
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)。我想知道是否有一种直接引用被选中的变量名而不是变量值的方法。我已经让我的卡片图像很好地工作了,这只是现在选择它们的一种情况。
非常感谢任何帮助!
答案 0 :(得分:0)
我想你最终想在这里使用字典。
答案 1 :(得分:0)
首先,请务必注意代码中=
和==
之间的区别。前a = b
会将a
设为等于b
。后者a == b
不会更改a
或b
,如果相同则返回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的方式进行操作,这将看起来更优雅(在某些情况下更高效)。