20241216 实验二《Python程序设计》实验报告

20241216 2024-2025-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2412
姓名: 曾楷
学号:20241216
实验教师:王志强
实验日期:2024年3月26日
必修/选修: 公选课

(一) 实验内容

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

(二) 实验过程及结果

上课跟老师同步敲了个初始代码

import math
def Csum(num1, num2):return num1 + num2
def Csub(num1, num2):return num1 - num2
def Cmulti(num1, num2):return num1 * num2
def CDiv(num1, num2):if num2 == 0:print("除数不能为0")return 0return num1 / num2
def logab(a,b):return math.log(a,b)flag = True
while flag:if input("请问:需要复数(1)还是整数(2)运算?\n")=="1":num1 = complex(input("请输入一个数:"))num2 = complex(input("请输入另一个数:"))else:num1 = int(input("请输入一个数:"))num2 = int(input("请输入另一个数:"))choice = input("请输入运算符(+-*/ log):")if choice == "+":print("num1 ",choice, " num2 = ", Csum(num1, num2))elif choice =="-":print("num1 ",choice, " num2 = ", Csub(num1, num2))elif choice == "*":print("num1 ",choice, " num2 = ", Cmulti(num1, num2))elif choice == "/":(print("num1 ",choice, " num2 = ", CDiv(num1, num2)))elif choice == "log":print("log以",num2,"为底",num1, "的对数 = ", logab(num1, num2))conti = input("是否继续?Y/N\n")if conti == "Y" or conti == "y":flag = Trueelse:flag = False

运行结果如下

觉得太简单了,就参考计算器,做了可以一直输入算式直到输入=

import math
def Csum(num1, num2):return num1 + num2
def Csub(num1, num2):return num1 - num2
def Cmulti(num1, num2):return num1 * num2
def Cdiv(num1, num2):if num2 == 0:print("除数不能为0")return 0return num1 / num2
def logab(a,b):if b <= 0 or a <= 0:print("输入数不合法!")return 0return math.log(a,b)
flag = True
index = 1
while flag:cul_num = []cul_choice = []if input("请问:需要复数(1)还是整数(2)运算?\n")=="1":while True:num1 = complex(input())choice1 = input()cul_choice.append(choice1)cul_num.append(num1)if choice1 == "=":breakelse:while True:num1 = int(input())choice1 = input()cul_num.append(num1)cul_choice.append(choice1)if choice1 == "=":breakaccmlt = cul_num[0]while True:choice = cul_choice[index-1]if choice == "=":print(accmlt)breaknum = cul_num[index]if choice == "+":accmlt = Csum(accmlt, num)elif choice =="-":accmlt = Csub(accmlt, num)elif choice == "*":accmlt = Cmulti(accmlt, num)elif choice == "/":accmlt = Cdiv(accmlt, num)elif choice == "log":accmlt = logab(accmlt, num)index = index + 1conti = input("是否继续?Y/N\n")if conti == "Y" or conti == "y":flag = Trueelse:flag = False

调试一直出问题,第二遍运算一直出错,发现index = 1应该放在while循环内部T-T

下面就是正确的代码了

import math
def Csum(num1, num2):return num1 + num2
def Csub(num1, num2):return num1 - num2
def Cmulti(num1, num2):return num1 * num2
def Cdiv(num1, num2):if num2 == 0:print("除数不能为0")return 0return num1 / num2
def logab(a,b):if b <= 0 or a <= 0:print("输入数不合法!")return 0return math.log(a,b)
flag = True
while flag:index = 1cul_num = []cul_choice = []if input("请问:需要复数(1)还是整数(2)运算?\n")=="1":while True:num1 = complex(input())choice1 = input()cul_choice.append(choice1)cul_num.append(num1)if choice1 == "=":breakelse:while True:num1 = int(input())choice1 = input()cul_num.append(num1)cul_choice.append(choice1)if choice1 == "=":breakaccmlt = cul_num[0]while True:choice = cul_choice[index-1]if choice == "=":print(accmlt)breaknum = cul_num[index]if choice == "+":accmlt = Csum(accmlt, num)elif choice =="-":accmlt = Csub(accmlt, num)elif choice == "*":accmlt = Cmulti(accmlt, num)elif choice == "/":accmlt = Cdiv(accmlt, num)elif choice == "log":accmlt = logab(accmlt, num)index = index + 1conti = input("是否继续?Y/N\n")if conti == "Y" or conti == "y":flag = Trueelse:flag = False

