我正在使用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)
示例输出
||
||
通缉输出
|
|
|
|
由于
答案 0 :(得分:1)
我花了一些时间来掌握你的输入格式。使用15个字符比使用三个值中的任何一个来表示什么是有点傻,几乎按照定义为7位输出。我想这确实使渲染变得容易。
如果我正确理解了您的问题,您希望能够转换当前的width=1
输出,其中8
如下所示:
-
| |
-
| |
-
要放大版本,width=2
和8
的位置如下:
--
| |
| |
--
| |
| |
--
目前,单宽度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))
---
| |
| |
| |
---
| |
| |
| |
---