我想排除所有不能被7整除且不是(0,300)范围内的5的倍数的数字

时间:2019-02-02 03:15:57

标签: python range

基本上,我必须得到一个可被7整除而不是5的倍数的数字列表,但是由于某些原因,当我输入条件时它告诉我我有错误。

for i in [x for x in xrange(0,100) if x%7 ==0 and if x%5 !=0 ]:
    print i

2 个答案:

答案 0 :(得分:1)

我知道您按照列表理解的原则发布了一些内容,但是很难阅读。有几件事...

  1. 在将其精简为列表理解之前,我会尝试将其编写为多行for循环。
  2. 我不确定您为什么在这里使用“ x”,而“ xrange”没有意义。 编辑:刚刚意识到为什么我不认识xrange,这是因为我从未使用过Python 2.x。

因此,仔细考虑一下,您基本上是在寻找0到300之间可以被7整除但不能是5的倍数的任何数字。

意味着我们有几件事...

  • range(0,301):由于范围不包括我们的上一个值,因此我们希望n + 1
  • 我们的数字,假设“ i”都是...“ i%7 == 0”和“ i%5!= 0”

所以让我们逐行看

for i in range(0,301):

好吧,现在您不需要像示例中那样的嵌套的for循环列表理解。现在,您需要知道“如果”我是____...所以我们需要一个if语句。

if i%7==0 and i%5!=0:

看到逻辑了吗?当然,如果if语句在我们的for循环内,则可以循环遍历我们范围内的所有值。

最后,如果我们的“ i”符合我们的标准,那么我们可以打印所有值。

print(i)

所以,我们的最终代码看起来像...

for i in range(0,301):
    if (i % 7 == 0) and (i % 5 != 0):
        print(i)

当然,有很多方法可以使它更优雅,但这是一般性的想法。

列表理解:

party = [i for i in range(0,301) if i%7==0 and i%5!=0]
print(party)

将它们全部存储在列表中,以便您可以随时访问它们。或者,您也可以不用分配就打印它。

编辑:标题和您在正文中所说的有点矛盾。看完我自己的答案后,我不确定是不是您要找的东西,但这就是我的想法。希望对您有帮助!

答案 1 :(得分:0)

您的列表理解不正确。它应该类似于:

[x for x in xrange(100) if x%5 and not x%7]

更好(更有效)的情况将类似于

[x for x in xrange (7, 100, 7) if x%5]

更好的是……不,我们现在就停在这里。