私のコードはこのように見え、キーワードのリストを解析して位置を吐き出し、位置を計算されたコードに置き換えて、深さのいくつかのレベルを削除するアークに渡します。それは実際には機能しますが、2 つまたは 3 つのレベルの深さを追加する必要があり、よりエレガントで堅牢で無限のレベルの深さを処理できるものを探しています。
編集:リストで操作を行いたいのですが、リストはプラス、マイナスなどの単純なコードを処理できる必要があり、if条件も追加したいです。リストでは、次のようになります。
sb.append (...['mul', -0.20,'hpt']...)
リストはゲーム用であり、すべてのリストはターゲットの統計を変更できる呪文です。私は可能な限り冗長な呪文を設計する言語を書き込もうとしているので、if 条件を追加し、後で他の基本的な操作も同様に追加したいと考えています。
"sb.append (...if 'hp' > 'mp':['mul', -0.20,'hpt' ]...)" (文字列は前に数値に変換されます)
ただし、リストは関数の外に書き込まれ、変数が宣言され、インポートされる前に書き込まれるため、エスケープコードを好みます。
def parseop(tmpsp):
for y in range ( len (tmpsp) ):
if type(tmpsp[y]) is list:
for x in range ( len (tmpsp[y]) ):
if type(tmpsp[y][x]) is list:
for z in range ( len (tmpsp[y][x]) ):
if type(tmpsp[y][x][z]) is list:
for t in range ( len (tmpsp[y][x][z]) ):
if type(tmpsp[y][x][z][t]) is list:
for e in range ( len (tmpsp[y][x][z][t]) ):
if arn(tmpsp[y][x][z][t][e]): tmpcn.append([y,x,z,t])
if arn(tmpsp[y][x][z][t]): tmpcn.append([y,x,z])
if arn(tmpsp[y][x][z]): tmpcn.append([y,x])
if arn(tmpsp[y][x]): tmpcn.append([y])
if len (tmpcn):
tmpcn.reverse()
for x in range ( len (tmpcn) ):
dprint ((tmpcn, len (tmpcn[x])))
if len (tmpcn[x]) ==4: tmpsp[tmpcn[x][0]][tmpcn[x][1]][tmpcn[x][2]][tmpcn[x][3]] = arg(tmpsp[tmpcn[x][0]][tmpcn[x][1]][tmpcn[x][2]][tmpcn[x][3]])
elif len (tmpcn[x]) ==3: tmpsp[tmpcn[x][0]][tmpcn[x][1]][tmpcn[x][2]] = arg(tmpsp[tmpcn[x][0]][tmpcn[x][1]][tmpcn[x][2]])
elif len (tmpcn[x]) ==2: tmpsp[tmpcn[x][0]][tmpcn[x][1]] = arg(tmpsp[tmpcn[x][0]][tmpcn[x][1]])
elif len (tmpcn[x]) ==1: tmpsp[tmpcn[x][0]]
def arg(tmp):
ddprint ('arg',tmp)
if tmp[0] == 'mul':
del tmp[0]
for d in range ( len (tmp) ):
if ifa(tmp[d]):
tmp[d] = ifa(tmp[d])
ddprint ((arg, tmp))
tmp = m(*tmp)
ddprint ((arg, tmp))
return tmp
elif tmp[0] == 'div':
del tmp[0]
for d in range ( len (tmp) ):
if ifa(tmp[d]):
tmp[d] = ifa(tmp[d])
tmp = d(*tmp)
ddprint ((arg, tmp))
return tmp
elif tmp[0] == 'add':
del tmp[0]
for d in range ( len (tmp) ):
if ifa(tmp[d]):
tmp[d] = ifa(tmp[d])
ddprint('add',tmp)
tmp = a(*tmp)
ddprint ((arg, tmp))
return tmp
else: print 'There is trouble in arg'
def arn(tmp):
ddprint ('arn',tmp)
if tmp == 'mul': return 1
if tmp == 'div': return 1
if tmp == 'add': return 1