打印所有可被7整除的数字,并包含0到100之间的7

时间:2018-10-04 12:20:21

标签: python python-3.x for-loop

我正在尝试创建一个for循环,该循环将打印从0到100的所有可被7整除的数字,以及包含7的数字,例如以下示例: 7 14 17 21 27 28 等等

我试图这样做:

for i in range(101):
    if i%7==0 or i==range(7,98,10):
        print(i)

但它打印此:

7 14 21等

我该怎么办?

4 个答案:

答案 0 :(得分:3)

正如在其他地方指出的那样,i == range(7,98,10)并没有什么意义,因为您不能将整数与范围对象进行比较。您实际上想做的是成员资格测试,该测试在python中使用in关键字:i in range(7,98,10)

您将发现的下一个问题是,您缺少一类包含数字7的数字。即70-79范围(尽管您会从其他规则中得到70和77)。按照当前的策略,您的最终答案可能像这样:

for i in range(101):
    if i % 7 == 0 or i in range(7, 98, 10) or i in range(70, 80):
        print(i)

这是完全有效的。您还可以通过数学方法来解决这一问题,方法是:将7位数的数字除以10后将剩下7(称为模运算符%),而7位数的数字将具有10的余数。除以10的商(使用整数除法//)。

for i in range(101):
    if i % 7 == 0 or i % 10 == 7 or i // 10 == 7:
        print(i)

最后,您可以做一个巧妙的技巧,因为您要同时检查除数和模数是否相同;这两个结果将通过内置的divmod()函数同时给出。您只需要检查它们是否为7。(请注意,如果您扩展到两位以上的数字,则将无法使用。)

for i in range(101):
    if i % 7 == 0 or 7 in divmod(i, 10):
        print(i)

(注意:我将for循环的范围保留为与示例代码相同的范围。这将在输出中包含0,因为它可以被7整除。如果您不想0,只需将范围更改为range(1, 101)。)

答案 1 :(得分:2)

实际上,当您这样做时:

i == range(7, 98, 10)

您正在将一个整数与一个可迭代对象进行比较。因此,此条件的总值为False


您要做的是检查您的电话号码的字符串表示形式是否包含7。您可以这样做:

'7' in str(i)

因此在全球范围内,您可以编写以下内容:

for i in range(0, 101):
    if i % 7 == 0 or '7' in str(i):
        print i

答案 2 :(得分:2)

如果您不想做'7' in number并在数学上做到这一点,这就是您可以做到的

n = 7
i = 0
j = 100

# largest_multiple_of_n_smaller_than_j = (j - j%n) # 100 - 100%7 --> 100 -2 --> 98
# 98//7 --> 14 
# therefore we can say 7 multiply i( where i goes from 0 --> 14) will be less than equal to 100

multiples_of_n = [n*i for i in range(0, ((j - j%n) // n) +1)] # 0 7 14 21 ....98

# 17 27 37..(dont pick 77 here)..97 and 71 72 73...77..79
contains_n = [i*10+n for i in range(1,10) if i != n] + [n*10+x  for x in range(1,10) if (n*10+x) % n !=0] 

'''
or use this 

contains_n = [x for x in range(10+n,j,10) if x != n*11] + [x for x in range(n*10+1,n*10+10) if x % n !=0] 
'''

mult_and_contain_n =  sorted(multiples_of_n + contains_n)
print(mult_and_contain_n)


输出

n = 7

[0, 7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 84, 87, 91, 97, 98]


n = 5

[0, 5, 10, 15, 15, 20, 25, 25, 30, 35, 35, 40, 45, 45, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65, 65, 70, 75, 75, 80, 85, 85, 90, 95, 95, 100]

答案 3 :(得分:1)

使用列表理解并结合使用not i % 7str(i)的内容来检查7

print([i for i in range(7, 101) if not i % 7 or '7' in str(i)])
# [7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 84, 87, 91, 97, 98]