将for循环合并到整数除法中

Incorporate a for loop into integer division

我想用整数除法将一个数除以另一个数,直到我的结果为零,并记录我做了多少次除法。但是,每当我尝试合并 for 循环时,我总是收到 'int' object not iterable 错误。我没有 for 循环的代码是:

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

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

这是一种方法:

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

print(numofdiv)

有很多方法,但这里有 2 个简单的方法:

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)

使用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)))

如前所述,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)