5 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
Python 不允許您在for循環(huán)中更改迭代器。一旦循環(huán)的下一次迭代到來(lái),迭代器將成為可迭代對(duì)象的下一個(gè)值。
這也是因?yàn)閞ange其行為與實(shí)際的類似 Java 的for循環(huán)不同。相反,它會(huì)不斷生成該范圍內(nèi)的數(shù)字(您可以通過(guò)list(range(10))在 Python 解釋器中輸入來(lái)看到這一點(diǎn),它會(huì)生成一個(gè)從 0 到 9 的數(shù)字列表。
如果你想修改迭代器,你應(yīng)該使用循環(huán)while來(lái)代替:
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
這應(yīng)該與您的 Java 代碼執(zhí)行相同的操作,因?yàn)槲抑皇菍⑷齻€(gè)指令從 Javafor循環(huán)移動(dòng)到它們的位置。pass不需要通知,因?yàn)樗菬o(wú)效的聲明。
為了優(yōu)化,我想說(shuō)的是,您實(shí)際上并不需要遞減迭代器,只需避免遞增它即可。我將此解決方案與原始答案分開,因?yàn)樗c您的原始設(shè)計(jì)有很大偏差:
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,以便僅在輸入電影名稱時(shí)才運(yùn)行它。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
你應(yīng)該使用一個(gè)while聲明
“不幸的是”for循環(huán)將保留“內(nèi)存”并在每次迭代時(shí)重新分配給下一個(gè)值
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指令無(wú)關(guān)緊要,您可以省略它

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
Python 中的 for 循環(huán)更像是 for-each。因此,無(wú)論循環(huán)中的更改/更新如何,循環(huán)值(i)都會(huì)更新為下一個(gè)值。
更好的方法是使用 while 循環(huán)。
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貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
range(low,high)low生成一個(gè)由從開始并結(jié)束于的元素組成的序列high-1。這就是為什么你的i-=1不起作用,因?yàn)槲艺谠摿斜碇械?/p>
這里最簡(jiǎn)單的替代方法是使用循環(huán)while。
while i<target:
if something:
#do something
i += 1

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
您必須range()
正確設(shè)置您的功能。為了減少循環(huán),您可以使用while
循環(huán),或者您可以更改算法并設(shè)置for
循環(huán),但現(xiàn)在您可以做的是,如果您可以將范圍函數(shù)步長(zhǎng)值選擇為 -1。請(qǐng)嘗試檢查代碼,因?yàn)槲乙埠湍阋粯佑型瑯拥膯?wèn)題。
添加回答
舉報(bào)