【问题标题】:Repeat class method in PythonPython中的重复类方法
【发布时间】:2016-11-04 15:03:42
【问题描述】:

我想多次重复一个类方法(准确地说是 26 次),以便我可以将一副纸牌分成两个单独的副牌。除了d1=Deck() 然后deck1 = d1.deal()*26 之外,我还尝试了 [:26] 和 [26:] (显然仅用于列表),但它们都不起作用。我刚刚学会了如何创建类。

所需的输出是deck1=["""26 random cards"""]deck2=["""26 random cards"""]

相关代码:

import random
suits = ['H','C','S','D']
ranks = ['A']+list(map(str,range(2,10)))+['X','J','Q','K']
values = [14]+list(range(2,14))

class Card:
    def __init__(self,suit,rank):
        self.suit=suit
        self.rank=rank
        self.value=values[ranks.index(self.rank)]

    def __str__(self):
        return "*------*\n|{0}{1}    |\n|      |\n|    {0}{1}|\n*------*".format(self.rank,self.suit)

    def __gt__(self,other):
        return self.value > other.value

    def __lt__(self,other):
        return self.value < other.value

    def __eq__(self,other):
        return self.value == other.value

class Deck:
    """This class is for creating deck"""
    def __init__(self):
        self.deck=[]
        for suit in suits:
            for rank in ranks:
                self.deck.append(Card(suit,rank))
        self.shuffle()

    def __str__ (self):
        tmp=''
        for card in self.deck:
            tmp+=str(card)+'\n'
        return tmp

    def shuffle(self):
        random.shuffle(self.deck)

    def deal(self):
        return self.deck.pop()

【问题讨论】:

    标签: python class methods


    【解决方案1】:

    所以操作的顺序是执行你的函数一次,然后重复结果 26 次。你可能想要更多类似的东西:

    deck1 = [d1.deal() for _ in range(26)]
    

    【讨论】:

      【解决方案2】:

      如果您想重复某个动作一定次数,请使用for 循环。

      d2 = []
      for i in range(26):
          d2.append(d1.deal())
      

      目前您的代码无法创建空牌组。也许你应该有一个 __init__ 来创建一个空的牌组,然后用一个单独的方法来制作一个完整的牌组?只是一个想法。

      【讨论】:

      • 应该知道!是的,我正在尝试实现第三个类,并将在那边的`__init__`中创建甲板。谢谢!
      猜你喜欢
      • 2019-02-08
      • 1970-01-01
      • 2022-12-04
      • 2015-06-19
      • 1970-01-01
      • 2012-02-09
      • 2020-08-14
      • 2021-04-03
      • 1970-01-01
      相关资源
      最近更新 更多