【问题标题】:Create a list of numbers dividable by certain numbers by using the command « filter() »使用命令«过滤器()»创建可被某些数字整除的数字列表
【发布时间】:2020-10-13 02:20:28
【问题描述】:

我在 Python 上)我必须使用 filter() 创建一个从 1 到 100(含)的所有数字的列表,这些数字可以被 7、9 和 42 整除。但是,当我开始编写这段代码时它,它没有给我正确的解决方案。你知道问题出在哪里吗?

listnumbers = []
for x in range (1, 101):
    x = str(x)
    listnumbers.append(x)
print (listnumbers)

def dividable(k):
    for t in k:
        if int(t) % 7 == 0:
            return True
        if int(t) % 9 == 0:
            return True
        if int(t) % 42 == 0:
            return True
        else:
            return False
    return dividable

s2u = list(filter(dividable, listnumbers))

for q in s2u:
    print(q)

【问题讨论】:

  • 您将数字转换为字符串是否有原因?有这个要求吗?
  • return dividable 应该做什么?就此而言,您是否知道您的 for 循环只会执行一次迭代?
  • 不,我试图纠正指示的错误,但我可能搞砸了代码..
  • 传递给filter 的函数应该采用单个值(数字)并返回TrueFalse。您不需要在其中使用 for 循环。
  • 不,filter() 将列表中的每个值一一传递给函数。

标签: python filter


【解决方案1】:

根据您的问题陈述,该数字应能被 7 9 42整除。

listnumbers = list(range(1,101))

def dividable(k):
    if k % 7 == 0 and k % 9 == 0 and k % 42 == 0:
        return True
    else:
        return False

ans = list(filter(dividable, listnumbers))
print(ans)

【讨论】:

  • 我想你可能想要or 而不是and
【解决方案2】:

只是盯着你的代码,我认为dividable(k) 写得不正确。更新到:

def dividable(k):
    n = int(k)
    return n % 7 == 0 or n % 9 == 0 or n % 42 == 0:

为什么在这个方法中声明了一个 for 外观?如果它通过了其余的条件,为什么它会在最后返回函数?

【讨论】:

  • 你是说这个词的意思吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2021-01-05
  • 2022-08-19
相关资源
最近更新 更多