質問: ### Python(IDLE)でプログラミング教材を作っています。while文やfor文を用いることなく、一言(一単語)の命令でループさせたいです。 ### 発生している問題・エラーメッセージ 初等教育向けのプログラミング教材を開発しています。(専門高校高3) 受験の推薦入試でプレゼンで行うときに使います。 使用するCPUはRaspberry Piで言語はPythonです。 自分が製作した車型のロボットを簡単な命令コードで動作できるようにしたいです。 作りたい命令コードは以下の8つです。 FWD・・・前進 WAT・・・待機 BRK・・・後退 MRK(x)・・・xは番号 LFT・・・左折 LMP(x)・・・MRK(x)へジャンプ RGT・・・右折 SW(x)・・・MRK(x)へジャンプ FWD,BRK,LFT,RGT,WATはGPIOによる出力をするプログラムをモジュールにして、 関数として呼び出せるのですが、MRK,JMPに関してはそう簡単にいきませんでした。 MRK,JMPは組み合わせることでループの役割をさせたいです。 そのため、 入力したプログラムを全て読み込む→MRKの行を記憶→JMPを検知→MRKにジャンプ →JMP以下のプログラムを再実行 の流れで処理する必要がある。と、学校の教諭は言っていました。 以下に記すのが、入力したプログラム例です。 MRK(1) マーク1番を置く FWD(1.0) 前進(1s) LFT(1.0) 左折(1s) JMP(x) マークの1番へジャンプ 以上のプログラムの実行結果としては →前進(1s)→左折(s)→ ↑ ↓ ← ← ← ← ← ← です。ループ制御をしたいのです。 しかし、Pythonでプログラムを途中(ここではMRKの後)から実行するやり方が分かりません。 エラーメッセージ ``` ### 該当のソースコード ``` Python ソースコード ``` ### 試したこと 一度書き込んだプログラムを全て読み取りMRK、JMPと名づけた関数の文字列をfind()でみつける ↓ JMPの文字列を取得したらMRKまでジャンプし、MRK以下の命令をまた順番に実行する。事を試みた。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: どうやら事前に解析する余地があるようですね。 それならば、扱いやすいように命令を書き直してしまっても良いのでは? 例えば、スクリプト読み込み時に次のように処理を置きなおしてやります。 ``` MRK(1) FWD(1.0) LFT(1.0) JMP(1) ``` ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ``` MRK None FWD 1.0 LFT 1.0 JMP 0 # ジャンプ先の行番号 ```