0

単なる実験として、ユーザーが文字列を入力して Python コードとして実行できるプログラムを作成できるかどうかを確認したかったのです。ただし、if/while/for ステートメントが正しく機能しないようです。それで、私が見逃しているこれを行う方法はありますか?

私のソースコード:

prog = []

while True:
    varCommand = input(':')
    if varCommand == 'shell':
        code = ' '
        while code[len(code)-1] != 'end':
            code = [input('>>>>')]
            prog += code
        del prog[len(prog)-1]

    if varCommand == 'run':
        for i in range(len(prog)):
            exec(prog[i])

    if varCommand == 'view':
        for i in range(len(prog)):
            print('>>>>' + prog[i])

    if varCommand == 'delete':
        prog = []

たとえば、私がやろうとすると:

for i in range(1,11):

上記のプログラムでそれを実行しようとすると、コロンを指す EOF が原因で実行時エラーが発生します。これを機能させる方法はありますか?

4

1 に答える 1

1

問題はここにあります:

if varCommand == 'run':
    for i in range(len(prog)):
        exec(prog[i])

このループを使用すると、プログラムはユーザーが入力した内容を一度に 1 行ずつ実行します。したがって、最初execのループは for ループのみを認識し、その後に何かがあることを知りません。exec入力されたコード全体を表示する必要があります。

必要なのは、入力されたすべてを一度に実行することです。各文字列は改行で区切られます。上記を次のように置き換えます。

if varCommand == 'run':
    exec('\n'.join(prog))

だから私は今できる

:shell
>>>>for i in range(10):
>>>>    print(i)
>>>>
>>>>end
:run
0
1
2
3
4
5
6
7
8
9
于 2013-04-21T18:13:13.870 に答える