-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

我不知道这个程序试图做什么,但我想到的一件事是你忘记关闭文件:

j.close()

应该在最后调用。

更好的是,使用一个with块让 Python 自动关闭它:

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

其他一些提示:

使用更好的变量名。jl3对阅读您的程序的人(包括您)没有帮助。l3特别糟糕,因为它几乎看起来像13

而不是if j!='+' or j!='-' or j!='*' or j!='/':(始终是True,无论j' 值如何),您可能的意思是

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