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

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

  • 课程:《Python程序设计》
  • 班级: 1924
  • 姓名: 邢质斌
  • 学号: 20192415
  • 实验教师:王志强
  • 实验日期:2021年4月26日
  • 选修: 公选课

一.实验内容

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

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

二. 实验过程及结果

Ⅰ 该计算器主要具有以下几种运算功能,将一一分析介绍:

1.加、减、乘、除、取模、次方、开方

2.累加、累乘

3.阶乘

4.三角函数

1.加、减、乘、除、取模、次方、开方

1.1 设计思路

该部分共含有7种运算。

加减乘除取模次方使用python运算符即可完成;

开方则利用math模块中的log函数完成。

1.2 程序代码

list1 = ('+','-','*','/','%','**','k')
def operation1(a,b,c):
	if c == '+':
    	return a + b
	elif c == '-':
    	return a - b
	elif c == '*':
    	return a * b
	elif c == '/':
    	return a / b
	elif c == '%':
    	return a % b
	elif c == '**':
    	return a ** b
	elif c == 'k':
    	return cmath.log(a[b])

while(flag == 1):
	operator = input("请输入你要做的运算(+、-、*、/、%、**(次方)、k(开方)):")
	a = int(input("请输入一个数:"))
	b = int(input("请输入一个数:"))
	if list1.count(operator) > 0:
		if operator != 'k':
			print(a,operator,b," = ",operation1(a,b,operator))
		elif operator == 'k':
			print("以", b, "为底的", a, "的对数为:", math.log(a,b))
	else:
            	print("运算符号输入有误!")
	flag = int(input("继续(1)or其它运算(0)?"))

1.3 运行结果

2.累加、累乘

2.1 设计思路

根据输入确定累加/累乘的数的范围。

利用列表的append()方法,使需要累加/累乘的每个数进入列表。

再利用循环进行累加/累乘运算。

2.2 程序代码

list2 = []
def list_build(a,b):
	if a>b:
    	temp=a
    	a=b
    	b=temp
	b=b+1
	for x in range(a, b):
    	list2.append(x)
def operation2(*para):
	sum1 = 0
	for item in para:
    	sum1 += item
	print("多个数的和:",sum1)
def operation3(*para):
	sum1 = 1
	for item in para:
    	sum1 = item * sum1
	print("多个数的积:",sum1)

while(flag == 1):
	operator = input("请输入你要做的运算(n+(累加)、n*(累乘)):")
	a = int(input("请输入一个数:"))
	b = int(input("请输入一个数:"))
	list_build(a,b)
	if operator == 'n+':
		operation2(*list2)
	elif operator == 'n*':
		operation3(*list2)
	else:
		print("运算符号输入有误!")
	list2.clear()

	flag = int(input("继续(1)or其它运算(0)?"))

2.3 运行结果

3.阶乘

3.1 设计思路

阶乘和累乘的设计思路相似,阶乘相当于累乘中的大数为所输入的数,小数则总为1。

3.2 程序代码

def list_build(a,b):
	if a>b:
    	temp=a
    	a=b
    	b=temp
	b=b+1
	for x in range(a, b):
    	list2.append(x)
def operation3(*para):
	sum1 = 1
	for item in para:
    	sum1 = item * sum1
	print("多个数的积:",sum1)

while(flag == 1):
	a = int(input("请输入需要计算阶乘的数:"))
	list_build(1,a)
	operation3(*list2)
	list2.clear()

	flag = int(input("继续(1)or其它运算(0)?"))

3.3 运行结果

4.三角函数

4.1 设计思路

计算三角函数利用math模块中的三角函数即可完成。

需要注意的是角度需要转化为弧度,可以借助math模块中的radians函数完成。

4.2 程序代码

while (flag == 1):
	c = int(input("请输入一个角度(0~360):"))
	d = input("请输入你要做的运算(sin,cos,tan):")
	if d == 'sin':
		print(c,"的",d,"为",math.sin(math.radians(c)))
	elif d == 'cos':
		print(c,"的",d,"为",math.cos(math.radians(c)))
	elif d == 'tan':
		print(c,"的",d,"为",math.tan(math.radians(c)))
	else:
		print("运算符号输入有误!")
                    
	flag = int(input("继续(1)or其它运算(0)?"))

4.3 运行结果

Ⅱ 将代码push至码云

https://gitee.com/besti2021python/Xing20192415/blob/master/Python实验二0426.py)

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

  • 问题1:range()左开右闭,列表中生成的数比实际需要的少一个

  • 问题1解决方案:range(a,b),使原本的b变为b+1。

    同时,我发现range()左开右闭是有一定便利和道理的:

    ①上下界之差等于元素的数量

    ②易于表示两个相邻子序列,一个子序列的上界就是另一个子序列的下界

    ③序列从零(最小自然数)开始计数时,下界的下标不是 -1(非自然数)

    ④表达空集时,不会使得上界小于下界

  • 问题2:混淆 math 模块与 cmath 模块

  • 问题2解决方案:经过查找资料区分两者不同。

    Python math 模块提供了许多对浮点数的数学运算函数;Python cmath 模块包含了一些用于复数运算的函数。cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。

  • 问题3: math 模块中的三角函数需使用弧度制

  • 问题3解决方案:利用 math 模块中的 radians 函数将角度转化为弧度。

    为便于用户使用计算器,设计的输入是角度制(0~360),但 math 模块中的三角函数需使用弧度制。一开始考虑利用“pi * 角度 / 360”进行运算,但实际得到的结果与理想不符。后发现 math 模块有专门的函数进行二者转化。

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

网络上有一些关于可视化的教程,可以将编写的代码变为按键式的计算器。有时间有机会要试一试。

五. 参考资料

posted @ 2021-05-10 16:06  20192415邢质斌  阅读(268)  评论(0编辑  收藏  举报