文件操作与异常处理和栈在表达式求值中的应用

54 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

从文件中读取数据

Eg:

输入n
n = int(input())

with open('src/Step1/test.txt') as file_object:
lines = file_object.readlines()
i=0
请在此添加代码,实现编程要求
#********** Begin *********#
for line in lines:
print(line.rstrip())
i=i+1
if i==n:
break

写入空文件

要将信息写入文本文件中,我们需要用open()方法,只不过除了将文本文件名当作参数传入函数open()中去之外,还需要再传入写参数w
EG:1. with open('test2.txt','w') as example:
example.write('Hello world!')

异常处理:

Eg:
1.try:

  1. print(2/0)
  2. except:
  3. print("We can't divide by zero!")
    print(2/0)语句放在了try代码块中,这是一个错误语句,因为 0 不能当除数。try-except代码块的作用就是当try代码块中的程序代码运行没有错误,则跳过except代码块;反之如果try代码块中的程序代码运行出现错误,则运行except代码块中的内容,一般except代码块中的内容都是输出错误信息。
else代码块

可以在try-except代码块后面添加try代码块,当try代码块中的程序运行没有异常时,程序将运行else代码块中的内容,例如:

a = int(input())    
b = int(input())  
try:        
    answer = a/b  
except:     
      print("We can't divide by zero!")  
else:      
     print(answer)  
逆波兰表达式(Reverse Polish notation,RPN)

逆波兰表达式又叫做后缀表达式,是一种表示表达式的方法,按此方法,可以将每一运算符都置于其运算对象之后,故称为后缀表示。

例如,中缀表达式(a+b)*c-(a+b)/e对应的的后缀表达式为ab+c*ab+e/-

定义

一个表达式E的后缀形式可以如下定义:

  • 如果E是一个变量或常量,则E的后缀式是E本身;

  • 如果EE1 op E2形式的表达式,这里op是二元操作符,则E的后缀式为E1' E2' op,这里E1'E2'分别为E1E2的后缀式;

  • 如果EE1形式的表达式,则E1的后缀式就是E的后缀式。
    如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+

    (a+b)*c-(a+b)/e转化成后缀表达式的过程:
    (a+b)*c-(a+b)/e
    ((a+b)*c)((a+b)/e)-
    ((a+b)c*)((a+b)e/)-
    (ab+c*)(ab+e/)-
    ab+c*ab+e/-

    栈和表示式求值
算法思想:
  • 顺序扫描表达式的每一项,如果该项是操作数,则将其直接压入栈中;
  • 如果该项是运算符op,则连续从栈弹出 2 个操作数XY,并将XY关于op的运算结果入栈;
  • 全部处理后,栈顶元素就是最终表达式的值。