尝试通过在单个多行字符串中将行添加在一起来逐行打印显示

时间:2015-04-04 22:53:17

标签: python arrays string python-3.x rows

我正在尝试打印出一系列显示如下的模具:

   ___     ___     ___     ___     ___
  |*  |   |*  |   |* *|   |*  |   |   |
  |   |   | * |   |* *|   | * |   | * |
  |  *|   |  *|   |* *|   |  *|   |   |
   ^^^     ^^^     ^^^     ^^^     ^^^

这些骰子应该代表我掷骰子时产生的数字。我创建了一个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个骰子。 最近的建议是“你必须 逐行构建骰子的整个显示,然后将这些行添加到一起 在单个多行字符串中。“我只是不确定如何执行它。

1 个答案:

答案 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作为分隔符加入行列表的各个部分。

我会将其整合到您的其余代码中。