试图计算阶乘,但我有一个类型错误[python]

时间:2016-05-15 09:02:39

标签: python factorial

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

这就是我做的事情

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()

但是当我运行这段代码时,我收到错误说错误:在字符串格式化过程中没有转换所有参数。

我必须获得一个postivie整数,并希望使用getN函数来保证它是正面的。

请帮帮我。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

当您收到错误消息时,发布包括堆栈跟踪在内的整个错误消息始终是个好主意。如果可能的话,您的问题应该是自我解释而无需代因此,请提供错误消息,同时自行分析错误消息。

 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()返回一个字符串,因此您无法将其用于数值运算。您可以使用int()转换字符串,如下所示。

修复后,您还会注意到主要功能中的一些错误。您正在呼叫fact()getN()。两者都返回值,但即使您尝试使用返回的值,也不会存储它们。

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,尤其是chapter about whitespace

答案 1 :(得分:0)

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

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

但是,您的代码仍然无法正常工作,因为您在分配之前的所有地方以及未定义它们的函数中都会引用变量。我会考虑重新安排函数的顺序,并确保传递每个函数所需的所有相关参数 - 目前你根本不使用函数参数。

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

答案 2 :(得分:0)

使用此代码

def factorial():     i = int(input())

gettingProxies.on('error', function(error) {
    // Some error has occurred.
    console.error(error);
});

打印(阶乘())