1
这将是一个非常令人尴尬的从我第一篇文章 - 只是在学习基础知识〜6个月前回到Python编码,而不是从那时起使用它。通过键和值列表访问字典键和值
我编码在面向对象的方法二十一点游戏,并定义了甲板对象,如下所示:
class Deck(object):
suits = ["spades", "clubs", "diamonds", "hearts"]
ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"]
def __init__(self):
self.spades = {"2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0, "10": 0, "Jack": 0, "Queen": 0, "King": 0, "Ace": 0}
self.clubs = {"2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0, "10": 0, "Jack": 0, "Queen": 0, "King": 0, "Ace": 0}
self.diamonds = {"2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0, "10": 0, "Jack": 0, "Queen": 0, "King": 0, "Ace": 0}
self.hearts = {"2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, "9": 0, "10": 0, "Jack": 0, "Queen": 0, "King": 0, "Ace": 0}
然后,我想创造这将通过填充所有4个字典启动该甲板整齐方法拿着行列数每种花色,通过编写类似下面(这是对于类属性的原因我在上面定义的:
def initialize_deck(self):
for suit in self.suits:
for rank in self.ranks:
self.suit[rank] = 1
的问题是,代码只是没有做什么,我认为它应该做的(如例如:从第一件西装上拉lf.suits列表,使用它作为字典的名称迭代其所有键并将其关联值设置为1)。相反,我只是得到一个错误“AttributeError:'甲板'对象没有属性'西装'”。
我在这里做错了什么?有没有一种利用2个嵌套循环来编写我想要的内容的方法,而不是像下面那样编写它?
def initialize_deck(self):
for rank in self.ranks:
self.spades[rank] = 1
for rank in self.ranks:
self.clubs[rank] = 1
for rank in self.ranks:
self.diamonds[rank] = 1
for rank in self.ranks:
self.hearts[rank] = 1
预先感谢回答我所知道的可能是一个非常基本的问题。
干杯
非常感谢你为这个做的 - 第一个解决方案工作像一个奇迹! – Greem666
只是出于好奇 - 为什么我最初的代码不工作?从程序的流程来看,它应该有字典的名称和关键字在第二个循环的动作空间中设置为1,但它并没有把它放在一起......即使只是一个链接到涵盖该主题的文章将不胜感激。 – Greem666
@ Greem666问题是,当你做你的“self.suit”它指的是你的对象的“西装”属性,而你的变量“西装”链接到一些字符串。要通过名称从对象获取属性,您应该使用函数“getattr”。不知道是否有一篇很好的文章可以解决这个问题。 – Alex