Python在for循环中减少变量

我将 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

输出:如果我们查看输出,它仍然在递增而不是递减 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


慕桂英3389331
浏览 176回答 5
5回答

慕慕森

Python 不允许您在for循环中更改迭代器。一旦循环的下一次迭代到来,迭代器将成为可迭代对象的下一个值。这也是因为range其行为与实际的类似 Java 的for循环不同。相反,它会不断生成该范围内的数字(您可以通过list(range(10))在 Python 解释器中输入来看到这一点,它会生成一个从 0 到 9 的数字列表。如果你想修改迭代器,你应该使用循环while来代替:i = 1while i <= 3:&nbsp; &nbsp; inputMovie=input("Enter Movie " + str(i) + " of " + str(3) + " : ")&nbsp; &nbsp; if inputMovie=="":&nbsp; &nbsp; &nbsp; &nbsp; print("Please input a movie name")&nbsp; &nbsp; &nbsp; &nbsp; print("")&nbsp; &nbsp; &nbsp; &nbsp; i-=1&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; movies.append(inputMovie)&nbsp; &nbsp; i = i + 1这应该与您的 Java 代码执行相同的操作,因为我只是将三个指令从 Javafor循环移动到它们的位置。pass不需要通知,因为它是无效的声明。为了优化,我想说的是,您实际上并不需要递减迭代器,只需避免递增它即可。我将此解决方案与原始答案分开,因为它与您的原始设计有很大偏差:i = 1while i <= 3:&nbsp; &nbsp; inputMovie=input("Enter Movie " + str(i) + " of " + str(3) + " : ")&nbsp; &nbsp; if inputMovie=="":&nbsp; &nbsp; &nbsp; &nbsp; print("Please input a movie name")&nbsp; &nbsp; &nbsp; &nbsp; print("")&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; movies.append(inputMovie)&nbsp; &nbsp; &nbsp; &nbsp; i = i + 1我所做的就是删除减量并将增量推入块else,以便仅在输入电影名称时才运行它。

狐的传说

你应该使用一个while声明“不幸的是”for循环将保留“内存”并在每次迭代时重新分配给下一个值i = 1while 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指令无关紧要,您可以省略它

慕姐8265434

Python 中的 for 循环更像是 for-each。因此,无论循环中的更改/更新如何,循环值(i)都会更新为下一个值。更好的方法是使用 while 循环。i = 1while i <= 3:&nbsp; &nbsp; inputMovie = input("Enter Movie " + str(i) + " of " + str(3) + " : ")&nbsp; &nbsp; if inputMovie=="":&nbsp; &nbsp; &nbsp; &nbsp; print("Please input a movie name")&nbsp; &nbsp; &nbsp; &nbsp; print("")&nbsp; &nbsp; &nbsp; &nbsp; i-=1&nbsp; &nbsp; &nbsp; &nbsp; pass&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; movies.append(inputMovie)&nbsp; &nbsp; &nbsp; &nbsp; i+=1&nbsp; &nbsp; pass

呼如林

range(low,high)low生成一个由从开始并结束于的元素组成的序列high-1。这就是为什么你的i-=1不起作用,因为我正在该列表中迭代。这里最简单的替代方法是使用循环while。while i<target:&nbsp; &nbsp; if something:&nbsp; &nbsp; &nbsp; &nbsp; #do something&nbsp; &nbsp; &nbsp; &nbsp; i += 1

皈依舞

您必须range()正确设置您的功能。为了减少循环,您可以使用while循环,或者您可以更改算法并设置for循环,但现在您可以做的是,如果您可以将范围函数步长值选择为 -1。请尝试检查代码,因为我也和你一样有同样的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python