为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信