-8
string = ''
l3 = []
l4 = []
l = []
obj = open('input.txt', 'r')
l1 = obj.readlines()

for i in l1:
    l2 = i.split()
    for j in l2:
        if j != '+' or j != '-' or j != '*' or j != '/':
            l3.append(j)
        else:
            l4.append(j)

    l3.reverse()
    l4.reverse()
    while len(l3) != 0 and len(l4) != 0:
        d = l3[len(l3) - 1]
        del l3[len(l3) - 1]
        e = l4[len(l4) - 1]
        del l4[len(l4) - 1]
        f = l3[len(l3) - 1]
        del l3[len(l3) - 1]
        string = string + '(' + d + e + f + ')'
    string += '\n'
    l.append(string)
j = open('output.txt', 'w')
j.writelines(l)

プログラムを実行して、output.txt を開くと、空のファイルが表示されます。私は初心者であり、私が使用したこと以外にPythonについて何も知らないことに注意してください! スタック: 申し訳ありませんが、ここで質問: スタック: スタックはデータ構造 (リストと同様) であり、データは上部と呼ばれる一方の端でのみ追加および削除されます。

● アイテムをスタックに追加 (プッシュ) するには、スタックの一番上に配置する必要があります。

● アイテムをスタックから削除 (ポップ) するには、アイテムがスタックの一番上にある場合にのみ削除する必要があります。

● したがって、スタックに最後にプッシュされた要素は、スタックからポップされる最初の要素です。スタックの多くの例は、日常の状況で発生します。ほとんどのカフェテリアにはトレイや皿が山積みになっています。上部のみプレートの着脱が可能です。

中置式:

演算子はオペランドの間に書かれます。これは、式を記述する通常の方法です。A * ( B + C ) / D などの式は通常、

後置式:

ここで、演算子はオペランドの後に書かれています。上記の中置式は、ABC + * D / と同等です。演算子の評価順序は常に左から右であり、括弧を使用してこの順序を変更することはできません。上記の例では、「+」が「*」の左側にあるため、乗算の前に加算を実行する必要があります。

これらの表記間の変換:

括弧内で演算子を移動するだけで、これらの括弧付きフォーム間を直接変換できます (例: (X + Y) から (XY +))。式内のすべての演算子についてこれを繰り返し、最後に不要な括弧をすべて削除します。

問題文: 入力ファイルから後置式を読み取り、式を評価し、結果を出力ファイルに出力するプログラムを作成してください。式には数値と算術演算子のみが含まれ、指定された例のような変数は含まれないと想定することができます。

ヒント: スタックを使用する (スタックは Python リストを使用して実装できます)

4

2 に答える 2

4

「del」を使用する代わりに、次の方法でリストから削除しながら、最後の要素を直接割り当てることができます。

d = l3.pop()
e = l4.pop()
f = l3.pop()
于 2013-09-29T12:37:05.787 に答える
4

このプログラムが何をしようとしているのかはわかりませんが、1 つ思い浮かぶのは、ファイルを閉じるのを忘れたことです。

j.close()

最後に呼び出す必要があります。

さらに良いことに、withブロックを使用して Python がブロックを自動的に閉じるようにします。

with open('output.txt','w') as j:
    j.writelines(l)

その他のヒント:

より良い変数名を使用してください。jなどは、l3あなたのプログラムを読む人 (あなたを含む) にとって役に立ちません。l3のように見えるので特に悪い13です。

( の値に関係なくif j!='+' or j!='-' or j!='*' or j!='/':常にである)の代わりに、おそらくTruej

if not j in ('+', '-', '*', '/'):
于 2013-09-29T12:24:57.360 に答える