我的情况如下:我正在研究 BlackJack 的实现。我有卡片、手牌、玩家、甲板和游戏的课程。主要的游戏对象存储玩家和一副牌,而玩家存储存储卡片的手。
我经常做类似以下的事情。在这个例子中,我将初始牌发给每个玩家。
num_cards = 2
for player in self.players:
new_hand = Hand()
for i in range(num_cards):
new_hand.add_card(self.deck.get_next_card())
player.assign_hand(new_hand)
这非常有效。我现在的问题是我希望从玩家的手牌中删除一手牌(玩家可以在二十一点中分裂,导致生成多只手)。在下面的函数中,我打算循环遍历每个玩家的手牌。如果hand的值大于21,我想删除hand。(请注意,下面的 remove() 功能通常在 Player 类中执行,通过名为 fold_hand() 的 Player 方法调用。我遇到了同样的问题,因此为了说明目的,我将代码移到了更明显的地方。)
for player in self.players:
for hand in player.hands:
if hand.smallest_value() > 21:
player.hands.remove(hand)
这不起作用。需要明确的是,我能够在 remove() 行之前打印出手,之后不会打印出来。也就是说,它似乎被删除了。然而,在下一轮比赛中,手又回来了。因此,玩家的手每回合都会增长。
上面的代码在 Game 类中名为 validate_player_hands() 的函数中。此函数从名为 play.py 的文件中调用,该文件用于开始/结束游戏并促进主游戏循环。因此,对 validate_player_hands() 的唯一调用是在 play.py 文件中,在游戏循环中缩进一个。我打电话:
game.validate_player_hands()
我也试过找到手的索引并使用'del'关键字,但结果是一样的。
为什么列表元素(名为 player.hands 的列表中的 Hand 对象)看起来已被删除时无法删除?
提前致谢,
典范RG