需要ASCII扑克牌在一个Lin上打印

2024-05-14 20:31:34 发布

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

我试图让玩家手中的扑克牌打印在一行上,而不是像这样分开的行:

        ┌─────────┐┌─────────┐
        │2        ││4        │
        │         ││         │
        │         ││         │
        │    ♥    ││    ♥    │
        │         ││         │
        │         ││         │
        │        2││        4│
        └─────────┘└─────────┘

我的牌是一个元组数组,有脸和西装。在

我现在正在用Idle3.7.0开发Mac电脑,因为我知道我的教授会用它来给我的最后一个项目打分。我认为任何Mac/Linux解决方案都应该有效,但目前我对任何东西都持开放态度。在

这是我创建卡片的代码:

^{pr2}$

这是我打印人脸的代码:

def face_print(card):
face_name = card[0]
if face_name == 11:
    face_name = 'J'
elif face_name == 12:
    face_name = 'Q'
elif face_name == 13:
    face_name ='K'
elif face_name == 14:
    face_name = 'A'

return '%s' % (face_name)

这是我正在努力工作的代码:

def hero(playable,dealerHand,nonDealerHand):
    indexDealer = 0
    indexNonDealer = 0
    strNonDealerHand = []
    print(dealerHand)
    for index, card in enumerate(nonDealerHand):
        nonDealerCard = """
 ┌─────────┐
 │{}        │
 │         │
 │         │
 │    {}    │
 │         │
 │         │
 │        {}│                         
 └─────────┘""".format(face_print(card),card[1],face_print(card)).split('\n')

        strNonDealerHand.append(nonDealerCard) 

    print('Your hand: ')
    for i in range(9):
        for index,card in enumerate(strNonDealerHand):
            print(strNonDealerHand[index][i], end = ' ')

不幸的是,这似乎行不通。在

我的输出是这样的:

—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————│Q│││││││││││││││││││ │ │ │ │ │ │ │ ♦ │ │ ♠ │ │ ♥ │ │ ♠ │ │ ♣ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││││││2│3│5│9│Q│—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

我尝试了下面两种建议的解决方案,最终得到了这样的结果:

你的手: ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

         │2        │ │4       │ │6        │ │9       │ │Q       │

         │         │ │        │ │         │ │         │ │        │

         │         │ │        │ │         │ │        │ │        │

         │    ♥    │ │    ♣    │ │    ♠    │ │    ♥    │ │    ♥    │

         │         │ │         │ │         │ │         │ │         │

         │         │ │         │ │         │ │         │ │         │

         │        2│ │        4│ │        6│ │        9│ │        Q│

         └─────────┘ └─────────┘ └─────────┘ └─────────  └─────────┘

我不知道我哪里出错了,但任何帮助都是非常感谢的。在

谢谢!!在


Tags: 代码nameinforindexmacdef解决方案
2条回答

我最终弄明白了,结果很好。在

这是我的代码:

deck = [(face, suit)  for face in range(2,15) for suit in ['\u2660','\u2665','\u2666','\u2663']]

def deal(deck):
    strNonDealerHand = []
    random.shuffle(deck)
    for i in range(5):
        dealerHand.append(deck.pop())
        dealerHand.sort(key = operator.itemgetter(0))
        nonDealerHand.append(deck.pop())
        nonDealerHand.sort(key = operator.itemgetter(0))

# The idea for this came about from a lot of research to make the cards print as a card and all on one line.
# Some of the inspiration for this code came from here: https://codereview.stackexchange.com/questions/82103/ascii-fication-of-playing-cards
   lines = [[] for i in range(9)]

    for index, card in enumerate(nonDealerHand):
        # add the individual card on a line by line basis
        lines[0].append(str(index + 1) +') '+'┌─────────┐ ')
        lines[1].append('   │{}        │ '.format(face_print(card)))  # use two {} one for char, one for space or char
        lines[2].append('   │         │ ')
        lines[3].append('   │         │ ')
        lines[4].append('   │    {}    │ '.format(card[1]))
        lines[5].append('   │         │ ')
        lines[6].append('   │         │ ')
        lines[7].append('   │        {}│ '.format(face_print(card)))
        lines[8].append('   └─────────┘ ')

    result = []
    for index, line in enumerate(lines):
        result.append(''.join(lines[index]))

    for card in result:
        print(card)

def face_print(card):
    face_name = card[0]
    if face_name == 11:
       face_name = 'J'
    elif face_name == 12:
       face_name = 'Q'
    elif face_name == 13:
       face_name ='K'
   elif face_name == 14:
       face_name = 'A'

    return '%s' % (face_name)

 deal(deck)

最后,我的卡片被完美地展示了出来。不确定这是不是Python,但我愿意接受更多的反馈。在

谢谢!在

以下代码应该可以工作(Linux,Python3)

关键是使用zip函数一次从每张卡打印一行。在

def hero(playable,dealerHand,nonDealerHand):
    strNonDealerHand = []
    for index, card in enumerate(nonDealerHand):
        nonDealerCard = """
 ┌─────────┐
 │{}        │
 │         │
 │         │
 │    {}    │
 │         │
 │         │
 │        {}│
 └─────────┘""".format(card[0], card[1], card[0]).split('\n')
        strNonDealerHand.append(nonDealerCard)

    print('Your hand: ')

    for i in zip(*strNonDealerHand):
        print(" ".join(i))

hero(1, 'a', [[1, 1], [2, 2], [3, 3]])

输出示例:(注:不打印符号。我猜你缺少的功能是做那件事)

^{pr2}$

相关问题 更多 >

    热门问题