Найти - Пользователи
Полная версия: for...in непонятно как работает
Начало » Python для новичков » for...in непонятно как работает
1
Lork
Приветствую всех!
Очередная моя программулина в процессе изучения Питона:

 '''(16) Дан одномерный массив числовых значений, насчитывающий N элементов.
Добавить к элементам массива такой новый элемент, чтобы сумма элемен-
тов с положительными значениями стала бы равна модулю суммы элемен-
тов с отрицательными значениями.'''
import math
a=[1, -6, -5, 8, 4, -2, -8, 0, 2, 6, 9, -4, 5] # Исходный
p=0
m=0
for i in a:
    if a[i]>0:
        p=p+a[i] # Положительные (сумма)
    elif a[i]<0:
        m=m+int(math.fabs(a[i])) # Отрицательные (сумма модулей)
    else:
        continue
print('p=',p)
print('m=',m)
a.append(m-p)
print('a new=',a)

Соответственно, вывод результата:
 p= 21
m= 27
a new= [1, -6, -5, 8, 4, -2, -8, 0, 2, 6, 9, -4, 5, 6]

Всё хорошо, только при ручном счёте получается, что сумма положительных p= 35, а отрицательных m= -25. Помогите, пжлста, разобраться, а то крыша уже ехать начинает.
wallet
Замените в цикле
 a[i]
на просто
  i
wi34rd
 #
else:
    continue
Здесь ни к чему.
marvellik
Lork
Всё хорошо, только при ручном счёте получается, что сумма положительных p= 35, а отрицательных m= -25
так оно и есть значить к массиву надо добавить -10 тогда сумма положительных 35 будет равна сумме отрицательных -35 то есть по модулю это 35
 a=[1, -6, -5, 8, 4, -2, -8, 0, 2, 6, 9, -4, 5]
b = a.copy()
c = [b.pop(i) for i in reversed(range(len(a))) if b[i] < 0]
positive,negative = sum(b),abs(sum(c))
if positive > negative:
    a.append((positive-negative)* -1)
elif positive < negative:
    a.append(negative-positive)
print(a)
wi34rd
 #
a = [1, -6, -5, 8, 4, -2, -8, 0, 2, 6, 9, -4, 5]
positive = sum(x for x in a if x > 0)
negative = -sum(x for x in a if x < 0)
if (negative != positive):
    a.append(negative - positive)
print(a)
Lork
wallet
Замените в цикле a на i

Заработало, спасибо. Нескромный вопрос: а чем в данном случае отличается применение ai-тое и i в цикле? Просветите, пжлста, или же пните в нужном направлении.

З.Ы. Так же спасибо всем остальным откликнувшимся - как дойду до sum, буду рассматривать, в том числе, и на ваших примерах.
wi34rd
Lork, прочитайте, как работает цикл for. Он берет элемент из списка, не его номер, и использует его в вычислениях в своем теле, попытки изменить его приведут к ошибке. Если вам нужен и элемент и его номер нужно воспользоваться функцией enumerate().
Lork
wi34rd
Lork, прочитайте, как работает цикл for. Он берет элемент из списка, не его номер, и использует его в вычислениях в своем теле, попытки изменить его приведут к ошибке. Если вам нужен и элемент и его номер нужно воспользоваться функцией enumerate().

Сенкс. Попробую ещё раз проштудировать - может, упустил чего…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB