1

試行錯誤の末、ようやく数学が正しく理解できたと思います。最初は、複雑なリストのセットとしてこれを開始しましたが、必要なものには配列関数の方が適していることがわかりました。

配列を確立したので、次の新しいエラーが発生します。

編集:

Traceback (most recent call last):
  File "(stdin)", line 1, in (module)
  File "backandforth3.py", line 118, in (module)
    frames.insert((x+f), (archstartred[x]))
TypeError: list index out of range

すべてのデータがすでに整数になっているとイライラしながらコンピューターに怒鳴りつけたので、コンピューターのモニターを惜しまず、ここで試してみようと思いました。これまでのところ、ここでのサポートはすべて素晴らしいものでした。

配列と配列のデータを生成する方法は次のとおりです。 編集: 非整数値を生成しているように見えるため、プログラム コードにリスト ジェネレーターを追加しました。

#List Generator

archstartred = []
archstartgrn = []
archstartblu = []

##Red List
for x in range (0, cursorsize):
    if len(archstartred) < cursorsize:archstartred.insert(0,cursred)

for x in range (0, (archnodes-cursorsize)):
    if len(archstartred) < archnodes:archstartred.append(backred)

##Green List
for x in range (0, cursorsize):
    if len(archstartgrn) < cursorsize:archstartgrn.insert(0,cursgrn)

for x in range (0, (archnodes-cursorsize)):
    if len(archstartgrn) < archnodes:archstartgrn.append(backgrn)

##Blue List
for x in range (0, cursorsize):
    if len(archstartblu) < cursorsize:archstartblu.insert(0,cursblu)

for x in range (0, (archnodes-cursorsize)):
    if len(archstartblu) < archnodes:archstartblu.append(backblu)


archstartred = [int(value) for value in archstartred]
archstartgrn = [int(value) for value in archstartgrn]
archstartblu = [int(value) for value in archstartblu]





#Frame Creation

from array import *

frames=array('i', (0 for i in range (0,workingframes*archnodes*3)))






#Frame Population

for f in range (0, workingframes):

    if f<=(workingframes/2):

        for x in range (0, (archnodes*3)):
            frames.pop(x+f)
            frames.insert((x+f), (archstartred[x]))
            frames.pop((x+f)+workingframes)
            frames.insert((x+f+workingframes), (archstartgrn[x]))
            frames.pop((x+f)+workingframes*2)
            frames.insert((x+f+workingframes*2), (archstartblu[x]))

        for y in range (0, nodesperframe):
            archstartred.pop()
            archstartgrn.pop()
            archstartblu.pop()
            archstartred.insert(0, backred)
            archstartgrn.insert(0, backgrn)
            archstartblu.insert(0, backblu)

    else:
        for y in range (0, nodesperframe):
            archstartred.pop(0)
            archstartgrn.pop(0)
            archstartblu.pop(0)
            archstartred.append(backred)
            archstartgrn.append(backgrn)
            archstartblu.append(backblu)

        for x in range (0, (archnodes*3)):
            frames.pop(x+f)
            frames.insert((x+f), (archstartred[x]))
            frames.pop((x+f)+workingframes)
            frames.insert((x+f+workingframes), (archstartgrn[x]))
            frames.pop((x+f)+workingframes*2)
            frames.insert((x+f+workingframes*2), (archstartblu[x]))

これは、他の投稿で扱ってきたのと同じプログラムです。基本的には、RGB 照明システムで使用するデータを生成することです。この「単純な」プログラムは、2 色を使用して前後の効果を生成します。その他の変数には、エフェクトにかかる時間の長さ、フレーム サイズ (「シーケンサー」を使用して表示を生成し、シーケンサーでフレーム サイズを変更できます)、「カーソル」サイズなどが含まれます。

もちろん、この効果が分かれば、数式に基づいてより複雑な効果を作成できるようになります。

4

3 に答える 3

1

新しいエラーは、配列の長さを超える値にアクセスしようとしていることを意味します。4 つの項目の配列がある場合[1, 2, 3, 4]arr[5] エラーで失敗します。

そのため、おそらくループ回数が多すぎます。そうしないと、配列に十分な要素がありません。

于 2012-07-26T12:55:21.407 に答える
1

引用符で囲まれた整数のリストを変換して、このコード['255', '255', '255', '255', '0']int適切に使用するには (あなたは近かったです):

archstartred = [int(value) for value in archstartred]

それは得ます

[255, 255, 255, 255, 0]
于 2012-07-25T22:49:48.837 に答える
1

すべての archstartred を取得するために x をループしているようには見えません。[x] を余分に書きましたか?

つまり、ここでは、これはすべてのループの外側で、レベル 0 でインデントされています。

for x in range (0, (archnodes-cursorsize)):
   if len(archstartblu) < archnodes:archstartblu.append(backblu)

archstartred[x] = [int(value) for value in archstartred[x]]
archstartgrn[x] = [int(value) for value in archstartgrn[x]]
archstartblu[x] = [int(value) for value in archstartblu[x]]

したがって、archstartred、grn、blu の最後の項目 (その場合) のみを「タッチ」します。私はどちらかを期待していたでしょう

for x in ...
    archstartred[x] = [int(value) for value in archstartred]

また

archstartred = [int(value) for value in archstartred]
于 2012-07-25T22:50:21.270 に答える