20193131 2020-2021-2 《Python程序设计》实验二 报告


课程:《Python程序设计》
班级: 1931
姓名: 崔克政
学号:20193131
实验教师:王志强
实验日期:2021年4月29日
必修/选修: 公选课实验二

## 1.实验内容
-设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善;

 

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

## 2. 实验过程及结果

所设计的计算器共拥有6种功能:

1.求模

2.进制转化

3.阶乘

4.累加

5.加减乘除

6.图形周长面积计算

 

1.求模

 

这一部分主要是输入输出格式的练习,运行结果如下:

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 

2.进制转化

这一部分主要使用到了列表,可以以多种进制方式进行输入,通过Python内置函数即可完成,运行结果如下:

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 

3.阶乘

利用简单的循环即可完成,运行结果如下:

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

4.累加

可以通过for循环简单完成,运行结果如下:

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 

 

5.加减乘除

这一情况下通过定义的子函数快速完成,减少主程序的冗杂,子函数如下:

 

"""
(+,-,*,/,//,%,**)计算
"""
def operation(a,b,operator):

    if operator=="+":
        return a+b
    elif operator=="-":
        return a-b
    elif operator=="*":
        return a*b
    elif operator=="/":
        return a/b
    elif operator=="//":
        return a//b
    elif operator=="%":
        return a%b
    elif operator=="**":
        return a**b

  

运行结果如下

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 

6.图形周长面积计算
依旧是使用子函数

子函数如下:

"""
图形周长计算
"""
def perimeter(a,b,c,d,e,graph):
    PI=3.1415926535
    if graph==1:# 长方形
        return 2*(a+b)
    elif graph==2:# 圆形
        return 2*PI*a
    elif graph==3:# 梯形
        return a+b+d+e
    elif graph==4:# 平行四边形
        return a+b+c+d

"""
图形面积计算
"""
def area(a,b,c,d,e,graph):
    PI = 3.1415926535
    if graph == 1:# 长方形
        return a * b
    elif graph == 2:# 圆形
        return 2 * PI * a * a
    elif graph == 3:# 梯形
        return (a+b) * c / 2
    elif graph == 4:# 平行四边形
        return a * e

  

运行结果如下:

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

7.每当用户使用过一次计算器后,给予用户选择是否继续使用计算器

20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 20193131  2020-2021-2 《Python程序设计》实验二 报告

 

 

 

## 3. 实验过程中遇到的问题和解决过程
-问题1:第一个问题也是困扰我很久的问题就是如何让程序可以计算复杂的算式,而不是两个数作加减乘除

-问题1解决方案:通过网上查找资料获得启发,从高级的方法里化简为已经学过的知识

-问题2:进行除法时报错

-问题2解决方案:/计算出来的是浮点型的,要注意在混合运算中要统一数据类型,因此要用//来做除法

-问题3:第一次运行的时候,发现选择一项功能后连续输出了好几遍“还要继续使用计算器么”

-问题3解决方案:经过单步调试,我发现是因为在每次功能循环后我没有break跳出循环,所以导致一直在一个地方循环输出是否继续

其他(感悟、思考等)



## 其他(感悟、思考等)
-多翻笔记,虽然记笔记很耗费时间,但是确实可以在之后提醒你、帮助你回忆知识点,这次很多地方是都查看笔记后解决的,并且在应用知识的时候反而理解了当时听视频课时不懂的地方,这也说明理论和实践要相结合才能发挥出更大的作用。因此,虽然要花更多的时间去完成笔记,但我还是会把各科的笔记记下去。

-列表是个非常好用的工具,不仅仅是因为它可以把一系列元素集中在一起,而且有很多关于列表的应用函数等,比如遍历输出、查找元素、切片等等可以大大增加我们的需求。

-多百度,在网上查找资料,查找资料并不是在网上找答案,而是通过网络接触到大神,接触到不同的编程思路,开阔自己,从中受到启发,提升自己。

##附录

gitee地址:https://gitee.com/mybysq121/python2021/blob/master/计算器.py

代码:

"""
名 称:选择型计算器
姓 名:崔克政
日 期:2021.4.29
"""
print("====计算器====")

"""
(+,-,*,/,//,%,**)计算
"""
def operation(a,b,operator):

    if operator=="+":
        return a+b
    elif operator=="-":
        return a-b
    elif operator=="*":
        return a*b
    elif operator=="/":
        return a/b
    elif operator=="//":
        return a//b
    elif operator=="%":
        return a%b
    elif operator=="**":
        return a**b