运行结果如下

但是如上图所示,只能按照顺序依次运算,不能识别乘除的优先级,于是有了计算器第三版

import math
def Csum(num1, num2):return num1 + num2
def Csub(num1, num2):return num1 - num2
def Cmulti(num1, num2):return num1 * num2
def Cdiv(num1, num2):if num2 == 0:print("除数不能为0")return 0return num1 / num2
def logab(a, b):if b <= 0 or a <= 0:print("输入数不合法!")return 0return math.log(a, b)
def evaluate_expression(numbers, operators):i = 0while i < len(operators):op = operators[i]if op in ('*', '/', 'log'):num1 = numbers[i]num2 = numbers[i + 1]if op == '*':result = Cmulti(num1, num2)elif op == '/':result = Cdiv(num1, num2)elif op == 'log':result = logab(num1, num2)numbers[i] = resultdel numbers[i + 1]del operators[i]else:i += 1result = numbers[0]for i in range(len(operators)):op = operators[i]num = numbers[i + 1]if op == '+':result = Csum(result, num)elif op == '-':result = Csub(result, num)return result
index = 1
flag = True
while flag:cul_num = []cul_choice = []if input("请问:需要复数(1)还是整数(2)运算?\n") == "1":while True:num1 = complex(input())choice1 = input()cul_choice.append(choice1)cul_num.append(num1)if choice1 == "=":breakelse:while True:try:num1 = float(input())  choice1 = input()cul_choice.append(choice1)cul_num.append(num1)if choice1 == "=":breakexcept ValueError:print("请输入有效数字!")continuetry:result = evaluate_expression(cul_num.copy(), cul_choice[:-1].copy())print(result)except Exception as e:print(f"计算错误: {e}")conti = input("是否继续?Y/N\n")if conti.lower() != 'y':flag = False

运行结果如下

