因此,如果我想确定前20个(直到20个)Harshard数字,我将如何处理?我只能输入直到20的代码,而不是前20的代码。
def isHarshad(x):
x1 = str(x)
x2 = list(x1)
x3 = [int(i) for i in x2]
x4 = sum(x3)
if x%x4 == 0:
return True
else:
return False
def ithHarshad(n):
return [i for i in range(1, n+1) if isHarshad(i)]
ithHarshad(20)
答案 0 :(得分:1)
您的代码似乎正在尝试从整数中删除列表。在循环中交换变量名称,如下所示:
if not isHarshad(x):
y1.remove(r)
我更改了条件以使其更具Python风格:与布尔值比较时,无需显式编写它。因此,在这种情况下,如果isHarshad
返回True,则not
将其反转,并且下面的代码不会运行,但是当它返回false时,它将反转为True,并删除该项目。
通常,如果您使用列表推导,您实际上可以缩短代码:
def ithHarshad(n):
return [i for i in range(1, n+1) if isHarshad(i)]
此代码意味着它将创建值1 -> n
(含)的列表,并且仅当通过isHarshad
进行过滤的结果为True
时才包含该值
答案 1 :(得分:1)
您遇到了逻辑错误。只需更改
r.remove(y1)
到
y1.remove(r) in function ithHarshad()
那行得通!
答案 2 :(得分:0)
您在第二个循环中写相反的文字
for r in y1:
if isHarshad(r) == False:
y1.remove(r) # You wrote r.remove(y1)
答案 3 :(得分:0)
y1是您的列表,r是您在该列表中的整数。您需要从列表中删除。
答案 4 :(得分:0)
不是最好的代码,但这可以工作:
def isHarshad(x):
x1 = str(x)
x2 = list(x1)
x3 = [int(i) for i in x2]
x4 = sum(x3)
if x%x4 == 0:
return True
else:
return False
def ithHarshad(y):
y1 = []
for i in range(y):
y1.append(i+1)
for r in y1:
if not isHarshad(r):
print('r: %s; y1:%s' % (r, y1))
y1.remove(r)
return y1
if __name__ == "__main__":
result = ithHarshad(13)
print('Result for ithHarshad(13) = %s' % result
答案 5 :(得分:0)
如果将某物除以零,则会收到ZeroDivisionError。在您的代码中,唯一的除法是在使用模运算符时发生的。如果您传递给isHarshad()
的数字为0,则将出现此错误。另外,不需要将int转换为字符列表,可以使用纯整数算法实现isHarshad()
:
def isHarshad(x):
sum = 0
y = x
while y:
sum += y % 10
y //= 10
return sum != 0 and x % sum == 0
以这种方式进行操作还可以使您轻松更改函数,以确定数字是否是与10不同的底数的Harshad数字。