2013-03-20 4 views
-3

Не мог бы кто-нибудь сказать мне, почему этот цикл игнорирует if? (Редактирование: это весь код - функция, которая возвращает число.)Python игнорирует мой, если

time_now = time() 
number = np.loadtxt("11.txt", unpack=True, dtype='int64') 
lenx = len(number[0,:]) 
leny = len(number[:,0]) 
lennum = 4 
#prods = np.zeros(lenx*leny*4).reshape(lenx,leny,4) 
maxnum = 0 

for m in range(0,leny): 
    for n in range(0,lenx): 
     prods = lookaround(n,m) 

     if prods > maxnum: 
      maxnum = prods 

time_end = time(); 

elapsed = time_end - time_now 

print(prods, elapsed) 
+6

Существует не хватает информации здесь – YXD

+0

Стоит отметить, что если вы ищете для максимального значения, вы, вероятно, хотите использовать [ 'макс()'] (http://docs.python.org/3.3/library/functions.html#max). –

+0

Почему вы просто не используете 'max (lookaround (n, m) для m в диапазоне (leny) для n в диапазоне (lenx))'? – Blender

ответ

2

Может быть, потому, что prods всегда меньше или равно maxnum? какое значение вы использовали для инициализации maxnum? он должен быть установлен на очень небольшое число перед петлями, скажем maxnum = float("-inf"). Другая возможность заключается в том, что lookaround возвращает неправильное значение, unit-test - это функция.

+0

Я сделал, вывод дает много положительных чисел. Ничто ниже 0 – Coolcrab

+0

Вы не на самом деле _using_ 'maxnum' после циклов. Может быть, последняя строка должна быть такой? 'print (maxnum, истек)' ' –

0

Вы можете просто написать это:

from itertools import product 

time_now = time() 

number = np.loadtxt("11.txt", unpack=True, dtype='int64') 
lenx = len(number[0,:]) 
leny = len(number[:,0]) 

maxnum = max(lookaround(n, m) for n, m in product(range(lenx), range(leny))) 

time_end = time();  
elapsed = time_end - time_now 

print(maxnum, elapsed) # <== maxnum not prods 
Смежные вопросы