满足条件时从列表中添加整数

时间:2018-09-16 07:44:16

标签: python list

因此,如果我想确定前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) 

6 个答案:

答案 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数字。