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

news/2025/4/3 4:54:29/文章来源:https://www.cnblogs.com/suxuan2017/p/18805240

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

课程:《Python程序设计》
班级:2411
姓名:苏萱
学号:20241101
实验教师:王志强
实验日期:2025.3.26
必修/选修: 公选课

(一)实验内容

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

(二)实验过程及结果

https://gitee.com/suxuan111/pythonhomework/blob/master/计算器设计.py
https://gitee.com/suxuan111/pythonhomework/blob/master/计算器设计2.0.py
上课老师带着敲得简单计算器设计代码,加了一个使用说明

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(num1,num2):return math.log(num1,num2)print("""
-----欢迎使用20241101苏萱的计算器-----
功能描述:
-支持复数、实数运算
-支持加减乘除四则运算、乘方、取对数
-支持连续计算
使用方法:
1、输入你的运算类型
2、输入运算数字
3、得到结果并选择是否继续""")
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")if conti == "Y" or conti == "y":flag = Trueelse:flag = False

运行结果

自己的试验改进:
1.增加了计算机的一些功能,比如:三角函数、阶乘、乘方等
2.增加了一些函数计算的判断条件,比如:取对数要求真数大于0,底数大于0且不等于1
3.精确了每个运算的输入提示信息,比如计算阶乘和三角函数只需要输入一个数据、比如取对数时输入一个数输入另一个数用户难以清楚哪个是底数哪个是真数
4.我认为整数是一种特殊的复数,且上一个代码没有考虑浮点数,所以我直接将输入的数据全部转化成复数类型,输出时再对于虚部为0j的数只输出实部

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("ERROR!除数不能为0!")returnreturn num1 / num2
def logab(num2,num1):if num1 <= 0 or num1 == 1:print("ERROR!底数要求大于0且不等于1!")returnelif num2 <=0:print("ERROR!真数要求大于0")returnelse:return math.log(num2,num1)
def exp(num1,num2):return num1**num2
def fac(num):if num <0:print("ERROR!负数没有阶乘")elif num == 0:return 1else:return math.factorial(num)
def mod(num1,num2):return num1%num2
def sin(num):return math.sin(num)
def cos(num):return math.cos(num)
def tan(num):return math.tan(num)print("""
-----欢迎使用20241101苏萱的计算器-----
功能描述:
-支持复数、实数运算
-支持基本操作:+、-、*、/
-支持高级操作:log(取对数)、^(指数)、!(阶乘)、%(取模)、三角函数
-支持连续计算
使用方法:
1、输入你的运算类型
2、输入运算数字
3、得到结果并选择是否继续""")
flag = True
while flag:choice = input("请输入您需要的运算类型")if choice == "+":num1 = complex(input("请输入一个数:"))num2 = complex(input("请输入另一个数:"))result = Csum(num1,num2)if result.imag == 0:if result.real.is_integer():print(int(result.real))else:print(result.real)else:print(result)elif choice == "-":num1 = complex(input("请输入减数:"))num2 = complex(input("请输入被减数:"))result = Csub(num1,num2)if result.imag == 0:if result.real.is_integer():print(int(result.real))else:print(result.real)else:print(result)elif choice == "*":num1 = complex(input("请输入一个数:"))num2 = complex(input("请输入另一个数:"))result = Cmulti(num1, num2)if result.imag == 0:if result.real.is_integer():print(int(result.real))else:print(result.real)else:print(result)elif choice == "/":num1 = complex(input("请输入除数:"))num2 = complex(input("请输入被除数:"))result =Cdiv(num1, num2)if result.imag == 0:if result.real.is_integer():print(int(result.real))else:print(result.real)else:print(result)elif choice == "log":num1 = int(input("请输入底数:"))num2 = int(input("请输入真数:"))result = logab(num2, num1)if result.is_integer():print(int(result))else:print(result)elif choice == "^":num1 = int(input("请输入底数:"))num2 = int(input("请输入指数/方次:"))print(exp(num1, num2))elif choice == "!":num = int(input("请输入阶乘数:"))print(fac(num))elif choice == "%":num1 = int(input("请输入被模数:"))num2 = int(input("请输入模数:"))print(mod(num1,num2))elif choice == "sin":num = float(input("请输入角度:"))num = math.radians(num)result = round(sin(num),3)print(result)elif choice == "cos":num = float(input("请输入角度:"))num = math.radians(num)result = round(cos(num),3)print(result)elif choice == "tan":num = float(input("请输入角度:"))num = math.radians(num)result = round(tan(num),3)print(result)conti = input("是否继续?Y/N")if conti == "Y" or conti == "y":flag = Trueelse:flag = False

