【发布时间】:2016-10-18 14:01:20
【问题描述】:
初学者 python 开发人员正在玩并尝试制作纸牌游戏。在我自己的系统上工作以随机选择卡片。
import random
# list to draw random card from from:
card_names = ["ace_h", "two_h", "three_h"]
class Cards(object):
in_play = False
def __init__(self, face, color, value):
self.face = face
self.color = color
self.value = value
ace_h = Cards("Ace", "Hearts", 14)
two_h = Cards("Two", "Hearts", 2)
three_h = Cards("Three", "Hearts", 3)
random_1 = random.choice(card_names)
print (random_1 +".face")
如果假设ace_h 被随机化选中,我希望最后的打印结果会显示打印ace_h.face 的结果(即Ace)。相反,打印只是将ace_h.face 显示为字符串,而不是与其关联的实际值。
我该如何更改?
请注意,只需使用 print (ace_h.face) 即可获得所需的结果。
【问题讨论】:
-
为什么不先
random_1 = random.choice([ace_h, two_h, three_h])然后print(random_1.face)? -
谢谢,这行得通,但我不知道为什么?你的代码和我的代码有什么区别,除了我的指的是预定义的列表?
-
添加到@elethan:这里甚至不需要命名变量。只需直接在其中制作一个带有卡片的
list,因为它们在逻辑上是选项的集合,而不是一堆自变量。 -
@user2390206:elethan 的代码是列出实际对象,而不是描述它们的字符串,并查找实际属性,而不是连接属性名称。
-
@user2390206 正如@ShadowRanger 所说,您的代码只打印字符串,而我的代码在选择
Card时打印face属性的返回值。如果您eval()您的字符串将像 Python 代码一样运行该字符串:print (eval(random_1 +".face")),您可以让您现有的代码以同样的方式工作,但通常不鼓励使用eval(),因为这涉及潜在的安全风险(尽管由于您没有接受用户输入,因此在这种情况下应该没问题,但在我看来,从对象中随机选择而不是名称是一个更好的选择)。
标签: python-3.x