Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for循环问题的两种解决方案之间的差异?_Python_Myprogramminglab - Fatal编程技术网

Python for循环问题的两种解决方案之间的差异?

Python for循环问题的两种解决方案之间的差异?,python,myprogramminglab,Python,Myprogramminglab,我正试图解决一个名为MyProgrammingLab的软件中的问题,该软件在我的python课程中用于教学。问题是: 算术级数是一个数字序列,其中任意两个连续数字之间的距离(或差)相同。这在序列1,3,5,7,…,中,距离是2,而在序列6,12,18,24,…,中,距离是6 给定正整数距离和正整数n,将变量和从1到n的算术级数的元素和与距离“距离”相关联。例如,如果距离为2,n为10,那么sum将与25关联,因为1+3+5+7+9=25 我的解决办法是: sum = 0 for n in ran

我正试图解决一个名为MyProgrammingLab的软件中的问题,该软件在我的python课程中用于教学。问题是:

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

给定正整数距离和正整数n,将变量和从1到n的算术级数的元素和与距离“距离”相关联。例如,如果距离为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,sum的平均值应该是分开的,这不在我的解中。为了证明他说要打印出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)
sum = 0
for n in range(1,n+1,distance):
    sum += n
答案是:10,10,10,10(n的值不变)


所以我的问题是,如果两种解决方案都得到了正确的答案,那么n值改变或不改变的意义是什么?

这里的问题是,您通常希望避免重复使用变量名。这里有大量的警告——例如,在许多情况下,多个函数使用相同的名称作为输入参数是很有用的,这意味着函数之间的输入应该是相似的——但这是一个很好的经验法则

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

sum = 0
n = 10
distance = 2
for i in range(1,n+1,distance):
    print(n)
sum = 0
for n in range(1,n+1,distance):
    sum += n
当数字
n
被设置为10时(我假设它是在程序的前面设置的,有一行
n=10
?或者它可能已经在名称空间中了,因为“MyProgrammingLab”软件?),然后您将继续使用名称
n
作为for循环中递增的变量。软件(sorta)正确地表示正在修改
n
的值。for循环的每一步都会为
n
指定一个新值。循环的第一次运行,
n
为1。循环的下一次运行,
n
是(1+距离),等等。因此
n
被重复重新分配


这导致了对
n
表示的内容的混淆:它是否意味着有多少个数字被加在一起?或者它是for循环运行中的当前值?为了避免这种情况,最好对作为for循环进程递增的变量使用完全不同的值。官方解决方案使用
i
,这很好。你也可以说一些像
当前值
,或者你发现的任何东西,让你更容易记住它在那一刻的含义。

“但我的第一个解决方案是给出一个错误,即n的值被修改了。”我不确定我是否正确理解你的问题,但一般来说,你应该在这样的循环中只使用变量名,如果在代码的其余部分没有使用它们。因此,如果在循环之外使用
n
,最好在
i
上循环,反之亦然。似乎编程环境存在问题。一个普通的pythonshell不会抱怨this@Quastiat-是的,我认为这就是问题所在。这样做是一种不好的做法。我只是觉得讽刺的是,它抱怨
n
被覆盖,但它告诉您声明一个名为
sum
的变量,该变量隐藏了python内置的
sum
函数,并且没有对此抱怨