打印列表名称

0 python arrays list python-3.x

import random
Diamonds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
Hearts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
Clubs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
Spades = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
suitvalues = [Diamonds, Hearts, Clubs, Spades]
potentialsuit = random.choice(suitvalues)
potentialcard = random.choice(potentialsuit)
print(potentialcard ,"of" ,potentialsuit.title)
Run Code Online (Sandbox Code Playgroud)

我的问题是,potentialsuit.title部分会打印整个列表,而我只想打印列表名称。我知道我写的那部分不会解决问题,但是那只是一个替代。

L3v*_*han 6

那是行不通的,因为列表(像其他Python对象一样)没有名称。

想象以下情况:

x = [1, 2, 3]
y = x
Run Code Online (Sandbox Code Playgroud)

y,它不仅是的副本x,而且引用了相同的列表(您可以通过询问来看到该列表x is y),该列表的名称与一样有效x。那么应该....title选择哪个名称呢?


您的问题的许多解决方案之一是将卡片存储在字典中:

import random

suits = {
    "Diamonds": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"], 
    "Hearts": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"], 
    "Clubs": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"], 
    "Spades": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"],
}

potentialsuit = random.choice(list(suits))
potentialcard = random.choice(suits[potentialsuit])
print(potentialcard, "of", potentialsuit)
Run Code Online (Sandbox Code Playgroud)

list(suits)利用了以下事实:对字典进行迭代会产生其键(西装)。potentialsuit则不会是卡值的列表,而是西服的名称,例如“俱乐部”。然后,第二个选择选择之一suits["Clubs"],这是卡值列表。

想一想,选择这样的随机卡真的没有意义。您不需要该列表的四个副本。相反,满足以下条件:

import random
suit = random.choice(["Diamonds", "Hearts", "Clubs", "Spades"])
value = random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"])
print(value, "of", suit)
Run Code Online (Sandbox Code Playgroud)