【问题标题】:Incorporate a for loop into integer division将 for 循环合并到整数除法中
【发布时间】:2016-11-28 16:16:37
【问题描述】:

我想使用整数除法将一个数字除以另一个数字,直到我的结果为零,并跟踪我做了多少次除法。但是,每当我尝试合并一个 for 循环时,我都会不断收到一个“int”对象不可迭代错误。我没有 for 循环的代码是:

x = 4
y = 2
numofdiv = 0
if x // y != 0:
    x // y
    numofdiv += 1

关于如何合并 for 循环或任何其他方法来解决此问题的任何建议?

【问题讨论】:

  • 使用while 循环会更聪明
  • 该代码永远不会停止,因为您永远不会修改 x 或 y。但是,如果您在编写其他代码时需要帮助,您应该发布。
  • 是的,对不起,误读了。
  • 是否应该将x 更新为x/y?您能否显示您遇到错误的 for 循环代码?
  • 您所说的“使用整数除法将一个数字除以另一个数字直到我的结果为零”是什么意思?对相同的数字重复操作会得到相同的结果。你的意思是用余数替换其中一个数字,就像在欧几里得算法中一样?或者使用商,还是别的什么?

标签: python python-3.x integer-division


【解决方案1】:

有很多方法,但这里有两种简单的方法:

x=4
y=2
numdiv = 0
while True:
    if x//y > 0:
        x= x//y
        numdiv +=1
    else:
        break
print (numdiv)

x=4
y=2
numdiv = 0
while x//y > 0:
        x= x//y
        numdiv +=1
print (numdiv)

【讨论】:

    【解决方案2】:

    这是一种方法:

    x = 4
    y = 2
    numofdiv = 0
    while x != 0:
        numofdiv += 1
        x = x // y
    
    print(numofdiv)
    

    【讨论】:

      【解决方案3】:

      使用while循环检查是否满足条件,如果条件不满足则停止:

      x = 4
      y = 2
      numOfDiv = 0
      while x > 0:
          x = x // y
          numOfDiv += 1
      print("number of divison:{}".format(numOfDiv))
      

      创建一个生成器函数,它为我们提供一个值,如果不满足条件,它将停止生成,使用相同的 while 循环。然后我们可以从生成器进行迭代,直到使用 for 循环耗尽所有值。

      x = 4
      y = 2
      
      def int_div(x,y):
        while x > 0:
          x,y = x // y, y 
          yield x
      
      for numOfDiv, value in enumerate(int_div(x,y),1):
        pass
      print("number of divison:{}".format(numOfDiv))
      

      在列表推导中使用相同的生成器来查找我们想要的所有值,然后打印列表的大小,因为这是它进行了多少次划分。

      x = 4
      y = 2
      
      def int_div(x,y):
        while x > 0:
          x,y = x // y, y 
          yield x
      
      a = [i for i in int_div(x,y)]
      print("number of divison:{}".format(len(a)))
      

      【讨论】:

        【解决方案4】:

        正如所指出的,while 循环可能更合适。 for 循环版本可能如下所示:

        x=4
        y=2
        divisions = 0
        max_divisions = 1000
        
        for i in range(max_division):
            if x//y > 0:
                x = x//y
                divisions +=1
            else:
                break
        print(divisions)
        

        【讨论】:

          猜你喜欢
          • 2020-09-05
          • 2023-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-26
          • 2021-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多