用Python创建21点游戏
我是编程新手,我加入这里是为了提问、贡献(当我有更多的知识时),基本上只是学习和弄清楚编程是否适合我 我目前正在通过Udemy上的一门课程学习Python,我正在进行一个里程碑式的项目,创建一个21点游戏。对我来说,唯一的规则就是使用面向对象编程,并为卡片和卡片组之类的东西创建类 我看了一些OOP教程,但我仍然对实现它们没有信心,所以我希望我能分享我写的东西,并希望通过这里的交互有更好的理解 首先,我制定了一个计划,将项目分解成更小的任务,因为这对我来说是压倒性的。以下是我的计划:用Python创建21点游戏,python,Python,我是编程新手,我加入这里是为了提问、贡献(当我有更多的知识时),基本上只是学习和弄清楚编程是否适合我 我目前正在通过Udemy上的一门课程学习Python,我正在进行一个里程碑式的项目,创建一个21点游戏。对我来说,唯一的规则就是使用面向对象编程,并为卡片和卡片组之类的东西创建类 我看了一些OOP教程,但我仍然对实现它们没有信心,所以我希望我能分享我写的东西,并希望通过这里的交互有更好的理解 首先,我制定了一个计划,将项目分解成更小的任务,因为这对我来说是压倒性的。以下是我的计划: 创建一个包含
import random
rank = [2,3,4,5,6,7,8,9,10,'Jack','Queen','King','Ace']
suit = ['Diamonds','Clubs','Hearts','Spade']
class Card(object):
def __init__(self,rank,suit):
self.rank = rank
self.suit = suit
def __str__(self):
return self.suit + self.rank
def grab_suit(self):
return self.suit
def grab_rank(self):
return self.rank
def draw(self):
print (self.suit + self.rank)
class Deck(object):
def __init__(self):
self.cards = []
for i in rank:
for j in suit:
self.cards.append(Card(i,j))
def __str__(self):
return self.cards()
通常在这里,人们喜欢你问一个特定的问题,而不是“给我一些建议”,所以要做好准备,以应对关于这个问题过于宽泛的抱怨。也就是说,我会给你一些建议 你可以在任何类之外定义suit和rank数组(也可以翻转它们的名称,但不管怎样)。那不是糟糕的。我会把它们放在甲板类里面,因为那是它们被使用的地方。这样想:每张牌不需要知道所有可能的等级和花色,它只需要知道自己的等级和花色,当它由它所属的牌组创建时 我不确定self.deck=self发生了什么事。你想在那里做什么?在下一行中,您得到了
self.deck=[]
,您将用卡片对象填充它。这听起来不错,但是,将局部变量命名为与其所属类的名称相同不是一个好主意。这会让人困惑。我建议将其命名为卡片
,因为它将是一个充满属于该牌组的卡片的数组。您的循环看起来不错,但就在这里:
self.deck.append(卡片)
您没有正确创建卡片。这张牌需要知道你想给那张牌分配什么等级和西装。我会让你自己研究怎么做。祝你好运:)通常在这里,人们喜欢你问一个特定的问题,而不是“给我一些建议”,所以要准备好面对关于这个问题过于宽泛的抱怨。也就是说,我会给你一些建议
你可以在任何类之外定义suit和rank数组(也可以翻转它们的名称,但不管怎样)。那不是糟糕的。我会把它们放在甲板类里面,因为那是它们被使用的地方。这样想:每张牌不需要知道所有可能的等级和花色,它只需要知道自己的等级和花色,当它由它所属的牌组创建时
我不确定self.deck=self发生了什么事。你想在那里做什么?在下一行中,您得到了self.deck=[]
,您将用卡片对象填充它。这听起来不错,但是,将局部变量命名为与其所属类的名称相同不是一个好主意。这会让人困惑。我建议将其命名为卡片
,因为它将是一个充满属于该牌组的卡片的数组。您的循环看起来不错,但就在这里:
self.deck.append(卡片)
您没有正确创建卡片。这张牌需要知道你想给那张牌分配什么等级和西装。我会让你自己研究怎么做。祝你好运:)python有指针吗?我想他指的是建议中的指针……不需要显式地从对象派生卡片,改为class Card()
。通过调用具有参数的函数(而不是self)来创建一张卡,因此将self.deck.append(card)
更改为self.deck.append(card(i,j))
self.deck=self
不要这样做。。。无论如何,这是毫无意义的,因为您立即执行self.deck=[]
@juanpa.arrivillaga谢谢您的更正。:)python有指针吗?我想他指的是建议中的指针……不需要从对象显式派生卡片,改为class Card()
。通过调用具有参数的函数(而不是self)来创建一张卡,因此将self.deck.append(card)
更改为self.deck.append(card(i,j))
self.deck=self
不要这样做。。。无论如何,这是毫无意义的,因为您立即执行self.deck=[]
@juanpa.arrivillaga谢谢您的更正。:)呃,我真的不同意使用模块级常量来包含suits
和ranks
是“非面向对象的”。通常,无论如何,您会使用enum
来表示“suit”和“rank”,因为它们在某种程度上是一种符号。这对于这个任务来说并不是必需的,因为全局列表包含suit
和