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 正则表达式——菜鸟教程

原文地址:https://www.cnblogs.com/blingblingXY/p/12753881.html