将 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