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的了解比我使用的更多! 栈: 对不起,这是问题: 堆栈: Stack是一种数据结构(就像列表一样),其中只在一端添加和删除数据,称为顶层
●要将项目添加(推送)到堆栈,它必须放在堆栈的顶部。
●要从堆栈中删除(弹出)一个项目,只有当它位于堆栈的顶部时才必须将其删除 堆栈也是。
●因此,推入堆栈的最后一个元素是要弹出的第一个元素 不在堆栈中 堆栈的许多示例发生在日常情况中。几乎任何自助餐厅都有一堆 托盘或盘子。您只能在顶部移除并添加一个盘子。
中缀表达式:
运算符写在它们的操作数之间。这是我们写的通常方式 表达式。表达式如A *(B + C)/ D. 通常被视为
后缀表达式:
这里,运算符是在它们的操作数之后写的。上面给出的中缀表达式是 相当于A B C + * D / 操作员的评估顺序始终是从左到右,括号不能用于更改此顺序。因为“+”在上面的例子中是“*”的左边,所以必须在乘法之前执行加法。
在这些表示法之间转换:
只需移动操作符即可直接在这些括号中转换 在括号内,例如(X + Y)至(X Y +)。对一个中的所有操作符重复此操作 表达式,最后删除任何多余的括号。
问题陈述: 编写程序以从输入文件中读取后缀表达式,计算表达式 并将结果打印到输出文件。您可以假设表达式仅涉及 数字和关节运算符,而不是给定例子中的变量。
提示:使用堆栈(可以使用Python列表实现堆栈)
答案 0 :(得分:4)
我不知道这个程序试图做什么,但有一点想到的是你忘了关闭文件:
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!='/':
(始终为True
,无论j
的值如何),您可能意味着
if not j in ('+', '-', '*', '/'):
答案 1 :(得分:4)
您可以直接指定最后一个元素,而不是使用'del',同时通过以下方式将其从列表中删除:
d = l3.pop()
e = l4.pop()
f = l3.pop()