0

我正在用python制作一个七段显示模拟器,但遇到了一个小问题。我所做的是为每个数字制作一个列表,其中包含一系列代表一个字符的数字,就像这样["000", "001", "000", "001", "000"]这代表数字 1,0 是空格,1 是管道字符 (|),2 是破折号。

这适用于 1 的宽度,但我希望它能够达到任何宽度。我尝试通过将字符数乘以宽度来做到这一点,例如宽度为 2 的数字一看起来像["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)

示例输出

||

||

想要的输出

|
|

|
|

谢谢

4

1 回答 1

1

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

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

 -
| |
 -
| |
 -

对于放大版本,其中的width=2an8如下所示:

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

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

请注意,带有1s 的行作为一个整体重复,并且中间字符在每一行上都重复。

这是一个从宽度 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))
 --- 
|   |
|   |
|   |
 --- 
|   |
|   |
|   |
 --- 
于 2013-08-25T15:04:14.600 回答