0

我正在制作纸牌游戏,我想用字符串以图形方式显示纸牌。但是,使用我当前的方法将它们放在彼此下方。我怎样才能在不破坏视觉效果的情况下将它们放在一起?

def display_card(card):
    
    suit = card[0]
    value = card[1]
    
    graphic_card = (
        '┌─────────┐\n'
        '│{}       │\n'
        '│         │\n'
        '│         │\n'
        '│    {}   │\n'
        '│         │\n'
        '│         │\n'
        '│       {}│\n'
        '└─────────┘'
    ).format(
        format(value, ' <2'),
        format(suit, ' <2'),
        format(value, ' >2')
    )

    print(graphic_card)
    
 
cards= ["♥2", "♥3", "♥4"]
for card in cards:
    display_card(card)
4

2 回答 2

3

如果您将方法更改为仅返回卡片的行列表,则可能会更简单,然后您可以将zip它们放在一起并打印它们。

def get_card(card):
    suit = card[0]
    value = card[1:]  # 1: for '10'
    return (
        '┌─────────┐\n'
        '│{}       │\n'
        '│         │\n'
        '│         │\n'
        '│    {}   │\n'
        '│         │\n'
        '│         │\n'
        '│       {}│\n'
        '└─────────┘'
    ).format(
        format(value, ' <2'),
        format(suit, ' <2'),
        format(value, ' >2')
    ).splitlines()

def display_cards(cards):
    for lines in zip(*map(get_card, cards)):
        print(*lines)
 
cards= ["♥2", "♥3", "♥4"]
display_cards(cards)
于 2021-01-12T14:34:57.983 回答
1

你可以试试这段代码:

from collections import defaultdict

def solution(cards):
    
    # Create a dictionary with
    # key: the line number
    # value: a list contain value of each line from each card
    dic = defaultdict(list)
    
    for card in cards:
        # Loop through each card
        
        # Get value from each card
        suit = card[0]
        value = card[1]
        
        for i in range(0, 9):
            # Add value to each line
            # Example value for key 1 after 3 loops:
            # dic[1] = ['│2        │', '│3        │', '│4        │']
            if i == 0:
                dic[i].append('┌─────────┐')
            elif i == 1:
                dic[i].append('│{}       │'.format(format(value, ' <2')))
            elif i == 4:
                dic[i].append('│    {}   │'.format(format(suit, ' <2')))
            elif i == 7:
                dic[i].append('│       {}│'.format(format(value, ' <2')))
            elif i == 8:
                dic[i].append('└─────────┘')
            else:
                dic[i].append('│         │')
                
    for i in range(0, 9):
        for a in range(0, len(cards)):
            # end=" " to not add a newline to the end of the string
            print(dic[i][a], end=" ")
        print("")

a = ["♥2", "♥3", "♥4"]

solution(a)

输出:

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

你可以在这里试试。

这不是实现它的好方法,但它会给你一些关于你的问题的想法。使用我的代码,您的输入必须是一个列表。

以 1 张卡为例:a = ["♥2"]

于 2021-01-12T14:05:40.310 回答