我正在尝试编写一个程序,要求用户输入正整数并计算阶乘。
这就是我做的事情
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函数来保证它是正面的。
请帮帮我。
提前谢谢。
答案 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);
});
打印(阶乘())