正在尝试计算阶乘,但出现类型错误 [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
打印(阶乘())
我正在尝试编写一个程序,要求用户输入一个正整数并计算阶乘。
这就是我所做的
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
打印(阶乘())