1

私はオンラインでいくつかのチュートリアルを行っていますが、次のことを行う関数 getBASIC() を記述してください: 入力から while ループを使用して行を読み続けます。最後に到達すると、プログラム全体を文字列のリストの形式で返す必要があります。文字列のリストの例:

5 GOTO 30
10 GOTO 20
20 GOTO 10
30 GOTO 40
40 END

プログラムを書きましたが、動作しませんが、投稿します。

def getBASIC():
    L=[]
    while "END" not in L:
        L.append(str(input()))
        if str(input()).endswith("END"):
            break
    return L

また、 IS または RECURSION の使用が許可されていないことにも気付きました。

4

5 に答える 5

4

いくつかのエラーがあります:

  • input()2回目はリストに追加せずに2回呼び出します
  • 'END' in L'END'リストに(全体の)行があるかどうかを判断しますL(ない)

注:既にオブジェクトinput()を返します。戻り値strを呼び出す必要はありません。str()

空行になるまで入力を読み取るには、次のことができます。

def getBASIC():
    return list(iter(input, ''))

ENDまたは、行末で が検出されるまで読み取るには:

def getBASIC():
    L = []
    while True:
        line = input()
        L.append(line)
        if line.endswith("END"):
           break #NOTE: it doesn't break even if `line` is empty
    return L
于 2012-08-09T14:54:23.487 に答える
2

Pascalを学んでいたとき、少なくとも1回の反復が必要なループのプライミング読み取りを使用しました。これはPythonでもうまく機能します(私はwhile True / breakループよりもそれを好みます)。

(最後の行の読み取りではなく)リストの最後の行をテストするだけで、入力を格納する変数が不要になり、読み取り操作と追加操作を組み合わせることができます。

def getBASIC():
    lines = [input("]")]    # use Applesoft BASIC prompt  :-)
    while not lines[-1].upper().rstrip().endswith("END"):
        lines.append(input("]"))
    return lines
于 2012-08-09T14:55:24.470 に答える
1

コードに次の問題があります。

  1. while "END" not in L入力が「40END」の場合、「 」は機能しません
  2. Python 2.7では、「input()」は「」と同等eval(raw_input()))です。そのため、Pythonは「GOTO」ステートメントを評価しようとしています。
  3. " if str(input()).endswith("END"):"はLに入力を追加しません

したがって、関数の更新バージョンは次のとおりです。

def getBASIC():
    L = []
    while True:
        # Grab input
        L.append(str(raw_input()))

        # Check if last input ends with "END"
        if L[-1].endswith("END"):
            break
    return L
于 2012-08-09T14:52:26.297 に答える
1
  1. raw_input()の代わりに使用しinput()ます。input() 関数は、標準入力から文字列を取得し、Python ソースコードとして実行しようとします。raw_input() は期待どおりに文字列を返します。
  2. input()ループ内で 2 回使用します。つまり、1 サイクルの反復内で 2 つの文字列が入力されるのを待ちます。while ループ内に最後の条件 (if ステートメント) は必要ありません。Lで「END」に遭遇すると終了します。

次のコードは、仕事をする必要があります。

def getBASIC():
    L=[]
    while True:
        inp = raw_input()
        L.append(inp)
        if inp.endswith('END'):
            break
    return L
于 2012-08-09T14:39:23.937 に答える
1

これを試してください:

def get_basic():
    L = []
    while True:
        line = str( input() )
        L.append( line )
        if "END" in line:
            break
    return L
于 2012-08-09T14:39:36.367 に答える