[英]Python decrement the variable inside for loop
我將我的 java 代碼轉換為 python 代碼,以及如何在 python 中減少 for 循環內的變量? 如果它在 if 語句中,我嘗試將索引減少 1,但顯然我不能這樣做。 有沒有其他方法可以在 for 循環中減少 i ?
Java代碼:
for(int i = 1; i <= 3; i++)
{
System.out.print("Enter Movie " + i + " of " + 3 + " : ");
String inputMovie = sc.nextLine();
if (inputMovie.equals(""))
{
System.out.println("Please input a movie name.");
System.out.println("");
i--;
}
else
movies.offer("'"+inputMovie+"'");
}
蟒蛇代碼:
for i in range(1,4):
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)
pass
輸出:好吧,如果我們查看輸出,它仍然在遞增而不是遞減 i
Enter Movie 1 of 3 :
Please input a movie name
Enter Movie 2 of 3 :
Please input a movie name
Enter Movie 3 of 3 :
Please input a movie name
Python 不允許您在for
循環中更改迭代器。 一旦循環的下一次迭代到來,迭代器就會成為可迭代對象的下一個值。
這也是因為range
行為不像真正的 Java 類for
循環。 相反,它會不斷生成范圍內的數字(您可以通過在 Python 解釋器中鍵入list(range(10))
來查看這一點,它將生成一個從 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 代碼相同,因為我只是將三個指令從 Java for
循環移動到它們的位置。 不需要通知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
塊,因此它僅在輸入電影名稱時運行。
你應該使用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
指令無關緊要,你可以省略
range(low,high)
生成一個由從low
開始到high-1
結束的元素組成的序列。 這就是為什么您的i-=1
不起作用,因為我正在該列表中進行迭代。
這里最簡單的替代方法是使用while
循環。
while i<target:
if something:
#do something
i += 1
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
您必須正確設置range()
函數。 為了減少循環,您可以使用while
循環,或者您可以更改算法並設置for
循環,但現在您可以做的是將范圍函數步長值選擇為 -1。 請嘗試檢查代碼,因為我也和你一樣有同樣的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.