上传到git
https://gitee.com/masterzk01/py-homework/blob/master/实验2.py

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

  • 问题1:不知道代码怎么通过markdown形式上传(上次用仓库)
  • 问题1解决方案:搜索发现在代码前后增加三个反单引号```,同时注明语言
  • 问题2:使用中文符号导致报错
  • 问题2解决方案:注意中英文切换
  • 问题3:if判断太冗杂了,写的脑子要炸了
  • 问题3解决方案:学习了try这种python的报错判断,包括一些异常类型
异常类型 更新 版本
ValueError 值不符合预期 int("abc")
ZeroDivisionError 除数为零 1 / 0
TypeError 类型操作无效 "1" + 2
IndexError 索引越界 lst = []; lst[0]
FileNotFoundError 文件不存在 open("nonexistent.txt")
KeyError 字典键不存在 d = {}; d["missing"]

(四) 其他(感悟、思考等)

为了让计算器同时支持常规数字和复数,调试的时候经常要切换思维模式,经常会忘记复数是(a+bj)而不是(a+bi),调整优先级运算也让我更好了解判断语句和循环语句

(五) 参考资料

  • 《makedown使用语法》

  • 《零基础学python》

  • ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/908352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Windows] TechSweeper 应用程序卸载神器V1.2.1

一.我们改进了程序元素显示,现在超出列宽,可以进行滚动显示二.我们为程序添加了右键菜单,现在功能更加全面三.现在程序出现崩溃时,可以进行错误提示与收集四.现在程序可以进行主题切换了五.添加了作者相关信息六.现在可以打开程序相关注册表了(直接显示 清晰明了)七.现在可…

鸢尾花书 - Book_3《数学要素》 - Chapter1 万物皆数

上面图片摘自原书 一、基础概念普及 1. 向量 若干数字排成一行或一列,并且用中括号括起来,得到的数组叫做向量。 2. 行向量 排成一行 3. 列向量 排成一列 4. 转置 行向量转置得到列向量,反之。 5. 矩阵 有行,有列,像表格。 6. 元素 x[i][j] 代表矩阵 X 中第 i 行第 j 列元…

VMware workstation 17 pro 设置开机自启虚拟机(Windows 11)

首先在软件界面设置需要启动的虚拟机 文件➡配置自动启动的虚拟机在打开的对话框中勾选需要自动启动的虚拟机和设置启动顺序点击确定即可。如果点击确定报错的话,如下图看起来问题可能出在两个方面:要么是vmAutoStart.xml文件不存在,要么是当前用户没有足够的权限去修改这个…

RabbitMQ进阶--集群,分布式事务

一.RabbitMQ集群搭建 RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方…

企业为何要使用odoo18

在当今快速变化的商业环境中,企业需要高效、灵活且经济实惠的管理工具来保持竞争力。Odoo 18 作为一款开源的企业资源计划(ERP)系统,凭借其全面的功能和独特的优势,成为众多企业的首选。为什么选择 Odoo 18? 1. 全面的功能覆盖 Odoo 18 集成了销售、采购、库存、制造、财…

deepclaude 的使用 直捣黄龙

先说结论,最简单的就是购买deepseek 和 claude 的api之后, 直接使用vscode中的cline插件,其中 cline的plan(计划模式)配置deepseek的api,act(执行模型)配置claude的api 直接上连接: deepseek开放平台 https://platform.deepseek.com/ claude 开放平台 https://con…

CentOS 7安装Docker

1.系统需求CentOS 7或更高版本。 centos-extras仓库必须处于启用状态,该仓库默认启用,但如果禁用了该仓库,请重新启用。 建议使用overlay2存储驱动。 2.使用Yum安装 2.1卸载老版本的Docker 在CentOS中,老版本Docker的软件包名是docker或docker-engine,而Docker CE的软件包…

GMap.NET + WPF:构建高性能 ADS-B 航空器追踪平台

ADS-B 简介ADS - B(Automatic Dependent Surveillance - Broadcast,广播式自动相关监视)是一种先进的航空监视技术。它依靠飞机上的机载设备,自动收集诸如飞机的位置、高度、速度、航向等关键数据,并周期性地以广播的形式向外发送这些信息。地面站和其他装有 ADS-B 接收设…

20241319 实验二《Python程序设计》实验报告

学号 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2413 姓名: 吴辰曦 学号:20241319 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 考核基…

GMap.NET + C#:构建高性能 ADS-B 航空器追踪平台

ADS - B 简介ADS - B(Automatic Dependent Surveillance - Broadcast,广播式自动相关监视)是一种先进的航空监视技术。它依靠飞机上的机载设备,自动收集诸如飞机的位置、高度、速度、航向等关键数据,并周期性地以广播的形式向外发送这些信息。地面站和其他装有 ADS - B 接…

20242112 2024-2025-2 《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2421 姓名: 张童哲 学号:20242112 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容 1.1设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 1.2考核基本语法、判定语句、循环语句、逻辑运算等知…

simple_php你 攻防世界

审计代码,看到几个关键信息。可以看到:构建payload 有a,b,两个值。 看哈, $a==0 and $a 所有字母转成数字的时候换成0 即可满足所有要求。要求不是数字。是数字就跳出。还要b>1234 构建payload:/?a=asd$b=1231232aaa看清楚哦。&是连接符。$这是美元符号ohhh