前提・実現したいこと
1次元セルオートマトンのプログラムをpythonで作っています。matplotlibで可視化するつもりです。環境構築が終えて、プログラムを書き実行したところ以下のようなエラーが発生しました。pythonは始めたばかりなので何を直せば良いのか分からない状態です。どなたかご教授いただければと思います。matplotlibが正常に動作することは簡単なグラフを描画することで確認しています。
発生している問題・エラーメッセージ
「Traceback (most recent call last):
File "gca1.py", line 68, in <module>
initca(ca) #初期値の読み込み
File "gca1.py", line 30, in initca
for no in range(len(line)):
TypeError: object of type 'int' has no len()」というエラーメッセージが出て、どのように直せば良いのかアドバイスを頂きたいです。
該当のソースコード
該当箇所は以下のコードの「←」がついている部分です。
#1次元セルオートマトンの計算プログラム
import sys
import numpy as np
import matplotlib.pyplot as plt
#定数
N=256#セルの最大個数
R=8#ルール表の大きさ
MAXT=256#繰り返しの回数
#下請け関数
setrule()関数
def setrule(rule, ruleno):
#ルール表の書き込み
for i in range(0, R):
rule[i] = ruleno % 2
ruleno = ruleno // 2#左シフト
#ルールの出力
for i in range(R-1, -1, -1):
print(rule[i])
setrule()関数終わり
initca()関数
def initca(ca):
#セルオートマトンの初期値を読み込む
line = input("caの初期値を入力せよ:")
print()
#内部表現への変換
for no in range(len(line)):←ココ
ca[no] = int(line[no])
initca()関数終わり
putca()関数
def putca(ca):
#caの状態の出力
for no in range(N-1, -1, -1):
print("{:1d}".format(ca[no]), end=="")
print()
putca()関数終わり
nextt()関数
def nextt(ca, rule):
#caの状態の更新
nextca = [0 for i in range(N)]#次世代のca
#ルールの適用
for i in range(1, N-1):
nextca[i] = rule[ ca[i+1]*4 + ca[i]*2 + ca[i-1] ]
#caの更新 for i in range(N): ca[i] = nextca[i]
nextt()関数終わり
#メイン
outputdata = [ [0 for i in range(N)] for j in range(MAXT + 1) ]
#ルール表の初期化
rule = [0 for i in range(R)]#ルール表の作成
ruleno = int(input("ルール番号を入力せよ:"))
if ruleno < 0 or ruleno > 255:
print("ルール番号は正しくない(", ruleno, ")")
sys.exit()
setrule(rule, ruleno)#ルール表をセット
#caへの初期値の読み込み
ca = [0 for i in range(N)]#セルの並び
initca(ca) #初期値の読み込み←ココ
putca(ca) #caの状態の出力
for i in range(N):
outputdata[0][i] = ca[i]
#時間発展の計算をする
for t in range(MAXT):
next(ca, rule) #次の時刻に更新
putca(ca) #ca状態の出力
for i in range(N):
outputdata[t+1][i] = ca[i]
#グラフを作る
plt.imshow(outputdata)
plt.show()
#終わり
### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。