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

20222108 2022-2023-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2221
姓名: 多乐
学号:20222108
实验教师:王志强
实验日期:2022年3月23日
必修/选修: 公选课

1.实验内容

设计并完成一个完整的应用程序,完成加减乘除模等运算,要求功能尽可能全面。

2. 实验过程及结果

1)设计代码

# time:2023/3/23 19:32
# developer: 20222108 Dollar
import math
key=1
print("计算器使用说明:")
print("本计算器有以下功能:加,减,乘,除,整除(结果的前者表示商,后者表示余数),阶乘,幂,对数,角度制转弧度制,弧度制转角度制,正弦(弧度制),余弦(弧度制),正切(弧度制)")
print("使用时直接输入你需要进行的操作,输入中文即可,括号内的不需要输入")
#定义各类计算所需的函数
def sum(a,b):
    return(a+b)
def sub(a,b):
    return(a-b)
def mul(a,b):
    return(a*b)
def div(a,b):
    if b == 0:
        print("除数不能为0!")
    else:
        return(a/b)
def div_exa(a,b):
    if b == 0:
        print("除数不能为0!")
    else:
        return (a // b, a % b)
def fac(a,b):#b是用不到的,只是为了与传入两个参数的函数统一起来,传参更方便。下面一些函数同理。
    return(math.factorial(int(a)))
def pow(a,b):
    return(math.pow(a,b))
def log(a,b):
    return(math.log(b,a))
def deg_rad(a,b):
    return((a/180)*math.pi)
def rad_deg(a,b):
    return((a/math.pi)*180)
def sin(a,b):
    return(math.sin(a))
def cos(a,b):
    return(math.cos(a))
def tan(a,b):
    return (math.tan(a))
def trial(a,b):
    print("此函数正常")
    return 1
def Default(a,b):
    print("抱歉,本计算器尚未开发此功能!")


caldict={
    "加":sum,
    "减":sub,
    "乘":mul,
    "除":div,
    "整除":div_exa,
    "阶乘":fac,
    "幂":pow,
    "对数":log,
    "角度制转弧度制":deg_rad,
    "弧度制转角度制":rad_deg,
    "正弦":sin,
    "余弦":cos,
    "正切":tan,
    "检测":trial
}#利用字典将运算种类与定义的函数一一对应

def getCal(cal):#通过此函数来调用字典中的函数
    fun = caldict.get(cal, Default)
    return fun(a,b)
while key==1:
    cal = input("您要进行的操作是:")
    a = float(input("您要输入的第一个数是:"))
    b = float(input("您要输入的第二个数是:(如果您的计算只需要一个数,则这边可以随便输入)"))#这一步是为了将输入一个参数和输入两个参数的函数统一起来。
    print(f"结果为:{getCal(cal)}")

    key=int(input("是否还要继续运算,是请输入1,退出请输入0:"))#控制是否退出
    if key!=1 and key!=0:
        print("错误的输入,但仍然为您退出!")
        key=0

此代码的设计有一定的创新性,具体表现在:
由于Python中没有switch-case这类语言,所以在查找资料后,我使用了字典,将运算与函数对应起来了。这样,在编写的时候,不用进行多次if-elif-else的条件判断了。

2)运行结果并验证代码正确性

在这里插入图片描述

3)上传至gitee

在这里插入图片描述

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

  • 问题1:编写函数代码的问题
    一开始,我写的代码中关于定义运算函数的一部分是这样的:
#定义各类计算所需的函数
def sum(a,b):
    input("请输入a:")
    input("请输入b:")
    return(a+b)
def sub(a,b):
    input("请输入被减数a:")
    input("请输入减数b:")
    return(a-b)
def mul(a,b):
    input("请输入a:")
    input("请输入b:")
    return(a*b)
def div(a,b):
    input("请输入被除数a:")
    input("请输入除数b:")
    return(a/b)
def div_exa(a,b):
    input("请输入被除数a:")
    input("请输入除数b:")
    return (a//b,a%b)
def fac(a):
    input("请输入a:")
    return(math.factorial(a))
def pow(a,b):
    input("请输入底数a:")
    input("请输入次数b:")
    return(math.pow(a,b))
def log(a,b):
    input("请输入底数a:")
    input("请输入真数b:")
    return(math.log(b,a))
def deg_rad(a):
    input("请输入角度制a:")
    return((a/180)*math.pi)
def rad_deg(a):
    input("请输入弧度制a:")
    return((a/math.pi)*180)
def sin(a):
    input("请输入a:")
    return(math.sin(a))
def cos(a):
    input("请输入a:")
    return(math.cos(a))
def tan(a):
    input("请输入a:")
    return (math.tan(a))
def trial():
    print("此函数正常")
    return 1
def Default():
    print("抱歉,本计算器尚未开发此功能!")

这里其实出现了一个问题,即,在调用函数的时候就应当传入实参了,但是我想输入的实参是设计在调用的函数里面的,这样会导致无法调用函数。

  • 问题1解决方案:在调用函数前,想办法先输入实参,将函数修改为直接计算实参。具体见一开始给出的正确代码。
  • 问题2:可以看到下图中,2+9变成了29,3+8变成了38。很容易猜想,这是没有将字符串转化为整型数的缘故。

在这里插入图片描述

  • 问题2解决方案:找到代码段的错误
    a = input("您要输入的第一个数是:")
    b = input("您要输入的第二个数是:(如果您的计算只需要一个数,则这边可以随便输入)")

将其改为

    a = float(input("您要输入的第一个数是:"))
    b = float(input("您要输入的第二个数是:(如果您的计算只需要一个数,则这边可以随便输入)"))

这样就可以正常运行了,如下:
在这里插入图片描述

其他(感悟、思考等)

虽然使用字典节省了代码空间,增加了编程效率,但是增加了用户的输入(有时可能需要输入无关的数字来统一不同函数),可见代码的编写没有最优解,不同的方法有不同的优点。但是将刚刚学到的字典能运用到实验中也是不错的实践吧。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值