for循环问题的两种解决方案之间的区别?

时间:2019-10-10 16:36:47

标签: python myprogramminglab

我正在尝试解决名为MyProgrammingLab的软件中的一个问题,该软件用于在我的python类中进行教学。问题是:

算术级数是一个数字序列,其中任意两个连续数字之间的距离(或差)相同。在序列1、3、5、7,...中,距离为2,而在序列6、12、18、24,...中,距离为6。

给出正整数距离和正整数n,将变量和与从1到n的算术级数的元素之和与距离“距离”相关联。例如,如果distance为2并且n为10,则sum将与25关联,因为1 + 3 + 5 + 7 + 9 =25。

我的解决方法是:

sum = 0
for n in range(1,n+1,distance):
    sum += n

如果我将10用作n,我得到正确的答案25,但是该解决方案未被软件接受。它说n的值正在被修改。

可接受的答案是:

sum = 0
for i in range(1,n+1,distance):
    sum += i

如果n = 10,两个解决方案都给出相同的答案,但是我的第一个解决方案给出的错误是n的值被修改。

我的教授说,n,i,和的均值应该是分开的,这不在我的解决方案中。为了证明他说打印出n的值:

sum = 0
n = 10
distance = 2
for n in range(1,n+1,distance):
    print(n)

结果是1,3,5,7和9(原来的n值10被更改了)

使用可接受的解决方案:

sum = 0
n = 10
distance = 2
for i in range(1,n+1,distance):
    print(n)

答案是:10,10,10,10(n的值不变)

所以我的问题是,如果两个解决方案都能得到正确的答案,那么n值不变或不变的意义何在?

1 个答案:

答案 0 :(得分:0)

这里的问题是,您通常希望避免重复使用变量名。有很多警告-例如,在很多情况下,具有多个函数使用相同的名称作为输入arg暗示在函数上的输入应具有相似性方面很有用-但这是一个很好的经验法则

考虑到这一点,请看一下您的解决方案:

sum = 0
for n in range(1,n+1,distance):
    sum += n

数字n设置为10时(我假设它在程序的前面用n=10行设置了?或者由于“ MyProgrammingLab”软件,它已经在名称空间中了?),然后继续使用名称n,因为变量在for循环中递增。该软件是正确的,可以说n的值正在被修改。 for循环的每一步,都为n分配了一个新值。循环的第一轮运行n是1。循环的下一轮运行n是(1 + distance),依此类推。因此n被重复分配。

这引起对n表示的困惑:这是否意味着将几个数字加在一起?还是在for循环的 this 运行中的当前值?为避免这种情况,最好对for循环过程中要递增的变量使用完全不同的值。官方解决方案使用i,就可以了。您也可以说类似current_value之类的内容,或者您​​发现的任何内容都可以使您更容易记住当时的含义。