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

news/2025/3/29 22:06:12/文章来源:https://www.cnblogs.com/chow2312/p/18794889

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

课程:《Python程序设计》
班级: 2423
姓名: 周梓濠
学号:20242312
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课

1.实验内容

1.设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。

2.考核基本语法、判定语句、循环语句、逻辑运算等知识点

2. 实验过程

(1)编写计算器程序

1.题目分析:
①:计算器计算数的范围应分为两种:实数和复数;

②:由于实数和复数计算规则有部分不同,我便分开讨论:
计算复数时,我设计了4种运算符,即基本的加减乘除;
计算实数时,我总共设计了9种运算符,包括加减乘除、取模、指对运算、sin及cos计算;

③:从用户角度出发,比如指数运算是谁做底数,谁做指数;三角函数是取谁做值,要输入弧度制还是角度制;python中复数的输入形式是n+j,而非n+i……对于这些需要特别注意的点,我还做了前置说明;

④:由于本节实验的侧重点是在函数,我便将计算的部分封装为多个函数,尽量使“主函数”看起来简洁。

2.具体代码:

# -*- coding: utf-8 -*-print("""# File : 计算器.py# Author : 电科院吴彦祖# Create Time : 2025.03.26 19:28:45# Python Version : 3.8.10————MAN!What can i say?""")print("""这是一个由超级大帅哥做的计算器,有几点前提说明:1.**运算是以num1为底数,num2为指数进行运算2.log运算是num1的以num2为底的对数运算3.三角函数默认以num1为!角度值4.复数是类似“1+j”的形式,不是“1+i”!以上规则请牢记在心!""")import mathdef Csum(num1,num2):return num1 + num2def Csub(num1,num2):return num1 - num2def Cmulti(num1,num2):return num1 * num2def Cdiv(num1,num2):if num2==0 :print("除数不能为0")return 0else:return num1/num2def Cmol(num1,num2):return num1 % num2def Cmi(num1,num2):return num1 ** num2 #num1 的num2次方def Clog(num1,num2):return math.log(num1,num2) #math.log(x, base)def cal1(num1,num2):choice =input("请输入运算符(+、-、*、/、%、**、log、sin、cos):")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 == "%":print("num1",choice,"num2 = ",Cmol(num1,num2))elif choice == "**":print("num1",choice,"num2 = ",Cmi(num1,num2))elif choice =="log":print("num1",choice,"num2 = ",Clog(num1,num2))elif choice =="sin":num2=math.radians(num1)print("sin",num1,"°=",math.sin(num2))elif choice =="cos":num2=math.radians(num1)print("cos",num1,"°=",math.cos(num2))else:print("您的操作有有误")def cal2(num1,num2):choice =input("请输入运算符(+、-、*、/):")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))else:print("您的操作有有误")flag="y"while flag=="y":pd=int(input("实数运算请扣1,复数运算请扣2\n"))if(pd==1):num1=int(input("请输入一个数:"))num2=int(input("请输入另一个数:"))cal1(num1,num2)elif(pd==2):num1=complex(input("请输入一个数:"))num2=complex(input("请输入另一个数:"))cal2(num1,num2)flag=input("是否继续:y/n?\n")

3. 实验结果

1.终端运行结果(尽量涵盖所有分支):


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

问题一: 对于sin、cos、指对运算符的使用语法不清楚

解决方案:询问sider,让它用简单的语言及例子向我介绍运算符的用法
以下是我的个人总结:
首先都得调用数学库,即import math
指数运算:num1 ** num2,其中num1为底数,num2为指数
对数运算:math.log(x, base),其中base为底数
sin函数:首先得先将角度制转换为弧度制—— Radian=math.radians(Angle)
再使用math.sin(Radian)语句
cos函数同理

问题二: 当我选择实数sin运算时,我输入30,终端的输出结果不是sin30°=0.5,而是0.499999999991
解决方案:询问sider,他告诉我,根本原因是浮点数的精度限制:①计算机在存储小数时,部分小数位会被截断 ②math.sin()采用的是泰勒展开的数学方法,像这样的迭代计算会放大初始的浮点误差。
他给我的建议是:控制显示精度,利用round()函数隐藏误差

5.参考资料

王志强老师学习通word文档
Sider AI

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

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

相关文章

J积分

J积分是断裂力学中表征裂纹尖端能量场的路径无关积分,具有两个核心功能:积分路径为从裂纹下表面上任意一点出发,沿任一路径绕过裂纹尖端,最后终止于裂纹上表面的任意一点。J积分具有守恒性(与路径无关)。 J积分的能量表示 线弹性情况下,J积分与应力强度因子有如下关系:…

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

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

好题选写

不会P2476 很好的绿 dp,场上卡我 2h,场上只考虑了二进制状压,然后组合数填数,最后发现没法去除重复情况。 说一下简单的正解,这题组合数也是能搞的,只是需要多开一维记录当前存在多少相邻的同色位置。考虑到 \(c_i \leq 5\),我们记录每种颜色个数的个数,然后按照个数记…

【紧急!昆明理工材料学硕调剂名额90+】

📣【紧急!昆明理工材料学硕调剂名额90+】📣 🔥 B区国家线可申!昆明理工大学材料科学与工程学院2025考研材料学硕调剂名额预测中,全日制名额充足!3月26日更新 🌟 重点调剂方向 🌟 ✅ 材料加工工程(31人)→ 名额最多! ✅ 材料物理与化学(27人)→ 实验党冲! ✅…

Cursor 老改坏代码?六哥这几招超管用!

大家好,我是六哥!最近不少小伙伴和我吐槽,在使用Cursor时,AI老是把代码改坏,让人头疼不已。我自己也用了大几十个小时Cursor,今天就来给大家分享一些实用小窍门,教大家如何巧妙规避这类问题。 一、项目开始,搭建“行动指南” 在项目根目录下创建一个名为“.cursorrules…

2025年3月24日 业务系统基础框架-Winform版-权限

权限以树行结构呈现 可对权限进行添加,编辑,删除操作,也可以查看拥有此权限的账号 “启用验证”为true时这个权限是开始验证的,否则就不开启权限验证, “启用验证”用于中途某个按钮不验证权限了,就把这个权限不开启验证就可以了,不然就得去把所有人都分配上这个权限编辑…

CVPR 2024 - Retrieval-Augmented Open-Vocabulary Object Detection

Author: lartpang Link: https://github.com/lartpang/blog/issues/13CVPR 2024 - Retrieval-Augmented Open-Vocabulary Object Detection论文:https://arxiv.org/abs/2404.05687 代码:https://github.com/mlvlab/RALF本文提出了一种新的开放词汇目标检测方法 Retrieval-Aug…

3.26 学习记录

实现了学习记录APP每日总结的功能,可以实现每日总结的增删改查,点击题目可以查看详情跳转博客园