【问题标题】:how to change this in a for loop?如何在 for 循环中更改它?
【发布时间】:2019-08-12 03:52:03
【问题描述】:

下面是要转换成for循环的代码:

    num= int(input( 'enter a number' ))
    while num > 0 :
         print(num % 10)
         num/=10

看,for 循环中的范围需要不断更新。但是你不能使用 for 循环来做到这一点。我看起来很容易,但我不知道怎么做。现在下面的代码需要有一个步长值,否则会返回空语句。但我也需要改变 num 值,因为 num 变量不断获得新值。

我试过这样做,但是不行。

num=int(input('enter a number'))
for num in range(num,0):
    print (num % 10)
    num/=10

while 循环给出的前六行输出是:

1
0.1
0.01
0.001
0.0001
1e-05
........

但是如何使用 for 循环显示类似的输出呢?

【问题讨论】:

  • 为什么硬要求它是一个for 循环?它看起来不是使用for 循环的好地方。 for 循环用于迭代预定义的类似容器的结构;这非常适合 while 循环。

标签: python computer-science


【解决方案1】:

Python 中的for 循环不同于您在其他语言(例如 C、C++、Java、Javascript 等)中看到的 for (;;) 形式的 for 循环。Python 不是迭代直到条件为假,而是for 循环迭代直到 StopIteration 被引发(当你到达迭代的“结束”时会发生这种情况)。

Python 中唯一允许您在每次迭代后有条件地停止它的循环结构是 while 循环。

【讨论】:

    【解决方案2】:

    你可以通过(num,0,-1)这种方式使用for循环来反转迭代

    num= int(input( 'enter a number' ))
    for i in range(num,0,-1):
        print(num % 10)
        num/=10
    

    输出:

    enter a number6
    6
    0.6
    0.06
    0.006
    0.0006000000000000001
    6.000000000000001e-05
    

    【讨论】:

      【解决方案3】:

      即使这是一个特殊的要求,也可以实现。因此,在 Python 中,当您使用 range 对象作为迭代器运行 for 循环时,您实际上是在迭代 range 对象的元素,这基本上是一个数字列表。 for 循环一直运行,直到用尽列表中的所有元素。因此,将其转换为 while 循环的一种聪明方法是在每一行中对列表进行变异,这样,您永远不会用完元素。您可以通过if 条件传递while 循环的停止条件。

      num= int(input( 'enter a number' ))
      n = list(range(num+1))
      for i in n :
          print(num % 10)
          num/=10
          n.append(1)
          if num<=0:
              break
      

      【讨论】:

        【解决方案4】:

        你可以试试这个,或者如果它符合你的需要,可以进一步修改它。

        num=input() z=int((0.9)*num) for k in range(num,0,-z): z=int(math.round(0.9*k)) print(z,k) print(k%10)

        【讨论】:

          【解决方案5】:

          您要查找的 for 循环应该基于生成器。像这样的东西会起作用:)

          def myrange(num):
              while num > 10**-15:
                  num /= 10
                  yield num
          
          mynum = float(input(‘specify number:’))
          
          for item in myrange(mynum):
              print(item % 10)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-06-10
            • 1970-01-01
            • 2020-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多