描述
在数学运算之中,除了加、减、乘、除运算之外,还有其他更多的运算,比如乘方、开方、对数运算等等,要实现这些运算,可以使用Python 中的math模块中。我们知道,Python中的模块是将我们需要的功能提前定义为函数置于文件中,以模块的形式导入后就可以调用其中的函数解决用户的问题了。
请参考官方文档中math库中各函数的文档注释要求,完成程序模板中的函数定义(务必注意代码缩进)提供幂运算、最大公约数、最小公倍数、绝对值、向上取整 、向下取整、阶乘等运算函数,使自定义的函数的输入、输出和异常尽可能与math库中的函数一致,并使程序实现如下效果:
程序运行后将输出菜单,用户根据菜单的提示输入命令,调用并执行对应功能:
若输入命令为’pow’,则分两行依次输入一个数值x和一个整数n,并调用pow()函数计算并输出x的n次方。
若输入指令为’gcd’,则在一行内输入两个正整数a、b(空格间隔),并调用gcd()函数计算并输出这两个正整数的最大公约数。
若输入指令为’lcm’,则在一行内输入两个正整数a、b(空格间隔),并调用lcm()函数计算并输出这两个正整数的最小公倍数。
若输入指令为’fabs’,则输入一个数值x,并调用fabs()函数计算并输出这个数的绝对值。
若输入指令为’ceil’,则输入一个数值x,并调用ceil()函数计算并输出不小于该数的最小整数。
若输入指令为’floor’,则输入一个数值x,并调用floor()函数计算并输出不大于该数的最大整数。
若输入指令为’factorial’,则输入一个非负整数n,并调用factorial()函数计算并输出该数的阶乘。
若输入指令为’fsum’,则在一行内输入若干个数值(空格间隔),并调用fsum()函数计算并输出所有输入数值之和。
若输入指令不是上面任一个值,则直接输出’No such function!’。
输入输出示例 :
示例 1
输入:
pow
2
3
输出: 8.0
示例 2
输入:
gcd
16 24
输出: 8
示例 3
输入:
lcm
16 24
输出: 48
示例 4
输入:
fabs
-3
输出: 3
示例 5
输入:
ceil
3.8
输出: 4
示例 6
输入:
floor
3.3
输出: 3
示例 7
输入:
factorial
5
输出: 120
示例 8
输入:
fsum
1 2 3 4 5
输出: 15.0
# ------------ ------- -------- ----------- -----------
# @File : 5.4.2 自定义数学函数模块实验模板.py
# @Contact : vasp@qq.com
# @Copyright : 2018-2025, Wuhan University of Technology
# @Modify Time: 2021/4/27 9:47
# @Author : 赵广辉
# @Version : 1.0
# @License : 仅限用于Python程序设计基础实践教程(赵广辉,高等教育出版社)配套实验
# ------------ ------- -------- ----------- -----------
def choose_function(no):
"""接收一个字符串为参数,根据参数值判断问题类型,调用合适的函数进行操作。"""
if no == 'pow': # 调用pow()函数,并输出其返回值
x = float(input())
n = int(input())
print(pow(x, n))
elif no == 'gcd': # 调用gcd()函数,并输出其返回值
a, b = map(int, input().split())
print(gcd(a, b))
elif no == 'lcm': # 调用lcm()函数,并输出其返回值
a, b = map(int, input().split())
print(lcm(a, b))
elif no == 'fabs': # 调用fabs()函数,并输出其返回值
x = eval(input())
print(fabs(x))
elif no == 'ceil': # 调用ceil()函数,并输出其返回值
x = eval(input())
print(ceil(x))
elif no == 'floor': # 调用floor()函数,并输出其返回值
x = eval(input())
print(floor(x))
elif no == 'factorial': # 调用factorial()函数,并输出其返回值
n = int(input())
print(factorial(n))
elif no == 'fsum': # 调用fsum()函数,并输出其返回值
ls = list(map(eval, input().split()))
print(fsum(ls))
else:
print('No such function!')
def pow(x, n): # 幂运算函数
"""接收一个数字x和一个整数n为参数,返回x的n次幂的结果的浮点数类型
要求使pow(1.0, x) 和 pow(x, 0.0) 总是返回 1.0"""
result = 1.0
for i in range(n):
result = result * x
return result
def gcd(a, b):
"""接收两个正整数为参数,返回两个数的最大公约数"""
while a % b != 0:
a, b = b, (a % b)
return b
def lcm(a, b):
"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""
s = a * b
while a % b != 0:
a, b = b, (a % b)
return s // b
def fabs(x):
"""返回x的绝对值"""
if x < 0:
return -x
else:
return x
def ceil(x):
"""接受一个浮点数或整数,返回大于或等于该数的最小整数"""
if int(x) == x or x < 0:
return int(x)
else:
return int(x + 1)
def floor(x):
"""接受一个浮点数或整数,返回不大于该数的最大整数"""
if int(x) == x or x > 0:
return int(x)
else:
return int(x - 1)
def factorial(n):
"""接收一个非负整数n为参数,返回n的阶乘,0的阶乘值为1"""
fact = 1
for i in range(1, n + 1):
fact = fact * i
return fact
def fsum(iterable):
"""接收一个元素为数值的序列为参数,以浮点数类型返回各元素之和"""
result = 0.0
for i in iterable:
result = result + i
return result
if __name__ == '__main__':
func_name = input()
choose_function(func_name)