0

Python で 7 セグメント ディスプレイ エミュレーターを作成中ですが、小さな問題が発生しました。私が行ったことは、文字を表す一連の数字を持つ各数字のリストを作成することです.["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)

出力例

||

||

必要な出力

|
|

|
|

ありがとう

4

1 に答える 1

1

入力形式を把握するのに少し時間がかかりました。3 つの値のいずれかを表すために 15 文字を使用するのは少しばかげています。ほぼ定義上、7 ビット出力です。レンダリングが簡単になると思います。

私があなたの質問を正しく理解していれば、現在のwidth=1出力を次のように変えたいと思うでしょう8:

 -
| |
 -
| |
 -

スケールアップしたバージョンではwidth=2、は次の8ようになります。

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

現在、シングル幅8には input が必要['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 に答える