需要ASCII纸牌才能在一行上打印

时间:2018-12-02 06:40:20

标签: python python-3.x ascii-art

我正在尝试将玩家手中的扑克牌打印在一行上,而不是像这样的单独行上打印:

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

我的卡片与面孔和西服成一个元组阵列。

我目前正在使用IDLE 3.7.0在Mac上工作,因为我知道我的教授将使用它对我的最终项目进行评分。我认为任何Mac / Linux解决方案都可以使用,但目前我接受任何事情。

这是创建我的卡片的代码:

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

这是我的打印面孔的代码:

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 = ' ')

不幸的是,这似乎不起作用。

我的输出看起来像这样:

┌─────────┐┌───────┐┌───────┐┐─────────┐ ────────┐│2││3││5││9││Q││││││││││││││││││││││♦││♠││ ♥│ ♠│││││││││││││││││││││││││││││││2││3││5││9││Q│└──────── └└────────────└─────────┘└─────────┘ ─────────┘

我尝试了以下两种建议的解决方案,最终得到了这样的输出:

您的手: ┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐

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

         │         │ │        │ │         │ │         │ │        │

         │         │ │        │ │         │ │        │ │        │

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

         │         │ │         │ │         │ │         │ │         │

         │         │ │         │ │         │ │         │ │         │

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

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

我不确定我要去哪儿,但是对您的帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

以下代码应该可以使用(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]])

示例输出:(注意:这不是在打印符号。我想您缺少的功能正在完成该工作)

Your hand: 

 ┌─────────┐  ┌─────────┐  ┌─────────┐
 │1        │  │2        │  │3        │
 │         │  │         │  │         │
 │         │  │         │  │         │
 │    1    │  │    2    │  │    3    │
 │         │  │         │  │         │
 │         │  │         │  │         │
 │        1│  │        2│  │        3│
 └─────────┘  └─────────┘  └─────────┘

答案 1 :(得分:0)

我最终弄清楚了,效果很好。

这是我的代码:

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)

这最终完美显示了我的卡。不知道这是否是pythonic,但我愿意接受其他反馈。

谢谢!