python计算给定数字或者数组的阶乘

今天做毕业设计的时候遇到了一个级数展开式,里面包含着一个求一个数组的阶乘运算,这里特来记录一下。

# -*- coding:utf-8 -*-
"""
author: 15025
time: 2021/7/18 17:58
software: PyCharm

Description:
    calculate factorial of a given number
"""


class PythonStudy:
    @staticmethod
    def factorial(n):
        num = 1
        for i in range(1, n + 1):
            num *= i

        return num


if __name__ == "__main__":
    main = PythonStudy()
    result = main.factorial(4)
    print("The final result is: ")
    print(result)
"""
The final result is: 
24
"""

可以看到,我们正确地获得了4的阶乘值24。那么如果我们需要求一个数组中各个元素的阶乘值呢?

# -*- coding:utf-8 -*-
"""
author: 15025
time: 2021/7/18 17:58
software: PyCharm

Description:
    calculate factorial of a given array
"""
import numpy as np


class NumpyStudy:
    @staticmethod
    def factorial(arr):
        length = len(arr)
        num_arr = np.ones(length)
        for index, value in enumerate(arr):
            for i in range(1, value + 1):
                num_arr[index] *= i

        return num_arr


if __name__ == "__main__":
    main = NumpyStudy()
    array = np.arange(11)
    result = main.factorial(array)
    print("The final result is: ")
    print(result)
"""
The final result is: 
[1.0000e+00 1.0000e+00 2.0000e+00 6.0000e+00 2.4000e+01 1.2000e+02
 7.2000e+02 5.0400e+03 4.0320e+04 3.6288e+05 3.6288e+06]
"""

这里我们可以看到我们成功获得了数组[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]中对应的的各个元素值的阶乘值。

到这里原本是可以结束的,但是作为一个业余程序员,也应当拥有《程序员的自我修养》。因此,代码写到这种程序显然是不够的,因为不够智能,代码应该具备让用户手动输入的功能才行。所以这里打算对上述程序做更进一步地加工。最终完整的代码如下:

class PythonStudy:
    @staticmethod
    def calculateFactorial():
        while True:
            num = input("请输入一个数字: ")
            # 判断输入是否为数字
            if num.lstrip('-').isdigit():
                num = int(num)
                if num > 0:
                    break
                else:
                    print("输入数字有误,负数没有阶乘,输入的数字范围应为[1, ∞]")
                    continue
            else:
                print("输入有误,输入应当为一个整数")
                continue

        factorial = 1
        if num == 0:
            print("0 的阶乘为 1")
        else:
            for i in range(1, num + 1):
                factorial = factorial * i
            print("{0} 的阶乘为 {1}".format(num, factorial))


if __name__ == '__main__':
    main = PythonStudy()
    main.calculateFactorial()


码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的大熊猫

你的鼓励将是我写作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值