5 回答
TA贡献1856条经验 获得超17个赞
Python 不允许您在for循环中更改迭代器。一旦循环的下一次迭代到来,迭代器将成为可迭代对象的下一个值。
这也是因为range其行为与实际的类似 Java 的for循环不同。相反,它会不断生成该范围内的数字(您可以通过list(range(10))在 Python 解释器中输入来看到这一点,它会生成一个从 0 到 9 的数字列表。
如果你想修改迭代器,你应该使用循环while来代替:
i = 1
while i <= 3:
inputMovie=input("Enter Movie " + str(i) + " of " + str(3) + " : ")
if inputMovie=="":
print("Please input a movie name")
print("")
i-=1
else:
movies.append(inputMovie)
i = i + 1
这应该与您的 Java 代码执行相同的操作,因为我只是将三个指令从 Javafor循环移动到它们的位置。pass不需要通知,因为它是无效的声明。
为了优化,我想说的是,您实际上并不需要递减迭代器,只需避免递增它即可。我将此解决方案与原始答案分开,因为它与您的原始设计有很大偏差:
i = 1
while i <= 3:
inputMovie=input("Enter Movie " + str(i) + " of " + str(3) + " : ")
if inputMovie=="":
print("Please input a movie name")
print("")
else:
movies.append(inputMovie)
i = i + 1
我所做的就是删除减量并将增量推入块else,以便仅在输入电影名称时才运行它。
TA贡献1804条经验 获得超3个赞
你应该使用一个while声明
“不幸的是”for循环将保留“内存”并在每次迭代时重新分配给下一个值
i = 1
while i < 4:
inputMovie = input("Enter Movie " + str(i) + " of " + str(3) + " : ")
if inputMovie == "":
print("Please input a movie name")
print("")
i-=1
else:
movies.append(inputMovie)
i+=1
该pass指令无关紧要,您可以省略它
TA贡献1813条经验 获得超2个赞
Python 中的 for 循环更像是 for-each。因此,无论循环中的更改/更新如何,循环值(i)都会更新为下一个值。
更好的方法是使用 while 循环。
i = 1
while i <= 3:
inputMovie = input("Enter Movie " + str(i) + " of " + str(3) + " : ")
if inputMovie=="":
print("Please input a movie name")
print("")
i-=1
pass
else:
movies.append(inputMovie)
i+=1
pass
TA贡献1798条经验 获得超3个赞
range(low,high)low生成一个由从开始并结束于的元素组成的序列high-1。这就是为什么你的i-=1不起作用,因为我正在该列表中迭代。
这里最简单的替代方法是使用循环while。
while i<target:
if something:
#do something
i += 1
TA贡献1851条经验 获得超3个赞
您必须range()
正确设置您的功能。为了减少循环,您可以使用while
循环,或者您可以更改算法并设置for
循环,但现在您可以做的是,如果您可以将范围函数步长值选择为 -1。请尝试检查代码,因为我也和你一样有同样的问题。
添加回答
举报