试图运行for循环,被告知'float'对象不可迭代

Posted

技术标签:

【中文标题】试图运行for循环,被告知\'float\'对象不可迭代【英文标题】:Trying to run for-loop, being told that 'float' object is not iterable试图运行for循环,被告知'float'对象不可迭代 【发布时间】:2014-01-04 16:30:25 【问题描述】:

我正在尝试进行一些分形图像处理,但在运行我的代码时,我被告知

Traceback (most recent call last):
    File "all_the_maps.py", line 72, in <module>
        (xh, yh) = Hf(xf,yf,r)
TypeError: 'float' object is not iterable

相关代码块是

(xf,yf) = (0,0)
(xh,yh) = (0,0)

for n in xrange(N):
    r = random.randint(1,10000)
    (xf,yf) = F(xf,yf,r)
    (xh,yh) = Hf(xh,yh,r)
    h[int(round(xh)),int(round(yh))] = f[int(round(xf)),
        int(round(yf))]

完整的文件在http://pastebin.com/kbJD3BK9(它很长,我不太擅长python,所以读起来可能会很痛苦)。

我看过其他人收到此错误,似乎他们正在迭代无法迭代的东西(例如 for i in 7: 而不是 for i in range(7): )。但是,这似乎不是我做错了什么,我真的不知道该怎么做。如果有人可以提供帮助,将不胜感激。

编辑:Hf 定义为:

def Hf(x,y,r):
    if r <= 10000*a*b:
        return 0.5*x, 0.5*y
    elif r <= 10000*b:
        return 0.5*x + 255.0
    elif r <= 10000*(1 - a + a*b):
        return 0.5*x + 255.0, 0.5*y + 255.0
    else:
        return 0.5*x, 0.5*y + 255.0

【问题讨论】:

你能把函数Hf发在这里吗? 【参考方案1】:

你的第二个案例

elif r <= 10000*b:
    return 0.5*x + 255.0

不会像其他人一样返回元组。

澄清一下 - 在您的主程序中,在(xh,yh) = Hf(xh,yh,r) 行中,您期望右侧有两个项目。如果r &lt;= 10000*bHf 将只返回一个浮点数,而不是其他情况返回的元组。

【讨论】:

以上是关于试图运行for循环,被告知'float'对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

这些 for 循环有啥区别?

如何使用for循环计算阶乘并使用答案打印计算?

如何仅使用 for 循环创建这个精确的 5x5 矩阵?

以编程方式确定是不是可以在对象上运行 for 循环的最佳解决方案

for循环与int,float,str数据类型的使用

我们在删除镜像的时候被告知有容器正在使用,可是容器已经被停止了