七段显示宽度

时间:2013-08-25 09:53:35

标签: python python-2.7 python-3.x

我正在使用python制作七段显示模拟器并遇到一个小问题。我所做的是为每个数字制作一个列表,其中包含一系列代表字符的数字,如["000", "001", "000", "001", "000"]这表示数字1,0代表空格,1代表管道字符(|)和2一阵冲刺。

这适用于宽度为1但我希望它能够达到任何宽度。我试过通过将字符数乘以宽度来做到这一点,例如,宽度为2的数字1看起来像["000000", "000011", "000000", "000011", "000000"]

我遇到的问题是当它遇到管道字符时,它会将它打印在同一行而不是它下面。像这样'| |”什么时候应该像

|
|

我尝试使用\n在新行上打印它,但这会让其他一切混乱。

如何以更好的方式或如何解决我的问题的任何建议将不胜感激。

这是我的代码。

  uno = ["000", "001", "000", "001", "000"]
  temp = ""
    width = 2
    for line in uno:
    temp = ""
    for char in line:
        temp += char * width
    temp = temp.replace('0', ' ').replace("1", "|").replace('2', '-')
    print(temp)

示例输出

||

||

通缉输出

|
|

|
|

由于

1 个答案:

答案 0 :(得分:1)

我花了一些时间来掌握你的输入格式。使用15个字符比使用三个值中的任何一个来表示什么是有点傻,几乎按照定义为7位输出。我想这确实使渲染变得容易。

如果我正确理解了您的问题,您希望能够转换当前的width=1输出,其中8如下所示:

 -
| |
 -
| |
 -

要放大版本,width=28的位置如下:

 --
|  |
|  |
 --
|  |
|  |
 --

目前,单宽度8需要输入['020', '101', '020', '101', '020']。如果您想使用相同的渲染方法(只需将数字替换为字符),则需要将其翻译为:['0220', '1001', '1001', '0220', '1001', '1001', '0220']以增加大小。

请注意,1 s的行作为一个整体重复,中间字符在每一行重复。

这是一个从宽度1转换为任何其他宽度的函数:

def scale(code, factor):
    if factor == 1:
        return code

    result = ["{}{}{}".format(line[0], line[1:-1]*factor, line[-1])  # widen
              for line in code]

    for i in range(len(result)-2, 0, -2):
        result[i:i+1] = result[i:i+1]*factor       # stretch vertically

    return result

def render(code):
    for line in code:
        print(line.replace('0', ' ').replace('1', '|').replace('2', '-'))

示例输出:

>>> render(['020', '101', '020', '101', '020'])
 - 
| |
 - 
| |
 - 
>>> render(scale(['020', '101', '020', '101', '020'], 2))
 -- 
|  |
|  |
 -- 
|  |
|  |
 -- 
>>> render(scale(['020', '101', '020', '101', '020'], 3))
 --- 
|   |
|   |
|   |
 --- 
|   |
|   |
|   |
 ---