2013-12-17 1 views
0

Я пытаюсь сделать некоторые фрактальной обработки изображений, и при запуске мой код, я получаю сказалПопытка запустить для цикла, говорят, что «поплавок» объект не итерацию

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 (это довольно долго, и я не очень хорошо питона, так что он может быть болезненным для чтения).

Я посмотрел на других людей, которые получили эту ошибку, и кажется, что они повторяют что-то, что невозможно повторить (например, для i в 7: вместо i в диапазоне (7):) , Однако, похоже, это не то, что я делаю неправильно, и я действительно не знаю, что делать. Если бы кто-нибудь мог помочь, это было бы по достоинству оценено.

EDIT: 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 
+0

Можете ли вы разместить функцию 'Hf' здесь? – aIKid

ответ

2

Ваш второй случай

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

не возвращает кортеж, как другие.

Чтобы уточнить - в вашей основной программе, в строке (xh,yh) = Hf(xh,yh,r), вы ожидаете двух предметов с правой стороны. Если r <= 10000*b, Hf вернет только один поплавок, а не кортеж, который возвратит другие случаи.