20244302刘家瑞实验二 计算器设计

(一)实验内容

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

考核基本语法、判定语句、循环语句、逻辑运算等知识点
(二)实验要求

创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云。

注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

(三)实验报告

在规定时间前发表博客,标题“学号 实验二《Python程序设计》实验报告”

实验报告模板如下:

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

课程:《Python程序设计》
班级: 2443
姓名: 刘家瑞
学号:20244302
实验教师:王志强
实验日期:2025年4月2日
必修/选修: 公选课
## 1.实验内容
设计并完成一个完整的应用程序,完成加减乘除模等运算
代码如下:
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 None # 返回 None 表示错误
return num1 / num2

def logab(a, b):
if a <= 0 or b <= 0 or b == 1:
raise ValueError("对数运算要求底数大于0且不等于1,真数大于0")
return math.log(a, b)

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

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

def get_number(choice_type):
while True:
try:
if choice_type == "1": # 复数
num = complex(input("请输入一个数(格式如3+4j):"))
else: # 整数
num = int(input("请输入一个数:"))
return num
except ValueError:
print("输入无效,请重新输入!")

def get_operator():
valid_operators = ["+", "-", "", "/", "log", "**", "%"]
while True:
operator = input("请输入运算符(+-
/ log ** %):").strip()
if operator in valid_operators:
return operator
else:
print("输入的运算符无效,请重新输入!")

flag = True
while flag:
choice_type = input("请问:需要复数(1)还是整数(2)运算?\n")
if choice_type not in ["1", "2"]:
print("输入有误,请重新输入!")
continue

num1 = get_number(choice_type)
num2 = get_number(choice_type)

operator = get_operator()

if operator == "+":
    result = Csum(num1, num2)
    print(f"{num1} + {num2} = {result}")
elif operator == "-":
    result = Csub(num1, num2)
    print(f"{num1} - {num2} = {result}")
elif operator == "*":
    result = Cmulti(num1, num2)
    print(f"{num1} * {num2} = {result}")
elif operator == "/":
    result = CDiv(num1, num2)
    if result is not None:
        print(f"{num1} / {num2} = {result}")
elif operator == "log":
    try:
        result = logab(num1, num2)
        print(f"log以 {num2} 为底 {num1} 的对数 = {result}")
    except ValueError as e:
        print(f"对数运算出错:{e}")
elif operator == "**":
    result = power(num1, num2)
    print(f"{num1} ** {num2} = {result}")
elif operator == "%":
    result = modulus(num1, num2)
    if result is not None:
        print(f"{num1} % {num2} = {result}")

conti = input("是否继续?Y/N\n")
if conti.lower() != "y":
    flag = False

gitee:https://gitee.com/eswindous/python/blob/master/2.py

## 2. 实验过程及结果

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

问题一:程序中定义了复数和整数的运算,但部分函数(如 logab 和 modulus)可能不支持复数运算。例如,对数运算和取模运算在复数域中可能没有定义或需要特殊处理。
解决方案:删掉了该计算功能,选择了不支持复数的运算符(如对数或取模),应提示用户并要求重新输入。
问题二:虽然程序中对输入进行了验证,但验证逻辑可能不够完善。例如,get_number 函数中对复数输入的验证可能无法覆盖所有非法格式。
解决方案:在输入提示中明确说明输入格式要求。

感悟
在编写程序时,最初可能只关注功能的实现,但随着代码的复杂度增加,清晰的设计和结构变得至关重要。这次实验让我深刻体会到,良好的代码设计能够极大提高程序的可读性、可维护性和可扩展性。例如,通过将重复的逻辑提取到单独的函数中,不仅减少了代码冗余,还使得程序逻辑更加清晰,便于后续的修改和扩展。

参考资料
《Python程序设计》
kimiAI

posted @ 2025-04-02 20:41  NA52651  阅读(50)  评论(0)    收藏  举报