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

Posted

技术标签:

【中文标题】将 for 循环合并到整数除法中【英文标题】:Incorporate a for loop into integer division 【发布时间】: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 循环代码? 您所说的“使用整数除法将一个数字除以另一个数字直到我的结果为零”是什么意思?对相同的数字重复操作会得到相同的结果。你的意思是用余数替换其中一个数字,就像在欧几里得算法中一样?或者使用商,还是别的什么? 【参考方案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)

【讨论】:

以上是关于将 for 循环合并到整数除法中的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何使用 for 循环合并两个列表,如 zip

如何将 For 循环结果转换为数组,然后在 C# 中计算结果数组的整数?

在 for 循环中添加整数并打印总数

将通过 FOR 循环函数输出的多个数据帧合并为一个数据帧

使用作为字符串一部分的整数迭代 for 循环

循环小数——模拟除法