簡體   English   中英

Python遞減for循環內的變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM