Python代码补全计划: DAY-2

声明:该系列文章首发于公众号:Y1X1n安全,转载请注明出处!本公众号所分享内容仅用于每一个爱好者之间的技术讨论,所有渗透及工具的使用都需获取授权,禁止用于违法途径,否则需自行承担,本公众号及作者不承担相应的后果。

文章目录

  • Question 2
      • **1、Question:**
        • Hints:
      • 2、Solution

Question 2

1、Question:

编写一个可以计算给定数字阶乘的程序。结果应在一行上以逗号分隔的顺序打印。假设向程序提供以下输入:8
然后,输出应该是:40320

数字阶乘是指将一个非负整数 n 的所有小于等于 n 的正整数相乘的结果,通常用符号 n! 表示。例如,5! = 5 x 4 x 3 x 2 x 1 = 120。


Hints:

1、如果向问题提供输入数据,则应将其假定为控制台输入。
2、0 的阶乘为 1
3、在 Python 2 中,使用 raw_input() 读取用户输入,而在 Python 3 中,应该使用 input() 函数。同时,Python 3 中的 print 语句需要使用括号来包围打印的内容,例如 print(fact(x))。


2、Solution

1、Python 2解法

def fact(x):
    if x == 0:
        return 1
    return x * fact(x - 1)

x = int(raw_input()) # 使用 int(raw_input()) 读取用户输入的数字
print fact(x)

# 利用递归的方式,将 x 的阶乘问题转化为 (x-1) 的阶乘问题。每次递归调用,都会使 x 减少 1,直到 x 减少到 0,然后递归停止,开始返回值。

2、 Python 3解法

  • Using While Loop

    n = int(input()) #input() function takes input as string type
                     #int() converts it to integer type
    fact = 1
    i = 1
    while i <= n:
        fact = fact * i;
        i = i + 1
    print(fact)
    
  • Using For Loop

    n = int(input()) #input() function takes input as string type
                    #int() converts it to integer type
    fact = 1
    for i in range(1,n+1):
        fact = fact * i
    print(fact)
    
  • Using Lambda Function

    n = int(input())
    def shortFact(x): return 1 if x <= 1 else x*shortFact(x-1)
    print(shortFact(n))
    

3、 Python 3解法

while True:
try:
    num = int(input("Enter a number: "))
    break
except ValueError as err:
    print(err)
# 使用try/except进行异常处理。程序假设用户输入的是一个整数。如果用户输入了一个非整数的字符串,程序将引发一个 ValueError 异常,并输出错误消息。
org = num
fact = 1
while num:
    fact = num * fact
    num = num - 1
print(f'the factorial of {org} is {fact}')
# 使用 f-字符串来将原始数字和阶乘值插入到输出字符串中。

4、 Python 3解法

from functools import reduce

def fun(acc, item):
	return acc*item

num = int(input())
print(reduce(fun,range(1, num+1), 1))

5、 Python 3解法 by: Y1X1n

def factorial(n, acc=1):
    if n == 0:
        return acc
    else:
        return factorial(n-1, n*acc)

if __name__ == '__main__':
    while True:
        n = int(input("输入数字:"))
        result = factorial(n)
        print(result)

# 使用一个额外的参数 acc 来跟踪阶乘的积。在每次递归调用时,它将当前数字 n 乘以 acc,并将结果传递给下一个递归调用。当 n 等于 0 时,阶乘的积被累加器 acc 返回。

时间复杂度为 O(n),因为它只需要执行 n 次递归调用。它的空间复杂度为 O(1),因为它只需要一个额外的参数来存储阶乘的积,没有使用列表或其他数据结构来存储中间结果。


如果你对网络安全或编程感兴趣,可以搜索公众号“Y1X1n安全”,每天都会分享相关知识点,让我们一同加油!路漫漫其修远兮,吾将上下而求索。

你可能感兴趣的:(Python,python)