如何从类中的列表返回字符串数组

2024-10-02 16:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从列表中返回一个由字符串类型字符组成的数组,目前我的程序正在将每次迭代直接打印到shell中。这是我当前的输出:

deck = Deck()
print(deck)
2 S, 
3 S, 
4 S, 
5 S, 
6 S, 
7 S, 
8 S, 
9 S, 
T S, 
J S, 
Q S, 
K S, 
A S, 
2 C, 
3 C, 
4 C, 
5 C, 
6 C, 
7 C, 
8 C, 
9 C, 
T C, 
J C, 
Q C, 
K C, 
A C, 
2 D, 
3 D, 
4 D, 
5 D, 
6 D, 
7 D, 
8 D, 
9 D, 
T D, 
J D, 
Q D, 
K D, 
A D, 
2 H, 
3 H, 
4 H, 
5 H, 
6 H, 
7 H, 
8 H, 
9 H, 
T H, 
J H, 
Q H, 
K H, 
A H

**我需要的输出是:**

2 C, 3 C, 4 C, 5 C, 6 C,
7 C, 8 C, 9 C, T C, J C,
Q C, K C, A C, 2 D, 3 D,
4 D, 5 D, 6 D, 7 D, 8 D,
9 D, T D, J D, Q D, K D,
A D, 2 H, 3 H, 4 H, 5 H,
6 H, 7 H, 8 H, 9 H, T H,
J H, Q H, K H, A H, 2 S,
3 S, 4 S, 5 S, 6 S, 7 S,
8 S, 9 S, T S, J S, Q S,
K S, A S

我尝试实现for循环和计数器,但没有成功。。。这是我的代码:

import random
class Card:
    def __init__(self, rank, suit): # initialize number variables here
        self._rank = rank
        self._suit = suit
        
    
    def __str__(self): #overload this to get a readable string representation of our card object
        return str(self._rank) + ' ' + str(self._suit)
    
    def __eq__(self, other):
        if self._rank == other._rank:
            return True
    
    def __ne__(self, other):
        if self._rank != other._rank:
            return True

class Deck:
    def __init__(self): 
        # create a list of card objects only need to pass in self
        #intialize a string or list of suits
        #intialize a string or list of ranks
        # building the list of cards
        
        self._deck = []
        self._dealt = []
        suits = ['S', 'C', 'D', 'H']
        ranks = ['2', '3' , '4', '5', '6', '7' , '8', '9','T', 'J' , 'Q', 'K', 'A']
        for suit in suits:
            for rank in ranks:
                self._deck.append(Card(rank,suit))
        
        
    def __str__(self):
        return ', \n'.join(str(i) for i in self._deck)

谢谢,我们将非常感谢您的帮助


Tags: ofinselfforstringreturndeflist
3条回答

一种方法是在for循环中使用逻辑排序操作,该操作保持每行输出数量的计数:

&13; 第13部分,;
ctr=0
for d in deck:
   ctr+=1
   print(d,end=', ')
   #check if max 5 characters are printed in each line
   if ctr==5:
      #print new line
      print()
      #init ctr 
      ctr=ctr%5
      
和#13;
和#13;

在将字符打印到标准输出时,可以使用这种方法

参见How do you split a list into evenly sized chunks?将牌组分为5张牌。然后,您可以使用, 将卡加入一个区块,并使用,\n将区块加入

def __str__(self):
    n = 5
    return ',\n'.join(', '.join(self._deck[i:i + n]) for i in range(0, len(self._deck), n))

蛮力方式是一个循环:

    def __str__(self):
        s = []
        for n in range(0,len(self._deck),5):
            s.append( ' '.join(str(i) for i in self._deck[n:n+5] )
        return '\n'.join(s)

相关问题 更多 >