zoukankan      html  css  js  c++  java
  • 20175307高士淳2019-2020-2 《Python程序设计》实验二报告

    20175307高士淳2019-2020-2 《Python程序设计》实验二报告

    课程:《Python程序设计》
    班级:1753
    姓名:高士淳
    学号:20175307
    实验教师:王志强
    实验日期:2020年4月11日
    必修/选修: 公选课

    一.实验内容

    1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
    2.考核基本语法、判定语句、循环语句、逻辑运算等知识点

    二. 实验过程及结果

    在我刚看见这道题的时候,我最先想到的是eval()函数,该函数可以执行一个字符串表达式,并返回表达式的值。但是当我重新审视这次的实验时,我觉得这可能不是实验的目的。然后我想到的是数据结构和java课上学的出入栈操作,或者是中缀表达式转为后缀表达式。

    后缀表达式求值比较简单,基本过程为:遇到数字则进栈,遇到运算符则出栈俩数字然后计算结果,再把结果入栈,过程比较简单。一般我们输入的计算公式都是中缀表达式,不能直接用后缀表达式进行计算,需要先将中缀表达式转为后缀表达式,但是中缀转后缀比较麻烦,所以利用两个栈直接求值,一个栈保存数字,一个栈保存操作符。

    定义两个栈,stack1存储数字,stack2存储运算符,将字符串str元素一个个扫描,遇到数字型则进栈stack1,遇到运算符型,则要看看栈stack2栈顶元素运算符优先级是否比自己大或等于,如果真比自己大,那么那个运算符出栈,假设出栈是运算符a,那么此时从stack1中出栈两个数字b、c参与运算,把运算结果进栈stack1,此时此字符还不能进栈,如果栈顶优先级还比自己大或等于,那么那个栈顶运算符还要拿出来运算,直到有小于自己的自己才进栈;遇到‘(’直接进stack2,遇到’)’,则就要把这一对括号之间运算符都一个个拿出来运算,当str[i]读到’’那么扫描结束,结束后还要注意stack2里应该还有一个运算符,于是还要多加一步运算,最终stack1中剩一个数,那就是最后结果

    三. 实验过程中遇到的问题和解决过程

    1.字符串读取的时候,没有考虑两位数。
    解决方法,在读取到数字的时候,用while语句对后面的字符进行判断,如果为数字则继续判断,直到出现操作符,并将字符串数字转为数字。

    while i + 1 < len(s) and s[i + 1].isdigit():    
        i += 1
    data.append(int(s[start: i + 1]))  # i为最后一个数字字符的位置
    
    
    

  • 相关阅读:
    Photoshop 基础七 位图 矢量图 栅格化
    Photoshop 基础六 图层
    Warfare And Logistics UVALive
    Walk Through the Forest UVA
    Airport Express UVA
    Guess UVALive
    Play on Words UVA
    The Necklace UVA
    Food Delivery ZOJ
    Brackets Sequence POJ
  • 原文地址:https://www.cnblogs.com/gsc20175307/p/12693881.html
Copyright © 2011-2022 走看看