繁体   English   中英

七段显示

[英]seven segment display with width

我正在用python制作七段显示模拟器,但遇到了一个小问题。 我要做的是为每个数字列出一个具有一系列代表字符的数字,例如["000", "001", "000", "001", "000"]它代表数字1,其中0是空格,1是竖线字符(|),2是破折号。

对于1的宽度,这可以正常工作,但我希望它能够达到任何宽度。 我尝试通过将字符计数乘以宽度来进行此操作,例如,宽度为1的数字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)

示例输出

||

||

想要的输出

|
|

|
|

谢谢

我花了一点时间来掌握您的输入格式。 使用15个字符比使用三个值中的任何一个来表示什么(根据定义几乎是七位输出)有点愚蠢。 我猜它确实使渲染变得容易。

如果我正确理解了您的问题,则希望能够将当前的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))
 --- 
|   |
|   |
|   |
 --- 
|   |
|   |
|   |
 --- 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM