在Python中查找一个数的倍数

16

我正在尝试编写一段代码,让我可以找到一个数字的前几个倍数。这是我的一个尝试:

def printMultiples(n, m):
for m in (n,m):
    print(n, end = ' ')

我发现,通过将for m in (n, m):放入代码中,它会对m所代表的任何数字进行循环。

def printMultiples(n, m):
'takes n and m as integers and finds all first m multiples of n'
for m in (n,m):
    if n % 2 == 0:
        while n < 0:
            print(n)

经过多次搜索,我只能找到一份Java示例代码,于是我尝试将其翻译成Python,但没有得到任何结果。我有一种感觉应该在其中某个地方使用range()函数,但我不知道具体在哪里。


这里的 nm 是什么? - Amber
请示一个使用案例并展示预期结果的示例。 - sotapme
10个回答

13

如果你想找到前 countm 的倍数,可以尝试以下代码:

def multiples(m, count):
    for i in range(count):
        print(i*m)

或者,您可以使用range来完成此操作:

def multiples(m, count):
    for i in range(0,count*m,m):
        print(i)

请注意,这两个都从0开始计算倍数 - 如果您希望从m开始计算,您需要将其偏移相应的数量:


range(m,(count+1)*m,m)

1
在调试了这段代码之后,我成功地让它按照我的需求工作了。非常感谢你! - iKyriaki

4

这个做你想要的事情吗?

print range(0, (m+1)*n, n)[1:]

当m=5,n=20时

[20, 40, 60, 80, 100]

或者更好的选择是:
>>> print range(n, (m+1)*n, n)
[20, 40, 60, 80, 100] 

针对Python3+

>>> print(list(range(n, (m+1)*n, n)))
[20, 40, 60, 80, 100] 

我尝试了一下,但结果是这样的: `>>> printMultiples(10,2) range(10, 30, 10)
printMultiples(10, 10) range(10, 110, 10)`
- iKyriaki
@iKyriaki 这可能是因为他使用的是 Python 2,而你使用的是 Python 3。你可以通过使用 print([i for i in range(n, (m+1)*n, n)]) 来解决它。我认为这是因为在 Python 2 中 range() 返回一个列表。而在 Python 3 中,range() 使用 yield,因此它是一个迭代器。如果我有误请纠正我。 - user1632861
@Mahi,在Python 3中,range返回一个生成器。您可以通过将其包装在list()中来耗尽生成器。 - sberry
@sberry 当然是生成器,因为它使用了 yield,我太傻了。用 list() 很好,我从来没有真正想过这个。 - user1632861

4

基于数学概念,我理解:

  • 所有自然数,如果被n整除并且余数为0,那么它们都是n的倍数。

因此,以下计算也适用于解决问题(1到100之间的倍数):

>>> multiples_5 = [n for n in range(1, 101) if n % 5 == 0]
>>> multiples_5
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]

更多阅读:


2

列出前十个 5 的倍数,即:

>>> [5*n for n in range(1,10+1)]
[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

1
我不明白你在说什么。能否请您添加更多的描述? - smid_the_best

1
另一种可行的方法是尝试制作一个列表。以下是获取前20个7的倍数的示例。
输入:
multiples_7 = [x * 7 for x in range(1,21)] 

print(multiples_7)

输出:

[7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140]

1
如果这正是您所寻找的内容 -
查找给定数字和限制之间的所有倍数。
def find_multiples(integer, limit):
    return list(range(integer,limit+1, integer))

这段文本应该返回-
Test.assert_equals(find_multiples(5, 25), [5, 10, 15, 20, 25])

1

你可以做:

def mul_table(n,i=1):
    print(n*i)
    if i !=10:
        mul_table(n,i+1)
mul_table(7)

0

要输出前10个5的倍数,可以这样做:

import numpy as np
#np.arange(1,11) array from 1 to 10 
array_multipleof5 = [5*n for n in np.arange(1,11)]
array_multipleof5 = np.array(array_multipleof5)
print(array_multipleof5)

0
如何使用紧凑的Python lambda表示法计算给定数字x的前n个倍数。
n_multiples_of_x = lambda n,x : list( range(x, x*n + 1, x) )

测试:

assert n_multiples_of_x(5, 5) == [5, 10, 15, 20, 25]

0
def multiples(n,m,starting_from=1,increment_by=1):
    """
    # Where n is the number 10 and m is the number 2 from your example. 
    # In case you want to print the multiples starting from some other number other than 1 then you could use the starting_from parameter
    # In case you want to print every 2nd multiple or every 3rd multiple you could change the increment_by 
    """
    print [ n*x for x in range(starting_from,m+1,increment_by) ] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接