我看到 方括号内的参数. 我不知道它是什么意思,和普通的参数有什么区别,所以希望能得到一些启发。
(我会把整个代码打印出来,因为有人可能会觉得有用 但重要的部分是: 第一段代码的第三行 和 第二段代码的第二行)
def __additional_cards(self, player):
while not player.is_busted() and player.is_hitting():
self.deck.deal([player])
print(player)
if player.is_busted():
player.bust()
这一行方括号内的参数代表的是一个对象。Player
类(可以有很多玩家)的游戏,代码的目的是在玩家要求时多发一张牌。
def play(self):
self.deck.deal(self.players + [self.dealer], per_hand = 2)
self.dealer.flip_first_card() # hide dealer's first card
for player in self.players:
print(player)
print(self.dealer)
在这种情况下,方法 .deal
是用来给游戏中的所有玩家以及庄家发起始牌。以下是代码 .deal
方法供参考。
def deal(self, hands, per_hand = 1):
for rounds in range(per_hand):
for hand in hands:
if self.cards:
top_card = self.cards[0]
self.give(top_card, hand)
正如你所看到的,它只需要一个参数来决定哪只 "手 "的牌应该被处理, 但上面的代码用命令添加了庄家。+ [self.dealer]
而这一点我是第一次看到。
庄家是否仅仅是通过添加到手中的 +
如果是的话,为什么要放在方括号里?
这个代码来自Michael Dawson的书。Python编程绝对初学者,第3版 而且是他通过讲解如何做一个简单的21点游戏来教OOP的部分。
方法 deck.deal()
以一个要交易的人的列表作为参数。你不能传给它一个单一的对象,因为这个方法可能会循环浏览列表中传给这些人的每个对象。当你输入 [player]
你告诉它,唯一的交易对象是那个单身汉。player
. 把它作为一个列表是很好的,因为它允许你概括代码,以接受一个任意数量的人处理到。
在看 self.deck.deal(self.players + [self.dealer], per_hand = 2)
这里发生的事情是我们把庄家加入到被交易的人的列表中。同样的,deal需要一个人的列表,由于我们要处理所有当前的玩家和庄家,我们可以把这两个东西合并成一个单一的列表。self.players
可能只是所有正在玩的人的列表,而当我们的 + [self.dealer]
我们创建一个包含所有玩家和庄家的新列表。Python 有运算符重载,这意味着我们可以 "添加 "两个列表,将它们合并成一个较长的列表。
如果我在编写这个代码,我就会把它变成 player
始终是一个列表本身,并且 self.dealer
始终是一个单元素列表,因为这段代码似乎被概括为只接受列表。
编辑说明一下。
我想这个方法 deal
看起来像。
def deal(people):
'''
people = a list of person objects to deal to
'''
for person in people:
# do something to that person
player
只是一个对象的实例。如果我们想只对那个人进行处理,我们就需要把 player
的列表中。[player]
否则,处理任意数量的人的代码就会崩溃,因为你不能循环地处理 player
对象,只有一个人的名单。