了解有关数字倍数的代码

Understanding a code about multiples of numbers

最近我在尝试做一些 Python 编程,所以我在 website.

中做一些数学练习

我遇到了这个 example 起初我不明白这个练习。所以我检查了解决方案,至少理解了这个问题。因此,我发现自己学习了一些编码技巧(比如 while True 循环)。

练习很简单:

Write a Python program to find the smallest multiple of the first n numbers. Also, display the factors.

代码如下:

def smallest_multiple(n):
    if (n<=2):
      return n
    i = n * 2
    factors = [number  for number in range(n, 1, -1) if number * 2 > n]
    print(factors)

    while True:
        for a in factors:
            if i % a != 0:
                i += n
                break
            if (a == factors[-1] and i % a == 0):
                return i

我的问题是:

  1. 他为什么要创建一个比输入高 2 倍的数字列表?

  2. 然后 while 循环很难理解。有人可以给我解释一下吗(我的意思是循环的内容)?

我认为我们这里有数学问题和编程的微小混合。

首先,请注意空格在编码中很重要。查看代码的外观。 (带空格)

def smallest_multiple(n):
    if (n<=2):
        return n
    i = n * 2
    factors = [number  for number in range(n, 1, -1) if number * 2 > n]
    print(factors)

    while True:
        for a in factors:
            if i % a != 0:
                i += n
                break
            if (a == factors[-1] and i % a == 0):
                return i

1- 为什么他创建一个比输入高 2 倍的数字列表? 答案: 因为比最高数字小一倍的数字不会影响/改变结果。 (这是一个数学问题)你可以通过删除条件来检查,你会看到你会得到相同的结果(相同的最小倍数)

2-然后 while 循环很难理解。有人可以向我解释一下吗(我的意思是循环的内容)?感谢您的答复? 答案: 循环使用布尔值 True 因为代码只会停止,直到它找到 前 n 个数字 的最小倍数.程序员这样做的原因是他使用了关键字 return 来帮助他退出函数,最终退出 while 循环。

循环使用值i,它是前n个数中最高数的第一个倍数,意思是值[=16=的两倍].然后将检查第一个倍数(意思是 i)是否 不能 被列表中从最高数开始的数字整除(i % a != 0)。

if i % a != 0:
    i += n
    break

只要i不能被前n个数中的任何数整除,i的值就会增加

,这意味着代码不断搜索 n 的倍数(n 是列表中的最高数字)直到 i 可以被列表中的所有数字整除

一旦i值能够满足以下条件

if (a == factors[-1] and i % a == 0):

然后通过退出函数的关键字 return 退出 while 循环,并且 i 值作为对函数调用的响应通过行 return i 发送 另请注意 factors[-1] 是列表的最后一项(编号)。

我希望上面的内容对你来说是有意义的并且是清楚的。