2016-05-09 3 views
-2

Я использую python и некоторые дуговые модули (которые, как мне кажется, не важны для моего вопроса), запускают код, содержащий три итерации (цикл с двумя меньшими петлями внутри). Мой код выглядит так:Python второй цикл не обнаружен

file = r"C:Directory\File" 
cursor = arcpy.SearchCursor(file,fields) 
A = range(1,270) 
os.chdir ('C:\Directory') 
book = xlwt.Workbook() 
sheet1 = book.add_sheet('Sheet1',cell_overwrite_ok = True) 
for a in A: 
tot = 0 
result = 0 
for row in cursor: 
    if row.getValue('Firstfield') == a: 
     tot = tot + row.getValue('secondfield') 
     print (tot) 
    for row in cursor: 
     print row.getValue('GTYS_Branc') 
     if row.getValue('GTYS_Branc') == a: 
      result= result + row.getValue(Field1) * ((row.getValue(Field2))/tot) 
    sheet1.write((branch-1),0,finalIIIprob) 
    sheet1.write((a-1),1,result) 
    book.save('Excel.xls') 

Код работает, но не дает мне результатов, которые я хочу. Я заметил, что проблема в том, что она практически игнорирует второй внутренний цикл и каждую итерацию первого внутреннего цикла после первого. В чем проблема?

+1

Проблема заключается в том, что после того, как вы полностью выполнили свой «курсор», как и в своем внутреннем цикле, ничего не осталось, чтобы перебрать, поэтому внешний цикл немедленно прекращается в следующий раз, когда он пытается получить следующую строку. Он уже сдал все строки и находится в конце. – kindall

+0

Сделайте переменную разной в двух циклах. Например, первый цикл 'for row0 в курсоре', второй цикл' for row1 в курсоре'. – tom10

+0

Хорошо, спасибо, я сделал это так, и теперь он повторяется и внутри. Проблема в том, что теперь я получаю сообщение об ошибке во время вычисления результата, в частности, в result = result + ... (я изменил вопрос, чтобы показать эту деталь более точно) с объектом «TypeError:» «float» не является вызываемым «Что может быть? – Patapunfate

ответ

0

Возможно, проблема заключается в том, что вы выполняете итерирование значений в «массиве», но там ничего нет, кроме одного числа, которое является A, а не всех чисел от 0 до A, что вам нужно сделать, это использовать диапазон Функция: попробуйте для i в диапазоне (A):