运行结果

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

  • 问题1:如果全按复数的数据类型进行计算 例如3+4就会输出7+0j ,但显然我们日常使用计算机输出整数结果的时候不会带有0j
  • 问题1解决方案:输入数据全部转化成复数类型,格式化输出:虚部为0j则直接输出实部
if result.imag == 0:print(result.real)
else:print(result)

但是运行发现如果结果是5.0+0j,输出结果是5.0(以浮点型输出的),但显然我们日常使用计算机不会出现2+3=5.0,所以我又加了一个判断:如果实部为整数,转化成整型int再输出;如果实部非整数,直接输出实部

if result.imag == 0:if result.real.is_integer():print(int(result.real))else:print(result.real)
else:print(result)
  • 问题2:math.sin()里面是弧度制,我们日常输入的都是角度,所以我们要把输入数字转化为弧度制
  • 问题2解决方案:
num = math.radians(num)


我们希望计算san30输出的结果是0.5,调用round()四舍五入保留3位小数即可

result = round(cos(num),3)


又发现虽然我们规定的保留三位小数,但是对于小数结尾的00并没有输出,很好!

其他(感悟、思考等)

python有非常强大的数学库和函数,可以轻易地满足我们的需求,要多思考多学习来强健我们的代码

参考资料

https://book.douban.com/subject/30390008/

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

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

相关文章

8种核心架构图作用解析

一、架构图是什么?架构图就像人体的骨架决定身体结构一样,架构图是组织/系统的"骨架说明书"。它把复杂事物最关键的顶层结构画成视觉地图,帮助我们5分钟看懂一个体系的构造。 常见的有8种类型,都是企业管理的"导航地图"。 二、8大核心架构图详解业务架…

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

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

《C Primer Plus 中文版 (第6版)》2020版最新修订版PDF下载

《C Primer Plus(第6版)中文版》在之前版本的基础之上进行了全新升级,它涵盖了C语言最新的进展以及C11标准的详细内容。本书还提供了大量深度与广度齐备的教学技术和工具,来提高你的学习。内容简介豆瓣评分9.1 重量级C大百科全书 中文版累计销量近百万册! C图书领域的独孤…

蓝桥杯2

今天写了写选择结构的题

ubuntu配置cuda和cudnn

nvidia-smi 查看当前驱动 https://developer.nvidia.com/cuda-toolkit-archive 选择匹配的驱动下载.run文件 sudo sh cuda****如果已经安装过显卡驱动,就不要再重复安装驱动了,按enter取消driverDriver: Not Selected Toolkit: Installed in /usr/local/cuda-12.4/ Please…

卢曼卡片盒笔记法介绍 Introduction to the Zettelkasten Method

你可能在工作中遇到了迫切需要解决的问题,可能被硕士论文压得喘不过来气,你想要提升你的博客水平,想写一本书,或者想在科研上更进一步。但是有一点需要明确,卡片盒笔记法不仅是一个帮助你完成工作或项目的工具,更是管理你生活中所遇到的知识的方法。原文链接:https://ze…

javawebDay5-Maven框架

单元测试右侧参数代表测试当前类的各项比例 Class:调用测试类中类 Method:调用方法比例 Line:调用代码量比例问题:目前猜测是用户名为中文导致

量化的前期准备

我看了不少国内量化的软件, 很多都在说QMT 迅投公司的产品, 专卖给券商, 然后券商给优质用户开 号就可以了。 各个券商的要求各不一样。 我这个因为我很多板块要求50w 存20工作日, 放了进去,居然符合券商要求了,答应给我开通了。 其实现在 很多开源的 比如easy trader 的…

[Tools] 使用 HammerDB 对 SQL Server 执行负载测试

HammerDBhttps://www.hammerdb.com/download.html HammerDB 是全球数据库行业最值得信赖的免费开源数据库基准测试应用程序,支持 Microsoft SQL Server、IBM Db2、Oracle、PostgreSQL、MariaDB 和 MySQL。HammerDB 在 Windows 和 Linux 上构建和测试,具有无与伦比的性能和可扩…

0401-git如何忽略已被版本控制的文件

前言 原因 我有很多的不关心的文件,这些都被版本控制了,我会感觉很扰乱自己的思路参考 https://www.cnblogs.com/yulinlewis/p/10236563.html 解决方法 1. 先删 git rm --cache *.pyc2. 加入.gitignore里 .gitignore文件内容 Code/.vs/ *.pyc !.gitignore效果这样就清爽多了,…

WindowsPE文件格式入门04.导入表

https://bpsend.net/thread-307-1-1.html PE 内部保存了导入的dll 和 api信息,这些信息保存到一个表里面.称为导入表, 导入表就是 记住一个可执行文件导入了那些dll,以及导入了这些dll中的哪些函数 一个可执行文件会调用其他DLL里的函数或数据,当PE文件被加载时,Windows加载器…