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

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

课程:《Python程序设计》
班级: 2411
姓名: 王方俊
学号:20241110
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课

一、实验内容

(一)设计并完成一个计算器,支持整数和复数,可以完成加、减、乘、除、对数和幂等运算,并设计简单的封面。

(二)设计一个出计算题程序,每次出10题,支持加减乘除四则运算,并统计正确率。

二、实验过程及结果

(一)设计一个计算器

1.计算器需要包含加减乘除四则运算,可定义函数进行计算。并设计属于自己的计算器封面,设计控制计算器是否继续。

代码如下

    import math

def Csum(num1, num2):
    return num1 + num2

def Cdel(num1, num2):
    return num1 - num2

def Cmul(num1, num2):
    return num1 * num2

def Chu(num1, num2):
    if num2 == 0:
        print("除数不能为0")
        return None
    return num1 / num2

cover = """
====================================================================================================================================
                                                                 ###########################
                                                                      欢迎使用多功能计算器
                                                                      技术原创,切勿盗用                            
                                                                支持四则运算(整数/小数)
                                                                           请放心食用
                                                                          高效 准确
                                                                      作者:20241110 王方俊
                                                                 ###########################
====================================================================================================================================
"""
print(cover)

flag = True
while flag:
    try:
        num1 = float(input("请输入第一个数:"))
        num2 = float(input("请输入第二个数:"))
        operator = input("请输入运算符(+-*/):")

        if operator == "+":
            print(num1, operator, num2, "=", Csum(num1, num2))
        elif operator == "-":
            print(num1, operator, num2, "=", Cdel(num1, num2))
        elif operator == "*":
            print(num1, operator, num2, "=", Cmul(num1, num2))
        elif operator == "/":
            result = Chu(num1, num2)
            if result is not None:
                print(num1, operator, num2, "=", result)
        else:
            print("无效的运算符")

        if input("是否继续?(Y/N):").upper() == "N":
            flag = False
    except ValueError:
        print("输入无效,请输入数字")
    except Exception as e:
        print(f"发生错误: {e}")

运行结果如下

2.将计算器功能从整数拓展到复数,程序先判断是整数还是复数。注意复数是a+bj而不是a+bi(这点与数学区分开来)。

代码如下

    import math

def Csum(num1, num2):
    return num1 + num2

def Cdel(num1, num2):
    return num1 - num2

def Cmul(num1, num2):
    return num1 * num2

def Chu(num1, num2):
    if num2 == 0:
        print("除数不为0")
        return None
    return num1 / num2



cover = """
===============================================================================================================================================================================================
                                                                     ###########################
                                                                           欢迎使用多功能计算器
                                                                           技术原创,切勿盗用                            
                                                                     支持四则、幂、对数运算(整数/复数)
                                                                              请放心食用
                                                                              高效 准确
                                                                          作者:20241110 王方俊
                                                                      ###########################
===============================================================================================================================================================================================
"""
print(cover)

flag = True
while flag:
    choice_type = input("请问:需要复数(1)还是整数(2)运算:")
    if choice_type == "1":
        try:
            num1 = complex(input("请输入一个数(支持如 3+4j 格式):"))
            num2 = complex(input("请输入另一个数(支持如 3+4j 格式):"))
        except ValueError:
            print("输入的复数格式有误,请重新输入,例如 3+4j。")
            continue
    elif choice_type == "2":
        try:
            num1 = int(input("请输入一个数:"))
            num2 = int(input("请输入另一个数:"))
        except ValueError:
            print("输入的不是有效的整数,请重新输入。")
            continue
    else:
        print("输入无效,请输入 1 或 2。")
        continue

    operator = input("请输入运算符(+-*/):")

    if operator == "+":
        print(num1, operator, num2, "=", Csum(num1, num2))
    elif operator == "-":
        print(num1, operator, num2, "=", Cdel(num1, num2))
    elif operator == "*":
        print(num1, operator, num2, "=", Cmul(num1, num2))
    elif operator == "/":
        result = Chu(num1, num2)
        if result is not None:
            print(num1, operator, num2, "=", result)

    if input("是否继续?Y/N:").upper() == "N":
        flag = False

运行结果如下

3.进一步拓展计算器的功能,如增加对数函数和幂函数。注意对数函数需要满足真数大于0且底数大于0并且不为1。

代码如下

    import math

def Csum(num1, num2):
    return num1 + num2

def Cdel(num1, num2):
    return num1 - num2

def Cmul(num1, num2):
    return num1 * num2

def Chu(num1, num2):
    if num2 == 0:
        print("除数不为0")
        return None
    return num1 / num2

def Cpow(num1, num2):
    return num1 ** num2

