Форум сайта python.su
0
Приветствую всех!
Очередная моя программулина в процессе изучения Питона:
'''(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]
Офлайн
Замените в цикле
a[i]
i
Отредактировано wallet (Март 1, 2017 00:18:11)
Офлайн
2
# else: continue
Отредактировано wi34rd (Март 1, 2017 04:31:11)
Офлайн
73
Lorkтак оно и есть значить к массиву надо добавить -10 тогда сумма положительных 35 будет равна сумме отрицательных -35 то есть по модулю это 35
Всё хорошо, только при ручном счёте получается, что сумма положительных p= 35, а отрицательных m= -25
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)
Офлайн
2
# 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)
Офлайн
0
wallet
Замените в цикле a на i
Отредактировано Lork (Март 1, 2017 19:44:57)
Офлайн
2
Lork, прочитайте, как работает цикл for. Он берет элемент из списка, не его номер, и использует его в вычислениях в своем теле, попытки изменить его приведут к ошибке. Если вам нужен и элемент и его номер нужно воспользоваться функцией enumerate().
Офлайн
0
wi34rd
Lork, прочитайте, как работает цикл for. Он берет элемент из списка, не его номер, и использует его в вычислениях в своем теле, попытки изменить его приведут к ошибке. Если вам нужен и элемент и его номер нужно воспользоваться функцией enumerate().
Офлайн