(...私のコードは本当にずさんであり、主に、すべての変数、global
sおよびif文の理解には少し難しいかもしれない、私と一緒にご負担ください)コマンドは、私は
私はTelluriumという名前のコードゴルフ用に設計された、難解な、難解なテープベースのプログラミングを作成しました(これは要素fyiです)。これまでのところ、条件文以外はかなりうまくいきました。ここで
は、条件文の構文です:
(integer[code]
ここでのPythonの同等です:
if tape[selectedCell] == integer: code
だから、私の問題は、あなたが一度だけのステートメントを使用することができるということですコード内で一度にそれを使用してください、それは動作しません。それはエラーを投げることさえしません。それは何もしません。
ここでは、動作しないコマンドのいくつかの例と出力するものを示します。
(0[^](1[^]+(1[^]
出力0は、代わりに1が続くなら、出力はのみ 0私はそれを選択したセルの値ではないので、インタプリタによってスキップされるべき最初(1[^]
とは何かを、持っていると思います1.
別の例を示します。+++++(0[^](5[^]
です。セルの値は5にインクリメントされます。次に、(0[^]
は、セルの値がゼロに等しいかどうかを確認します。まあ、そうではないので、スキップする必要があります。次に、(5[^]
は、セルの値が5に等しいかどうかをチェックします。それは、それは出力5
する必要があります。代わりに、5\n5
を出力します。
さらに別の例:(0[^](1[^](0[^]
。セルの値が1でないため、(1[^]
命令はインタプリタによって完全に無視されるべきです。それはまだゼロです。したがって、2つの0[^]
コマンドがあるので、目的の出力は0\n0
でなければなりません。
(0[^]
は完全に機能します。これは一例で(1[^]
2.
ように私にはない、私は問題がスキップされるべき文とは何かを持っていることを考える0
あるセルの値を出力しますなぜこれがうまくいかないか知っている、私は知っていることを試みた。私はいくつかの助けに感謝したい、私は本当にこの言語を取得し、再び行ってみたい!
ここでは、余分なコマンドがすべて含まれていないインタープリタがあります。
tape = [0] * 25500
readingNum = False
readingIf = False
num = []
code = []
selectedCell = 0
def prompt():
userInput = input("> ")
return userInput
def read(cmd):
length = len(cmd)
commands = list(cmd)
for i in range(0, length):
parse(commands[i])
def parse(cmd):
global tape
global readingNum
global readingIf
global num
global code
global selectedCell
if readingNum == True:
if cmd == "[":
readingNum = False
readingIf = True
else:
num.append(cmd)
elif readingIf == True:
if cmd == "]":
readingIf = False
if tape[selectedCell] == int(''.join(num)):
read(code)
code = []
num = []
else:
return
else:
code.append(cmd)
elif cmd == "^":
print(tape[selectedCell])
elif cmd == "+":
tape[selectedCell] += 1
elif cmd == "(":
readingNum = True
else:
print("Error")
while 1:
read(prompt())
これは本当に[mcve]である必要があります。私たちはインタプリタ全体をあなたのためにデバッグするためのコードを読むつもりはありません。あなたは問題を絞り込むのにもっと時間を費やす必要があります。 –
ベストアドバイス - 賢明な量の印刷ステートメントを追加するか、Pythonデバッガを快適に使い、コードを1行ずつステップ実行します。 – user590028
@MorganThrapp余分なコマンドを一切使わずに、インタプリタのバージョンでポストを更新しました。 (ずっと短い) – m654