• 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为最后一个数字字符的位置
    
    
    

  • 相关阅读:
    CentOS7安装Dnsmasq并更新最新版
    VMware vCenter Server Appliance(VCSA )6.7 部署,许可证破解
    vsphere6.7虚拟机与ESXI时间同步
    oracle使用存储过程返回数据集
    如何让CheckBoxList横着显示
    在oracle中创建自动增长字段
    oracle 11g安装客户端后使用ps/sql连接提示TNS适配器错误的解决办法
    myeclipse 网站项目部署失败
    Opera Dragonfly本地化
    ExtJs的fireEvent事件
  • 原文地址:https://www.cnblogs.com/gsc20175307/p/12693881.html
Copyright © 2020-2023  润新知