Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python创建21点游戏_Python - Fatal编程技术网

用Python创建21点游戏

用Python创建21点游戏,python,Python,我是编程新手,我加入这里是为了提问、贡献(当我有更多的知识时),基本上只是学习和弄清楚编程是否适合我 我目前正在通过Udemy上的一门课程学习Python,我正在进行一个里程碑式的项目,创建一个21点游戏。对我来说,唯一的规则就是使用面向对象编程,并为卡片和卡片组之类的东西创建类 我看了一些OOP教程,但我仍然对实现它们没有信心,所以我希望我能分享我写的东西,并希望通过这里的交互有更好的理解 首先,我制定了一个计划,将项目分解成更小的任务,因为这对我来说是压倒性的。以下是我的计划: 创建一个包含

我是编程新手,我加入这里是为了提问、贡献(当我有更多的知识时),基本上只是学习和弄清楚编程是否适合我

我目前正在通过Udemy上的一门课程学习Python,我正在进行一个里程碑式的项目,创建一个21点游戏。对我来说,唯一的规则就是使用面向对象编程,并为卡片和卡片组之类的东西创建类

我看了一些OOP教程,但我仍然对实现它们没有信心,所以我希望我能分享我写的东西,并希望通过这里的交互有更好的理解

首先,我制定了一个计划,将项目分解成更小的任务,因为这对我来说是压倒性的。以下是我的计划:

  • 创建一个包含52张牌的牌组

  • 为每张卡分配数值(Ace可以是1或11)

  • 洗牌

  • 庄家和玩家每人得到2张牌作为开始

  • 玩家被问到他/她是想击球还是站着

  • 庄家必须打到17岁

  • 比较“点”,看谁拥有更多

  • 在任何时候,如果任何人超过21岁,该人都会输

  • 我目前一直在努力找出第一部分。我基本上是在尝试使用OOP和for循环创建一个包含所有52张卡的列表,但我似乎无法正确处理

    我在下面分享我用Python 2编写的代码。有什么办法吗

    谢谢,, 保罗

    编辑#1:感谢大家的评论和反馈。我想我现在离你越来越近了。有人能告诉我我做的是否正确,以及我如何打印我用来创建牌组的列表,以便我能够看到列表中52张牌中的每一张吗?我尝试使用str方法,但似乎我做得不对

    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