2016-03-14 4 views
-2

Я новичок в python, при запуске этого кода он дает мне эту ошибку: «TypeError:« int »объект не итерируется» в строке 14. Пожалуйста, позвольте я знаю свою ошибку.TypeError: 'int' объект не итерируется в python (новичок)

x=int(raw_input()) 
y=int(raw_input()) 
z=int(raw_input()) 
n=int(raw_input()) 
xarr = [ i for i in range(x+1) ] 
yarr = [ j for j in range(y+1) ] 
zarr = [ k for k in range(z+1) ] 
results = [] 
for i in xarr: 
    for j in yarr: 
     for k in zarr: 
      results.append([i,j,k]) 
for w in range(len(results)+1): 
    if (sum(w) != n): 
     results=results.append(sum(w)) 
print results 

, если х = 1, у = 1, г = 1 и п = 2, то результаты = [[0, 0, 0], [0, 0, 1], [0, 1, 0 ], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]] , и я проверяю сумму каждого индекс результатов списка и если (сумма == n), то не добавляйте этот индекс в список результатов

Таким образом, вывод должен быть: [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0], [1, 1, 1]]

+0

Можете ли вы показать код? –

+1

Как и ошибка, 'w' является целым числом, и вы не можете вызывать' sum() 'на целое число; что бы это сумма? Однако неясно, что вы пытаетесь сделать; вы должны указать, что вы ожидаете от результата. –

+0

Итак, каков ваш ожидаемый результат? Индексы тройки, которые суммируются с 'n'? Это будет '[0, 1, 2, 4, 7]' для вашего образца. –

ответ

2

Вы суммированием целое число:

for w in range(len(results)+1): 
    if (sum(w) != n): 

w - целое число от range(len(resultss)+1). Если вы хотите, чтобы суммировать тройки вы произведенные в results, просто цикл непосредственно над результатами:

for w in results: 
    if (sum(w) != n): 

хотя мне не понятно, почему вы зацикливание по длине плюс один. Индексы Python основаны на 0, последний индекс - len(results) - 1, а не len(results).

Вы делаете это сложнее на себе, чем нужно. У Python есть несколько более простых опций, которые вам не хватает здесь.

  • list.append() возвращается None. Вы заменяете results с None здесь:

    results = results.append(sum(w)) 
    

    Удалите results = часть в целом.

    И ты уверен вы хотите объединить (x, y, z) триплеты с sum() результатов в один список?

  • При использовании списка понимания, что не делает ничего, кроме петли и скопировать элементы в список ([i for i in iterable]), просто использовать list() на итерации:

    xarr = list(range(x + 1)) 
    

    Поскольку вы все эту итерация, вы не» t действительно должен сделать это на всех. И редко возникает необходимость конвертировать объекты range() в списки, вы можете напрямую обращаться к отдельным индексам, не делая этого. Просто используйте ваши range() объекты непосредственно:

    xarr = range(x + 1) 
    
  • Вы можете использовать itertools.product() function производить результаты:

    from itertools import product 
    
    results = product(range(x + 1), range(y + 1), range(z + 1)) 
    

    Опять же, нет необходимости преобразовать это в список, так как вы собираетесь перебрать этот ,

  • Если вы хотите добавить индексы триплетов, использовать enumerate() производить те вместе с тройками, так что вы можете проверить сумму, затем добавить индекс в списке результатов:

    indices = [] 
    for i, w in enumerate(results): 
        if (sum(w) != n): 
         indices.append(i) 
    

Вы можете поместить все в один-лайнер после этого, используя список понимание:

from itertools import product 

x = int(raw_input()) 
y = int(raw_input()) 
z = int(raw_input()) 
n = int(raw_input()) 

indices = [i for i, w in enumerate(product(range(x + 1), range(y + 1), range(z + 1))) 
      if sum(w) != n] 
1

Вы не урожденная d использовать диапазон здесь

"range(len(results)+1)" 

Как результат будет список списка [[х, у, г], [х, у, г]].

Попробуйте это:

for w in results: 
    if (sum(w) != n): 
     results=results.append(sum(w)) 

Или так:

for w in range(len(results)+1): 
    if (sum(results[w]) != n): 
+0

Есть некоторые другие серьезные проблемы в этом коде. 'results = results.append()' приведет к 'AttributeError: NoneType не имеет атрибута 'append' ', например. –

Смежные вопросы