描述
在数学运算之中,除了加、减、乘、除运算之外,还有其他更多的运算,比如乘方、开方、对数运算等等,要实现这些运算,可以使用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.0for i in range(n):result = result * xreturn resultdef gcd(a, b):"""接收两个正整数为参数,返回两个数的最大公约数"""while a % b != 0:a, b = b, (a % b)return bdef lcm(a, b):"""接收两个正整数为参数,以整数类型返回两个数的最小公倍数"""s = a * bwhile a % b != 0:a, b = b, (a % b)return s // bdef fabs(x):"""返回x的绝对值"""if x < 0:return -xelse:return xdef 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 = 1for i in range(1, n + 1):fact = fact * ireturn factdef fsum(iterable):"""接收一个元素为数值的序列为参数,以浮点数类型返回各元素之和"""result = 0.0for i in iterable:result = result + ireturn resultif __name__ == '__main__':func_name = input()choose_function(func_name)
 
