gpt4 book ai didi

python - 访问字典键值到键和值列表

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:25 25 4
gpt4 key购买 nike

这将是我的第一篇文章,非常令人尴尬 - 在大约 6 个月前学习基础知识后才回到 Python 编码,从那以后就没有使用过它。

我正在用面向对象的方法编写二十一点游戏,并定义了一个 Deck 对象,如下所示:

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

问题是,代码没有做我认为应该做的事情(例如:从 self.suits 列表中提取第一个西装,将其用作字典的名称,迭代其所有键并设置它们关联值 1)。相反,我只是收到错误“AttributeError:'Deck'对象没有属性'suit'”。

我在这里做错了什么?有没有一种简洁的方法可以用 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

预先感谢您对我知道可能是一个非常基本的问题的回答。

干杯

最佳答案

您可以使用getattr函数从对象获取属性

def initialize_deck(self):
for suit in self.suits:
suit_dict = getattr(self, suit)
for rank in self.ranks:
suit_dict[rank] = 1

或者您可以使用setattr

def initialize_deck(self):
rank_map = {key: 1 for key in self.ranks}
for suit in self.suits:
setattr(self, suit, rank_map.copy())

关于python - 访问字典键值到键和值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com