我正在尝试将玩家手中的扑克牌打印在一行上,而不是像这样的单独行上打印:
┌─────────┐┌─────────┐
│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│
└─────────┘ └─────────┘ └─────────┘ └───────── └─────────┘
我不确定我要去哪儿,但是对您的帮助将不胜感激。
谢谢!
答案 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,但我愿意接受其他反馈。
谢谢!