"""
图形周长计算
"""
def perimeter(a,b,c,d,e,graph):
    PI=3.1415926535
    if graph==1:# 长方形
        return 2*(a+b)
    elif graph==2:# 圆形
        return 2*PI*a
    elif graph==3:# 梯形
        return a+b+d+e
    elif graph==4:# 平行四边形
        return a+b+c+d

"""
图形面积计算
"""
def area(a,b,c,d,e,graph):
    PI = 3.1415926535
    if graph == 1:# 长方形
        return a * b
    elif graph == 2:# 圆形
        return 2 * PI * a * a
    elif graph == 3:# 梯形
        return (a+b) * c / 2
    elif graph == 4:# 平行四边形
        return a * e

choice2 = 1
while(choice2 == 1):
    print("请选择功能:\n1.求模\n2.进制转化\n3.阶乘\n4.累加\n5.加减乘除(+,-,*,/,//,%,**)\n6.图形周长面积计算")
    print("\n请选择您要计算的类型序号:")
    choice1 = int(input())

    # 求模
    while(choice1 == 1):
        print("请分别输入被除数与除数")
        print("被除数:")
        a = int(input())
        print("除数:")
        b = int(input())
        c = a//b
        d = a%b
        print(a,"除",b,"商",c,"余",d)
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

    #进制转化
    while(choice1 == 2):
        jz = ['','','','']
        print("请选择进制:(2,8,10,16)")
        a = int(input())
        print("请输入数字:")
        b = str(input())
        if a == 2:
            jz10 = int(b,2)
        elif a == 8:
            jz10 = int(b,8)
        elif a == 10:
            jz10 = int(b)
        elif a == 16:
            jz10 = int(b, 16)
        jz[0] = bin(jz10)
        jz[1] = oct(jz10)
        jz.insert(2,jz10)
        jz[3] = hex(jz10)
        title = ["二进制", "八进制", "十进制", "十六进制"]
        template = "{:<6}  \t{:^6}   \t{:^6}   \t{:3}"
        new1 = template.format(title[0], title[1], title[2],title[3])
        new2 = template.format(jz[0], jz[1], jz[2],jz[3])
        print(new1)
        print(new2)
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

    #阶乘
    while(choice1 == 3):
        print("请输入要阶乘的数:")
        a = int(input())
        b = a
        sum = 1
        while a != 0:
            sum = sum*a
            a = a - 1
        print(b,"的阶乘为",sum)
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

    #累加
    while(choice1 == 4):
        print("请输入要累加的起始数(包括):")
        a = int(input())
        print("请输入要累加的终止数(不包括):")
        b = int(input())
        result = 0
        for i in range(a,b):
            result +=i
        print("结果为",result)
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

    #加减乘除
    while (choice1 == 5):
        operator=input("请输入你要做的运算类型(+,-,*,/,//,%,**)")
        a = float(input("请输入a:"))
        b = float(input("请输入b:"))
        print("a"+operator+"b=",operation(a,b,operator))
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

    #周长面积计算
    while (choice1 == 6):
        print("请输入所需计算的图形序号(1.长方形 2.圆形 3.梯形 4.平行四边形)")
        print("\n请选择您要计算的类型序号:")
        graph = int(input())
        a=0.0
        b=0.0
        c=0.0
        d=0.0
        e=0.0
        if graph==1:#长方形
            a = float(input("请输入长:"))
            b = float(input("请输入宽:"))
        elif graph==2:#圆形
            a = float(input("请输入半径:"))
        elif graph==3:#梯形
            a = float(input("请输入上底:"))
            b = float(input("请输入下底:"))
            c = float(input("请输入高:"))
            d = float(input("请输入左腰长:"))
            e = float(input("请输入右腰长:"))
        elif graph==4:#平行四边形
            a = float(input("请输入上边长:"))
            b = float(input("请输入下边长:"))
            c = float(input("请输入左边长:"))
            d = float(input("请输入右边长:"))
            e = float(input("请输入高:"))
        print("周长为:",perimeter(a,b,c,d,e,graph))
        print("面积为:",area(a,b,c,d,e,graph))
        print("还要继续使用计算器么(继续输入1,退出输入2)")
        choice2 = int(input())
        break

 

上一篇:C#中的值类型与引用类型


下一篇:韩顺平Java06(类与对象)