почему код не суммирует только положительные числа? - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь суммировать только положительные числа в следующем списке, но мой код этого не делает, любые комментарии о том, какая строка неправильная, были бы замечательными !:

given_list3 = [5,4,4,3,1,-2,-3,-5]
total5 = 0
p = 0

for p in given_list3: 
    if given_list3[p] > 0:
        total5 += given_list3[p]
        p += 1
print(total5)

Я получая на выходе 12, когда, конечно, должно быть 17.

Ответы [ 4 ]

1 голос
/ 09 мая 2020

При использовании 'p in' вы получаете все p в списке. Это не индекс в списке. Если вы хотите использовать индекс в списке, используйте 'while'

given_list3 = [5,4,4,3,1,-2,-3,-5]
total5 = 0
p = 0

while p < len(given_list3):
    if given_list3[p] > 0:
        total5 += given_list3[p]
    p += 1

print(total5)
0 голосов
/ 09 мая 2020

Вы использовали p в качестве индекса, тогда как p служил значением или элементом. (вы только что ясно показали нам, что знаете c ++ или java lol). вот что вы должны были сделать

given_list3 = [5,4,4,3,1,-2,-3,-5]
total5 = 0
for p in given_list3:
    if p > 0:
        total5 += p
print(total5)
0 голосов
/ 09 мая 2020

Вы можете сделать

sum([i for i in given_list3 if i > 0])

или

sum(filter(lambda x: x > 0, given_list3))

оба они выведут

17

Строки в вашем коде, которые не позволяют вам агрегировать номера:

for p in given_list3: 
    if given_list3[p] > 0: 

, вы можете сделать

for p in given_list3: 
    if p > 0: 

или

for p in len(given_list3): 
    if given_list3[p] > 0: 
0 голосов
/ 09 мая 2020

На основе значений l oop

при итерации по list переменная l oop хранит одно значение из списка за раз, а не индекс списка. Следующее будет печатать все значения, а не их индексы

for p in given_list3:
    print(p)

Итак, что вам нужно (переименование p в value)

for value in given_list3: 
    if value > 0:
        total5 += value

на основе индекса l oop

Если вы хотите получить доступ к значениям, используя их индекс, например given_list3[i], вам нужно сделать i, чтобы принимать все значения от 0 до длины списка, вы можете сделать это с помощью range

for i in range(len(given_list3)): 
    if given_list3[i] > 0:
        total5 += given_list3[i]
...