2032402 2023-2024-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2324
姓名:王艺瑶
学号:2032402
实验教师:王志强
实验日期:2024年3月31日
必修/选修: 公选课
1.实验内容
设计并完成一个完整的应用程序,实现加、减、乘、除、整除、模、正弦、余弦、正切、对数、指数、阶乘、复数运算。
2. 实验过程及结果
(1)程序编写:
print("-----Welcome to the computer!-----")
print("|| Copyright:BESTI ||")
import math
def sum(a,b):
return a+b
def sub(a,b):
return a-b
def mul(a,b):
return a*b
def mod(a,b):
return a%b
def div(a,b):
while (True):
if b == 0:
b = eval(input("b can't be 0,please enter b again:"))
else:
break
return a/b
def flo(a,b):
while (True):
if b == 0:
b = eval(input("b can't be 0,please enter b again:"))
else:
break
return a//b
def fac(a):
return math.factorial(int(a))
def pow(a,b):
return math.pow(a,b)
def log(a, b):
return math.log(b,a)
def sin(a):
return math.sin(math.radians(a))
def cos(a):
return math.cos(math.radians(a))
def tan(a):
return math.tan(math.radians(a))
def complex(a,b):
complexOpera = input('Enter the operation of complex(+-*/)')
if complexOpera == '+':
print("a+b = ", a+b)
elif complexOpera == "-":
print("a-b = ",a-b)
elif complexOpera == "*":
print("a*b = ",a*b)
elif complexOpera == "/":
print("a/b = ",a/b)
while (True):
if b == 0:
b = eval(input("b can't be 0,please enter b again:"))
else:
break
else:
print("Invalid operator, please try again!")
flag = True
while(flag):
operate = input("Please enter the operator,you can choose from(+ - * / % flo fac pow log sin cos tan com):")
a = eval(input("Please enter a:"))
b = eval(input("Please enter b:"))
if operate == "+":
print("a+b = ", sum(a, b))
elif operate == "-":
print("a-b = ",sub(a,b))
elif operate == "*":
print("a*b = ",mul(a,b))
elif operate == "/":
print("a/b = ",div(a,b))
elif operate == "%":
print("a%b = ",mod(a,b))
elif operate == "flo":
print("flo(a,b)= ",flo(a,b))
elif operate == "fac":
print("fac(a)=",fac(a),"fac(b)=",fac(b))
elif operate == "pow":
print("pow(a,b) = ",pow(a,b))
elif operate == 'log':
print("log a b (logarithm of b with base a)= ",log(a, b))
elif operate == 'sin':
print("sin(a)=",sin(a),"sin(b)=",sin(b))
elif operate == 'cos':
print("cos(a)=",cos(a),"cos(b)=",cos(b))
elif operate == 'tan':
print("tan(a)=",tan(a),"cos(b)=",tan(b))
elif operate == 'com':
complex(a,b)
else:
print("Invalid operator, please try again!")
flag = False if input("Do you want to continue?").lower() == 'n' else True
print("Thank you for your using!")
(2)代码测试:
(3)代码上传:
由于之前操作过,当创建了新文件时,系统自动询问是否上传,选择“是”即可,接着勾选文件,点提交并推送。
可以查看到已经上传
3. 实验过程中遇到的问题和解决过程
- 问题1:虚数运算时报错
- 问题1解决方案:虚部应用j表示而非i,且虚部的系数不能不写
- 问题2:进行对数运算时不清楚两个参数分别代表什么
- 问题2解决方案:math.log(a,b)表示以b为底求a的对数
- 问题3:将a,b定义为int型难以进行复数运算
- 问题3解决方案:使用eval 函数,它用于执行字符串形式的表达式,并返回表达式的结果,可以使用 eval 来执行包括复数运算在内的各种表达式。
- 问题4:当执行完一次运算,系统询问是否继续时,输入Y/y,但退出了程序
- 问题4解决方案:问题出在了
flag = False if input("Do you want to continue?")=='N' or 'n' else True
input("Do you want to continue?") == 'N'
这部分会检查用户输入是否为 ‘N’。如果是,整个条件表达式将计算为 True,否则为 False。
or 'n'
这部分的问题在于 ‘n’ 是一个非空字符串,根据 Python 中的真值测试,任何非空字符串都被认为是 True。
因此,这个条件表达式实际上是在做这样的判断:如果用户输入不是 ‘N’,则由于 or ‘n’ 总是为 True,整个条件表达式就为 True,于是 flag 被设置为 True,循环将继续。
改为flag = False if input("Do you want to continue?").lower() == 'n' else True
就正确了。