• 20181312 2019-2020-2 《Python程序设计》实验二报告


    20181312 2019-2020-2 《Python程序设计》实验二报告

    课程:《Python程序设计》
    班级:1813
    姓名:谢绎
    学号:20181312
    实验教师:王志强
    实验日期:2020年4月11日
    必修/选修:公选课

    1.实验内容

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

    2. 实验过程及结果

    • 两个运算数计算

      传入两个运算数和一个运算符

      对除法运算和模运算中可能出现的除零错误进行异常处理,并在出现异常时提醒

      函数直接返回计算结果

      operator = ('+', '-', '*', '/', '%', '^')
      
      def calculate_two_numbers(num1, num2, op):
          if op == operator[0]:
              return num1 + num2
          if op == operator[1]:
              return num1 - num2
          if op == operator[2]:
              return num1 * num2
          if op == operator[3]:
              try:
                  return num1 / num2
              except ZeroDivisionError:
                  print("Error:division by zero")
                  return False
          if op == operator[4]:
              try:
                  return num1 % num2
              except ZeroDivisionError:
                  print("Error:modulo by zero")
                  return False
          if op == operator[5]:
              return num1 ** num2
      
    • 运算式格式化

      输入的运算式是字符串,需要对运算式格式化处理,使得算式中运算数和运算符进入列表,并返回主函数

      这里引入了re模块,使用正则表达式分割运算式

      def format_formula(formula):
          list_formula = [i for i in re.findall(r'w*', formula)] #取出运算数
          list_formula += re.split(r'w*',formula) #取出运算符
          list_formula_1 = []
          for item in list_formula: #去除空白符
              if item != '':
                  list_formula_1.append(item)
          return list_formula_1
      
    • 主函数

      使用while无限循环,直至输入exit退出

      print("计算器支持两个正数的四则+-*/运算、模%运算、乘方^运算,请输入表达式开始或exit退出:")
      while True:
          formula = input()
          if formula != 'exit':
              list1 = format_formula(formula)
              print(calculate_two_numbers(int(list1[0]), int(list1[1]), list1[2]))
          else:
              break
      
    • 测试

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

    • 问题1:空白符问题

      最初的代码中list_formula只用空白符全分割,出现了多位数被分割成多个一位数的情况

      def format_formula(formula):
          list_formula = [i for i in re.findall(r's*', formula)] #取出运算数和运算符
          list_formula_1 = []
          for item in list_formula: #去除空白符
              if item != '':
                  list_formula_1.append(item)
          return list_formula_1
      

      例如:当输入12*3时,list_formula_1最终的结果是[1,2,*,3],显然不符合要求

    • 问题1解决方案:改为findall寻找运算数和split寻找运算符得到的两个列表叠加

      此时输入12*3时,list_formula_1最终的结果是[12,3,*],符合要求

    4. 参考资料

    Python 正则表达式——菜鸟教程

  • 相关阅读:
    数据访问层之Repository
    IIS执行原理
    异常分析
    Logger
    JSTL
    Kubernetes
    NET Core WordPress
    net平台的rabbitmq
    MySQL can’t specify target table for update in FROM clause
    EqualsBuilder和HashCodeBuilder
  • 原文地址:https://www.cnblogs.com/blingblingXY/p/12753881.html
Copyright © 2020-2023  润新知