def Clog(num1, num2):
    try:
        if isinstance(num1, complex) or isinstance(num2, complex):
            import cmath
            return cmath.log(num1, num2)
        else:
            return math.log(num1, num2)
    except ValueError:
        print("对数运算输入值不合法,请确保底数大于0且不等于1,真数大于0。")
        return None
    except ZeroDivisionError:
        print("对数运算中底数不能为1。")
        return None


cover = """
===============================================================================================================================================================================================
                                                                     ###########################
                                                                           欢迎使用多功能计算器
                                                                           技术原创,切勿盗用                            
                                                                     支持四则、幂、对数运算(整数/复数)
                                                                              请放心食用
                                                                              高效 准确
                                                                          作者:20241110 王方俊
                                                                      ###########################
===============================================================================================================================================================================================
"""
print(cover)

flag = True
while flag:
    choice_type = input("请问:需要复数(1)还是整数(2)运算:")
    if choice_type == "1":
        try:
            num1 = complex(input("请输入一个数(支持如 3+4j 格式):"))
            num2 = complex(input("请输入另一个数(支持如 3+4j 格式):"))
        except ValueError:
            print("输入的复数格式有误,请重新输入,例如 3+4j。")
            continue
    elif choice_type == "2":
        try:
            num1 = int(input("请输入一个数:"))
            num2 = int(input("请输入另一个数:"))
        except ValueError:
            print("输入的不是有效的整数,请重新输入。")
            continue
    else:
        print("输入无效,请输入 1 或 2。")
        continue

    operator = input("请输入运算符(+-*/^log):")

    if operator == "+":
        print(num1, operator, num2, "=", Csum(num1, num2))
    elif operator == "-":
        print(num1, operator, num2, "=", Cdel(num1, num2))
    elif operator == "*":
        print(num1, operator, num2, "=", Cmul(num1, num2))
    elif operator == "/":
        result = Chu(num1, num2)
        if result is not None:
            print(num1, operator, num2, "=", result)
    elif operator == "^":
        print(num1, operator, num2, "=", Cpow(num1, num2))
    elif operator == "log":
        result = Clog(num1, num2)
        if result is not None:
            print("log以", num2, "为底", num1, "的对数是:", result)

    if input("是否继续?Y/N:").upper() == "N":
        flag = False

运行结果如下

(二)设计一个出计算题程序

编写小学生刷题程序,一次出十道题,最后统计正确率。

    import random


def generate_question():
    operators = ['+', '-', '*', '/']
    op = random.choice(operators)

    if op == '+':
        a = random.randint(1, 100)
        b = random.randint(1, 100)
        answer = a + b
    elif op == '-':
        a = random.randint(1, 100)
        b = random.randint(1, 100)
        a, b = max(a, b), min(a, b)
        answer = a - b
    elif op == '*':
        a = random.randint(1, 20)
        b = random.randint(1, 10)
        answer = a * b
    else:
        b = random.randint(1, 10)
        a = b * random.randint(1, 10)
        answer = a // b

    return str(a) + " " + op + " " + str(b) + " = ", answer


def math_quiz():
    print("=" * 50)
    print("欢迎来到数学小测验!")
    print("你将回答10道四则运算题")
    print("=" * 50)

    correct = 0
    for i in range(1, 11):
        question, answer = generate_question()
        while True:
            try:
                user_answer = int(input("第" + str(i) + "题: " + question))
                if user_answer == answer:
                    print("回答正确!\n")
                    correct += 1
                else:
                    print("回答错误,正确答案是: " + str(answer) + "\n")
                break
            except ValueError:
                print("请输入一个整数!")

    score = correct * 10
    print("\n测验结束!")
    print("你的得分: " + str(score) + "分")
    print("正确率: " + str(correct) + "/10 (" + str(score) + "%)")

    if score == 100:
        print("太棒了!满分!")
    elif score >= 70:
        print("做得不错!")
    else:
        print("再加把劲!")


if __name__ == "__main__":
    while True:
        math_quiz()
        again = input("\n是否再来一次?(y/n): ").lower()
        if again != 'y':
            print("再见!")
            break

运行结果

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

问题1:复数无法表示

问题1解决方案:不能用a+bi,要用a+bj。同时设置提示(如3+4j)让用户理解

问题2:不知道如何让用户端终止程序

问题2解决方案:通过老师讲解用(Y/N)提示,当且仅当用户输入N,程序结束

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

1.Python中很多奇妙的事情,如复数的表示与数学类似但不尽相同。面对复杂的复数运算,程序自己可以解决。

2.灵活定义一些函数可以事半功倍。

参考资料

零基础学《Python》

python—函数详解

posted @ 2025-03-29 17:47  20241110王方俊  阅读(38)  评论(0)    收藏  举报