2009-06-12 3 views
1

、列に値を変換:次のように私のデータ構造が初期化されている列とチャー

[[0,0,0,0,0,0,0,0] for x in range(8)] 

8文字、8行が、各列は列の5ビットを有するので、各整数の範囲であることができます0と31を含む。

数字177(0〜319の間でも可)をchar、row、columnに変換する必要があります。

もう一度試してみましょう。今度はより良いコード例を試してみましょう。ビットは設定されません。

私は問題の逆を追加しました。多分それが助けになるでしょう。

chars = [[0,0,0,0,0,0,0,0] for x in range(8)] 

# reverse solution 
for char in range(8): 
    for row in range(8): 
     for col in range(5): 
      n = char * 40 + (row * 5 + col) 
      chars[char][row] = chars[char][row]^[0, 1<<4-col][row < col] 

for data in range(320): 
    char = data/40 
    col = (data - char * 40) % 5 
    row = ? 
    print "Char %g, Row %g, Col %g" % (char, row, col), chars[char][row] & 1<<4-col 
+0

あなたは4x4のように見えますが、とにかく177がどのようにchar、row、colに分割されるのかはわかりません。あなたは何をしようとしていますか? –

+0

これは8x5のためです:)私はより良い例を作ります。 – Scott

答えて

2

わかりましたが、これが見えます。

合計で8 *(8 * 5)= 320ピクセルです。ピクセルのインデックスをディスプレイの内容を表す「フレームバッファ」の位置にマップしたいとします。私はピクセルがあなたの最初のループはこれがあることを示し、この(最初の文字だけのために示した)のように分布していると仮定し

は正しいです:

0 1 2 3 4 
5 6 7 8 9 
10 11 12 13 14 
15 16 17 18 19 
20 21 22 23 24 
25 26 27 28 29 
30 31 32 33 34 
35 36 37 38 39 

私たちは、その後、持っている:

# Compute which of the 8 characters the pixel falls in, 0..7: 
char = int(number/40) 

# Compute which pixel column the pixel is in, 0..4: 
col = number % 5 

# Compute which pixel row the pixel is in, 0..7: 
row = int((number - char * 40)/5) 

私は明示的な使用しましたint()は、数値が整数であることを明確にしています。

列を左から番号付けするので、列を反転したい場合があります。

+0

あなたは自分の状況を完全に記述しました。あなたはその質問に答えました。ありがとう。 – Scott

1

divmod機能をお探しですか?

:あなたは、各文字は5つのピクセルの8行である1X8のLCDディスプレイ、で作業しているかのように、[編集。代わりに、疑似言語の使用のpythonオペレーター]

char is between 0 and 319 

character = (char % 40) 
column = (char/40) % 5 
row  = (char/40)/5 
+0

それは私のために働かなかった。私はモッドがどこかにいると想像していますが、これまでのところ私は困惑しています。 – Scott

+0

divは/とmodはPythonでは%です。私はそれを反映するために私の応答を編集します。 –

関連する問題