簡體   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