正在尝试计算阶乘,但出现类型错误 [python]

Trying to calculate factorial but I am having a type error [python]

我正在尝试编写一个程序,要求用户输入一个正整数并计算阶乘。

这就是我所做的

def main():
    getN()
    fact()
    print (n,"! is ",num)

def fact():
    num=1
    while n>=1:
        num=num*n
        n=n-1
    return num

def getN():
    n=input("Enter a positive integer: ")
    if not n%1==0:
        print("Enter a positive integer: ")
    return n

main()

但是当我 运行 这段代码时,我得到了错误类型错误:在字符串格式化期间并非所有参数都已转换。

我要得到一个正整数,想用getN函数来保证它是正数。

请帮帮我

提前致谢。

有点棘手的错误消息,但是 if not n%1 == 0: 是尝试执行 mod 除法,但是 n 仍然是一个字符串。您需要使用

将输入转换为 int
n=int(input("Enter a positive integer: "))

但是您的代码仍然无法运行,因为您在变量赋值之前以及在未定义变量的函数中到处引用变量。我会考虑重新安排函数的顺序,并确保传递每个函数所需的所有相关参数——目前您根本不使用函数参数。

顺便说一句,您收到该错误消息是因为 % 也用于字符串格式化操作以标记转换说明符的开始。 See the docs

当您收到一条错误消息时,post 包括堆栈跟踪在内的整个错误消息总是一个好主意。如果可能的话,您的问题应该无需代码即可自我解释。所以提供报​​错信息也要自己分析报错信息

 Traceback (most recent call last):  
   File "/home/labbi/git/sandkasten/sandkasten.py", line 21, in <module>
     main()   
   File "/home/labbi/git/sandkasten/sandkasten.py", line 2, in main
     n1 = getN()
   File "/home/labbi/git/sandkasten/sandkasten.py", line 17, in getN
     if not n%1==0: 
TypeError: not all arguments converted during string formatting

错误信息说第17行发生TypeError,这是你if语句中的操作。唯一的字符串可以包含在变量n.

您的问题是第 16 行的 input() return 是一个字符串,因此您不能将其用于数字运算。您可以使用 int() 转换字符串,如下所示。

修复它后,您还会注意到主函数中的一些错误。您正在呼叫 fact()getN()。两个 return 值,但即使您尝试使用 returned 值也不会存储它们。

def main():
    n_result = getN()
    num_result = fact(n_result)
    print (n_result,"! is ",num_result)


def fact(n):
    num=1
    while n>=1:
        num=num*n
        n=n-1
    return num


def getN():
    n = int(input("Enter a positive integer: "))
    if not n%1==0:
        print("Enter a positive integer: ")
    return n

main()

此外,出于可读性原因,我还想向您指出 python style guide, especially to the chapter about whitespace

使用此代码

def 阶乘(): 我 = int(输入())

mul = list(range(1, int(i)))

for eve in mul:
    i = i * eve

return i

打印(阶乘())