我目前正在从事德克萨斯州hold'em扑克游戏项目,并被我的新卡交易课程所困扰:
import random
cardnames = ['2C', '2D', '2H', '2S', '3C', '3D', '3H', '3S',
'4C', '4D', '4H', '4S', '5C', '5D', '5H', '5S',
'6C', '6D', '6H', '6S', '7C', '7D', '7H', '7S',
'8C', '8D', '8H', '8S', '9C', '9D', '9H', '9S',
'10C', '10D', '10H', '10S', '11C', '11D', '11H', '11S',
'12C', '12D', '12H', '12S', '13C', '13D', '13H', '13S',
'14C', '14D', '14H', '14S']
class Card_Dealer():
def __init__(self):
self.cards = cardnames
self.cards_available = cardnames.copy()
self.dealing_to_hands()
self.dealing_to_table()
def dealing_to_hands(self):
self.playercards = []
self.p1_cards = []
self.p2_cards = []
self.p3_cards = []
self.p4_cards = []
hands = [self.playercards, self.p1_cards,
self.p2_cards, self.p3_cards,
self.p4_cards]
for hand in hands:
card = random.choice(self.cards_available)
hand[0][1] = card
hand[0][0] = self.cards.index(card)
self.cards_available.remove(card)
card = random.choice(self.cards_available)
hand[1][1] = card
hand[1][0] = self.cards.index(card)
self.cards_available.remove(card)
def dealing_to_table(self):
self.cardsontable = {1: None, 2: None, 3: None, 4: None, 5: None}
for a in self.cardsontable:
card_name = random.choice(self.cards_available)
card_ind = self.cards.index(card_name)
card = (card_ind, card_name)
self.cardsontable[a] = card
self.cards_available.remove(card_name)
我的第一个问题是,当我尝试调用玩家卡(例如p1_卡)时,我会收到以下错误消息:
Traceback (most recent call last):
File "C:/Users/Buza Dani/Documents/Programming/Projects/Texas_Holdem/poker_cards.py", line 229, in <module>
print(Card_Dealer().p1_cards)
File "C:/Users/Buza Dani/Documents/Programming/Projects/Texas_Holdem/poker_cards.py", line 195, in __init__
self.dealing_to_hands()
File "C:/Users/Buza Dani/Documents/Programming/Projects/Texas_Holdem/poker_cards.py", line 211, in dealing_to_hands
hand[0][1] = card
IndexError: list index out of range
第二个问题是,如果我能够解决第一个问题,每次我都会从类中调用一个变量,它们会发生变化,因为在初始化过程中列表会增长,而由于随机性,我调用的实际变量每次都会不同
我需要一些解释来帮助解决这些问题,因为我是一个非常初学者
我对您的代码段进行了一些编辑,并添加了许多注释:
这是建议的输出:
我会选择一个字典数据结构来存储可变数量的玩家,并将表中的牌存储在列表中(与实际操作相反)。你的函数看起来像
下面这个简单的程序将生成以下输出
输出:
这是否接近您在接下来的练习步骤中预期使用的值
让我们看一下这个问题的方法:
从5个空列表开始,然后将它们放在名为
hands
的列表中。然后你迭代那个大列表。但这些单独的列表仍然是空的。每个hand
都是一个空列表,因此hand[0]
会失败,hand[0][1]
也会失败(您无法访问空列表的第一个条目)。相反,可以使用.append()
附加到每个列表。比如:我想我不明白你的第二个问题。难道你不想让名单上满是随机的卡片吗?每次调用
dealing_to_hands()
和dealing_to_table()
时,都会将各种变量设置为某种原始状态。看起来cards_available
确实需要不时刷新,但您可以使用一种新方法,在交易前始终刷新可用卡列表:相关问题 更多 >
编程相关推荐