课程:《Python程序设计》
班级: 2411
姓名: 高赞凯
学号:20241113
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课
(一)简单四则运算的实验内容,实验过程以及结果
1.程序代码
点击查看代码
def sum(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def div(x,y):
if y == 0:
return "除数不能为0!"
return x/y
while True:
num1 = float(input("请输入数字1是: "))
num2 = float(input("请输入数字2是: "))
choice= input("请输入运算符号+-*/")
if choice in('+','-','*','/'):
try:
if choice =='+':
print(num1,"+",num2,"=",sum(num1,num2))
elif choice == '-':
print(num1,"-",num2,"=",sub(num1,num2))
elif choice =='*':
print(num1,"*",num2,"=",mul(num1,num2))
elif choice =='/':
print(num1,"/",num2,"=",div(num1,num2))
break
except:
print("输入错误,请检查")
else:
print("请重新输入")

(二)添加取对数算法,并添加结尾是否退出,注意对数函数需要满足真数大于0且底数大于0并且不为1。
1.实验代码
点击查看代码
import math
def sum(x,y):
return x+y
def sub(x,y):
return x-y
def mul(x,y):
return x*y
def log(x,y):
return math.log(x,y)
def div(x,y):
if y == 0:
return "除数不能为0!"
return x/y
flag = True
while flag:
num1 = float(input("请输入数字1:"))
num2 = float(input("请输入数字2:"))
choice= input("请输入运算符号:+, -, *, /, log")
if choice in('+', '-', '*', '/', 'log'):
try:
if choice == '+':
print(num1,"+",num2,"=",sum(num1,num2))
elif choice == '-':
print(num1,"-",num2,"=",sub(num1,num2))
elif choice == '*':
print(num1,"*",num2,"=",mul(num1,num2))
elif choice == '/':
print(num1,"/",num2,"=",div(num1,num2))
elif choice == 'log':
print(num1,"log",num2,"=",log(num1,num2))
x = int(input('还要继续吗?继续输入1,退出输入2'))
if x == 1:
flag = True
elif x== 2:
flag = False
except:
print("输入错误,请检查")
else:
print("请重新输入")
2.运算结果

(三)将计算器功能从整数拓展到复数,程序先判断是整数还是复数。注意复数是a+bj而不是a+bi(这点与数学区分开来)
1.程序代码
点击查看代码
import math
def sum(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
def log(x, y):
return math.log(x, y)
def div(x, y):
if y == 0:
return "除数不能为0!"
return x / y
flag = True
while flag:
is_complex = input("是否进行复数运算?是的话就打个yes,不是的话就输个no")
if is_complex.lower() == 'yes':
num1_str = input("请输入复数1(格式如a+bi):")
num2_str = input("请输入复数2(格式如a+bi):")
num1 = complex(*map(float, num1_str.replace('i', '').split('+')))
num2 = complex(*map(float, num2_str.replace('i', '').split('+')))
else:
num1 = float(input("请输入数字1:"))
num2 = float(input("请输入数字2:"))
choice = input("请输入运算符号:+, -, *, /, log")
if choice in ('+', '-', '*', '/', 'log'):
try:
if choice == '+':
print(num1, "+", num2, "=", sum(num1, num2))
elif choice == '-':
print(num1, "-", num2, "=", sub(num1, num2))
elif choice == '*':
print(num1, "*", num2, "=", mul(num1, num2))
elif choice == '/':
print(num1, "/", num2, "=", div(num1, num2))
elif choice == 'log':
if isinstance(num1, complex) or isinstance(num2, complex):
print("复数没法取对数啊!")
else:
print(num1, "log", num2, "=", log(num1, num2))
x = int(input('还要继续吗?继续输入1,退出输入2'))
if x == 1:
flag = True
elif x == 2:
flag = False
except:
print("输错了,再来")
else:
print("重输一次bro")
2.实验结果:

(四)进一步拓展计算器的功能,增加幂函数。注意对数函数需要满足真数大于0且底数大于0并且不为1
1.实验代码
点击查看代码
import math
def sum(x, y):
return x + y
def sub(x, y):
return x - y
def mul(x, y):
return x * y
def log(x, y):
if isinstance(x, complex) or isinstance(y, complex):
return "复数没法取对数啊!"
if x <= 0 or y <= 0 or y == 1:
return "对数运算要求真数大于 0 且底数大于 0 并且不为 1。"
return math.log(x, y)
def div(x, y):
if y == 0:
return "除数不能为 0!"
return x / y
def power(x, y):
return x ** y
flag = True
while flag:
is_complex = input("是否进行复数运算?是的话就打个 yes,不是的话就输个 no: ")
if is_complex.lower() == 'yes':
num1_str = input("请输入复数 1(格式如 a+bi):")
num2_str = input("请输入复数 2(格式如 a+bi):")
num1 = complex(*map(float, num1_str.replace('i', '').split('+')))
num2 = complex(*map(float, num2_str.replace('i', '').split('+')))
else:
num1 = float(input("请输入数字 1:"))
num2 = float(input("请输入数字 2:"))
choice = input("请输入运算符号: +, -, *, /, log, pow: ")
if choice in ('+', '-', '*', '/', 'log', 'pow'):
try:
if choice == '+':
print(num1, "+", num2, "=", sum(num1, num2))
elif choice == '-':
print(num1, "-", num2, "=", sub(num1, num2))
elif choice == '*':
print(num1, "*", num2, "=", mul(num1, num2))
elif choice == '/':
print(num1, "/", num2, "=", div(num1, num2))
elif choice == 'log':
result = log(num1, num2)
print(num1, "log", num2, "=", result)
elif choice == 'pow':
print(num1, "**", num2, "=", power(num1, num2))
x = int(input('还要继续吗?继续输入 1,退出输入 2: '))
if x == 1:
flag = True
elif x == 2:
flag = False
except:
print("输错了,再来")
else:
print("重输一次 bro")
(三)在实验过程中遇到的问题和解决方法
1.在'/'运算中,讨论num2==0的情况
2.一开始没有想到调用math,傻傻想怎么算log,看了群里的代码豁然开朗
3.结尾是否退出哪里缩进错误导致一开始无法循环,又检查一遍才发现它跟最后elif放一起了
(四)实验收获
对于函数封装的认识:
通过将常用的逻辑封装到函数中,可以在程序的多个地方重复调用,节约敲代码的时间。同时通过函数名直观体现函数功能,方便调用。
参考资料
--《零基础学Python》
--https://blog.csdn.net/2401_85737382/article/details/145499074
浙公网安备 33010602011771号