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,*],符合要求