我正在尝试打印出一系列显示如下的模具:
___ ___ ___ ___ ___
|* | |* | |* *| |* | | |
| | | * | |* *| | * | | * |
| *| | *| |* *| | *| | |
^^^ ^^^ ^^^ ^^^ ^^^
这些骰子应该代表我掷骰子时产生的数字。我创建了一个Die类和一个Hand类,它们是在下面生成的。
import random
class Die():
def __init__(self):
self.value = random.randint(1,6)
def roll(self):
self.value = random.randint(1,6)
'''def __str__(self):
return str(self.value)'''
import Die
class Hand:
def __init__(self):
self.L=[]
for i in range(5):
self.L.append(Die.Die()) #makes the number of dice
def __str__(self):
"""converts hand to a string for printing"""
return "{0},{1},{2},{3},{4}".format(self.L[0], self.L[1], self.L[2], self.L[3], self.L[4])
def roll(self, keep):
for i in range(5):
if i+1 not in keep:
self.L[i].roll()
上面给出的代码将在主文件进入
时生成一个数字列表h = hand.Hand()
h.roll() #this rolls the hand again
print(h)
任何想法如何让我的结果以提供的显示样式打印?有人建议,最好的方法是打印三行来构建所有5个骰子。 最近的建议是“你必须 逐行构建骰子的整个显示,然后将这些行添加到一起 在单个多行字符串中。“我只是不确定如何执行它。
答案 0 :(得分:1)
这是你可以做到的一种方式:
DIE_PARTS = [
['___'] * 6,
[' ', '* ', '* ', '* *', '* *', '* *'],
[' * ', ' ', ' * ', ' ', ' * ', '* *'],
[' ', ' *', ' *', '* *', '* *', '* *'],
['^^^'] * 6,
]
DIE_SPACING = ' ' * 3
def print_hand(dies):
# Build line parts
lines = [[],[],[],[],[]]
for i,line in enumerate(lines):
for d in dies:
if i in [1,2,3]: edge = '|'
else: edge = ' '
part = ''
part += edge # Leading edge of die
part += DIE_PARTS[i][d-1] # "pips"
part += edge # Trailing edge of die
line.append(part)
# Join lines
lines = [DIE_SPACING.join(l) for l in lines]
# Print lines
for l in lines: print(l)
print_hand([1,2,3,4,5,6])
输出:
___ ___ ___ ___ ___ ___ | | |* | |* | |* *| |* *| |* *| | * | | | | * | | | | * | |* *| | | | *| | *| |* *| |* *| |* *| ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
如果不清楚,你是逐行构建5行输出的每一行,然后为死亡而死。
所以它就像
line 1 - die 1, line 1 - die 2, line 1 - die 3, ...
line 2 - die 1, line 2 - die 2, line 2 - die 3, ...
...
line 5 - die 1, line 5 - die 2, line 5 - die 3, ...
然后它使用DIE_SPACING
作为分隔符加入行列表的各个部分。
我会将其整合到您的其余代码中。