在-Python-中实现高斯挑战

在 Python 中实现高斯挑战

原文:towardsdatascience.com/implementing-the-gaussian-challenge-in-python/

简介

卡尔·高斯是一位德国数学家和天文学家,也被称为“数学王子”。他在科学和数学领域的贡献得到了广泛的认可,例如数论、几何、代数、天文学、磁学等。即使今天,许多数学和科学概念都是以他的名字命名的。其中之一就是高斯加法,我们今天将探讨这个概念!

不是知识,而是学习的行为,不是占有,而是达到那里的行为,才能带来最大的乐趣。

– 卡尔·弗里德里希·高斯

高斯加法

高斯加法挑战是跳出思维定式思考而不是按预定方式完成任务的一个有趣例子。

当卡尔·高斯还是个孩子的时候,他的老师给了他一个任务,要他计算从 1 到 100 的数字之和。如果一步一步地做这个任务,先加前两个数字,然后下一个,再下一个,这将需要几个小时。

数字加法序列(图片由作者提供)

但卡尔·高斯提出了一种更快、更聪明的方法来完成他的任务。他明白从 1 到 100 的数字相加与 50 对相加到 101 的和是相同的,也就是说,第一个和最后一个数字 1 + 100 = 101,同样地,第二个和倒数第二个数字 2 + 99 = 101,序列中的第 n 个和倒数第 n 个项目都会加到 101,并且会形成 50 这样的对。这意味着 5050 的总和可以很容易地计算出来,而无需任何繁琐的计算。

第 n 个数字与第 n 个最后一个数字相加得到 101(图片由作者提供)

卡尔·高斯很聪明;他能够想出一种聪明的技巧来计算总和,但让我们说实话。我们中没有一个人那么聪明 😛。虽然我们没有高斯的大脑,但我们确实有编程和计算机的优势,它们为我们做复杂的计算。让我们用 Python 编写上述问题。

代码

让我们在理解将要使用的 Python 内置函数的同时解决高斯挑战:

范围

我们首先需要理解的是 Python 的 range 函数。此函数用于创建可以用于其他函数(如 for 循环)的数字序列。

range 函数的语法如下。

范围 = (序列开始的数字,序列停止的数字,步长)

假设我们需要生成一个从 1 到 10 的数字序列,步长或差为 1,因此我们将使用此范围函数如下:

numbers = range(1,11)
for i in numbers:
    print(i)

使用范围函数打印数字(图片由作者提供)

注意,我们已经指定了序列停止的数字为 11。这是因为,根据语法,最后一个数字将包含在范围内,即在上面的例子中,小于 11 = 10。

如果我们要打印变量 numbers,我们不会得到这些数字的特定顺序列表。然而,我们会得到一个范围数据类型。这是因为范围数据类型不会像列表那样在计算机内存中存储序列。我们不能将数字的范围等同于列表。

numbers = range(1,11)
print(numbers)

打印范围(图片由作者提供)

For 循环

接下来,我们需要遍历这些数字。Python 循环是我们进行任何类型迭代的首选。在本教程中,我们将学习两种循环,并使用它们来实现上述结果。

现在,由于我们正在遍历之前定义的范围,在我们的例子中是从 1 到 100,默认步长为 1(我们可以省略这一点),我们将使用 for 循环并向它提供这个 range。但首先,我们将定义一个名为 total 的变量,该变量将存储每次迭代后数字序列的总和。total 的初始值将是 0,并且每次迭代都会增加。因此,在第一次迭代中,当我们从 1 到 100 循环时,总将是 1。在第二次迭代中,它将是 1 + 2 = 3。在第三次迭代中,它将是 3 + 3 = 6,以此类推。

我们将在最后打印 total 的值。看,它等于 5050,与高斯相同。

numbers = range(1,101)
total = 0
for i in numbers:
    total = total + i
print("Total: ", total)

使用 For 循环的总和(图片由作者提供)

当循环

完成上述任务的另一种方法是使用 Python while 循环。while 循环会在特定条件变为假之前一直执行。在我们的情况下,我们需要初始化一个变量 i,给它起始值 1,并只增加 1,这样它就会遍历列表直到达到 101。当 i = 101 时,while 循环的条件将变为假,因此它将停止。total 的值将被打印出来。

numbers = range(1,101)
total = 0
i = 1
while i in numbers:
    total = total + i
    i = i + 1
print("Total: ", total)

使用 while 循环的输出(图片由作者提供)

结论

在这篇简短的文章中,我们使用了 range 函数作为定义从 1 到 100 的数字的快捷方式。然后我们使用了 forwhile 循环来解决加法问题,并且两者都能给出正确的结果。

然而,正如可以从这样的选择中看到的那样,一种技术比另一种技术更有效。你认为在解决高斯挑战中,while 循环和 for 循环哪一个更好?从复杂性、时间、使用的内存和清晰度等方面考虑。显然,一个比另一个更好。请分享你认为哪一个比另一个更好以及为什么。我期待着看到你的评论!

posted @ 2026-03-28 10:21  布客飞龙V  阅读(1)  评论(0)    收藏  举报