Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2017 23:53:10

Lork
Зарегистрирован: 2017-01-08
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

for...in непонятно как работает

Приветствую всех!
Очередная моя программулина в процессе изучения Питона:

 '''(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. Помогите, пжлста, разобраться, а то крыша уже ехать начинает.

Офлайн

#2 Март 1, 2017 00:17:00

wallet
Зарегистрирован: 2016-02-21
Сообщения: 50
Репутация: +  2  -
Профиль  

for...in непонятно как работает

Замените в цикле

 a[i]
на просто
  i

Отредактировано wallet (Март 1, 2017 00:18:11)

Офлайн

#3 Март 1, 2017 04:30:50

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

for...in непонятно как работает

 #
else:
    continue
Здесь ни к чему.

Отредактировано wi34rd (Март 1, 2017 04:31:11)

Офлайн

#4 Март 1, 2017 09:56:11

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

for...in непонятно как работает

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)

Офлайн

#5 Март 1, 2017 11:02:21

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

for...in непонятно как работает

 #
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)

Офлайн

#6 Март 1, 2017 19:42:48

Lork
Зарегистрирован: 2017-01-08
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

for...in непонятно как работает

wallet
Замените в цикле a на i

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

З.Ы. Так же спасибо всем остальным откликнувшимся - как дойду до sum, буду рассматривать, в том числе, и на ваших примерах.

Отредактировано Lork (Март 1, 2017 19:44:57)

Офлайн

#7 Март 1, 2017 23:49:40

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

for...in непонятно как работает

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

Офлайн

#8 Март 2, 2017 00:15:29

Lork
Зарегистрирован: 2017-01-08
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

for...in непонятно как работает

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

Сенкс. Попробую ещё раз проштудировать - может, упустил чего…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version