我正在教自己如何编写python代码。在这个问题中,我继续接收大于b小于或等于x行的0的语法错误。说这是一个无效的语法。为什么会这样?
我可以使用范围(x)函数来获取数字列表,但这种方式似乎应该更快更容易。谢谢你的帮助
def factorial(x):
if x==0:
return 1
elif x>0:
b=int
total = 1
for 0<b<=x:
total*=b
return total
答案 0 :(得分:3)
您的意思是if
,而不是for
(在这种情况下,解决方案是将for
替换为if
),否则您希望代码将迭代,也许,在给定范围内的所有整数b
(在这种情况下答案是for
不能像那样工作;你需要构造一个显式对象来迭代,例如使用{{1 }})。
我怀疑后者,因为你没有给range
一个值。 (嗯,实际上,你有,但可能不是你想要的方式。你已经使b
等于代表整数类型的对象。如果这对你没有意义,暂时忽略它。)
我担心Python不够聪明,你不能说“b
是一个整数;请为0和b
之间的每个可能值做点什么” - 我认为这是什么你希望的。但是,例如,x
是表示从1(包括)到range(1,x+1)
(不包括)的所有整数的对象,您可以使用x+1
循环为每个整数执行某些操作。
答案 1 :(得分:1)
for
必须后跟一个可迭代的。正确的语法是:
for variable in iterable:
在你的情况下,你应该生成一些从1
到x
的迭代。要执行此操作,您应该使用range(1,x+1)
(如果您在python 2中,则使用xrange
)
您的代码应如下所示:
for b in range(1, x+1):
total *= b
此外,b = int
不是您的想法。这不是声明,它使b
不是类型int
的变量,而是实际上类型本身。在python中,你不能限制变量保持某种类型(至少不是以一种简单的方式,AFAIK)