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。請嘗試檢查代碼,因為我也和你一樣有同樣的問題。
添加回答
舉報