亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python在for循環中減少變量

Python在for循環中減少變量

慕桂英3389331 2023-12-12 21:09:49
我將 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+"'");        }Python代碼: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輸出:如果我們查看輸出,它仍然在遞增而不是遞減 iEnter Movie 1 of 3 :Please input a movie nameEnter Movie 2 of 3 :Please input a movie nameEnter Movie 3 of 3 :Please input a movie name
查看完整描述

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,以便僅在輸入電影名稱時才運行它。


查看完整回答
反對 回復 2023-12-12
?
狐的傳說

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指令無關緊要,您可以省略它

查看完整回答
反對 回復 2023-12-12
?
慕姐8265434

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


查看完整回答
反對 回復 2023-12-12
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

range(low,high)low生成一個由從開始并結束于的元素組成的序列high-1。這就是為什么你的i-=1不起作用,因為我正在該列表中迭代。

這里最簡單的替代方法是使用循環while。


while i<target:

    if something:

        #do something

        i += 1


查看完整回答
反對 回復 2023-12-12
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您必須range()正確設置您的功能。為了減少循環,您可以使用while循環,或者您可以更改算法并設置for循環,但現在您可以做的是,如果您可以將范圍函數步長值選擇為 -1。請嘗試檢查代碼,因為我也和你一樣有同樣的問題。



查看完整回答
反對 回復 2023-12-12
  • 5 回答
  • 0 關注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號