LINUX.ORG.RU

Вывести последний элемент списка

 , ,


0

1

Доброго времени суток ,есть набор цифр , он суммируется , и нужно вывести результат , цифры хранятся в словаре :

a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
     print(a)
то что я наваял вполне работает , но есть одно НО , нужно из этого всего вывести только число 30 а не все что он плюсует , прогу вашей помощи,ибо не хватает что то мне опыта )))


man sum

sum(int(v) for v in ("5", "5", "5", "5", "5", "5"))
fang90 ★★★★★ ()

У тебя a печатается на каждой итерации цикла for. А надо только после того как цикл завершится. Просто вытащи print(a) из тела цикла

MrClon ★★★★★ ()
Последнее исправление: MrClon (всего исправлений: 1)

Не приходи с такими вопросами, здесь не детский сад.

a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
else:
     print(a)

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Davidov

Чтобы принт не сработал без цикла случайно.
То есть незачем.

Goury ★★★★★ ()

Я конкретно затупил(((((((

ваши примеры очень отличные, но не учел одного момент , и это печально , смотрите : задача была такая , я в цикле из файла извлекаю цифры , и добавляю их в список , в итоге получается что то такое :

[1]
[1]

в итоге я снова перебирал это через фор , с надеждой то я это смогу суммировать , но оказалось что нет (, в чем я затупил , как исправить подскажите ?

echo_ ()

print(sum(map(int, [«5», «5», «5», «5», «5», «5»])))

Deleted ()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от Davidov

Чтобы логически связать print(a) с циклом. Потому что по смыслу это всё единый блок кода. И нет, если просто написать принт после цикла без ветки else, то единый блок кода будет существовать только в твоей голове, а так мы указываем это средствами ЯП.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от anonymous

Ну так я погуглил. Но сначала я гуглил в уяндексе, а потом в гугле. Первый не помог, второй помог. Ты лучше обрати свой сарказм в сторону ОП, которому «опыта» не хватает осилить, как работает цикл.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

Жуть какая. for-else — синтаксический костыль. Для логических связей последовательности действий есть функции.

staseg ★★★★★ ()
Ответ на: комментарий от staseg

for-else — синтаксический костыль.

Есть еще и while-else :-).

Для логических связей последовательности действий есть функции.

Функция не спасёт. Поясняю. Есть код:

a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
print(a)
Далее добавляются некоторые другие строки:
a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
a = a*a
...
print(a)
print(a) также печатает a, но изначально печаталось содержимое переменной после цикла, а теперь переменная еще раз изменилась, то есть поменялся смысл строки кода, потому что изменился мир. Если же print(a) находится в ветке else, такого не произойдет, потому что даже постороннему человеку визуально видно, что строка относится к циклу, и ее не нужно отрывать от него. Такая фича, прямо скажем, нужна не часто, но иногда удобна.

Virtuos86 ★★★★★ ()

Еще бы неплохо подразобраться со структурами данных. Например 5 это число, а «5» это строка. Зачем ты хранишь строки и переводишь их в числа?

А еще то что ты назвал словарем на самом деле является списком.

redixin ★★★★ ()
Ответ на: комментарий от redixin

Он пояснил, что читает файл построчно.

А еще то что ты назвал словарем на самом деле является списком.

А в действительности это массив и не имеет отношения к структуре данных «список».

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Singularity

вы правы , но есть одно но

этот код :

a=0
for line in ["5", "5", "5", "5", "5", "5"]:
     a = a + int(line)
print(a)

вполне отлично работает пока вместо [«5», «5», «5», «5», «5», «5»]: не грузить данные из файла , даже если файл имеет просто вот такое наполнение :

10
10

то

for line in open("file","r"):
    a=0
    for line in [line]:
        a = a + int(line)
print(a)

работать не будет (слепил моментально , куча ошибок,чисто что бы смсл понять)гуглить я умею , но я нашем гугле я ничего интересного не нашел , покрайней мере я так думаю,а английский знаю так себе ...по этмоу и написал сюда....

echo_ ()
Ответ на: комментарий от Virtuos86

А в действительности это массив и не имеет отношения к структуре данных «список».

Это список. Что у него под капотом не имеет значения.

redixin ★★★★ ()

Ты по питону книжки-то читал хоть какие-то?

awesomebuntu ()
Ответ на: комментарий от Virtuos86

print(a) также печатает a, но изначально печаталось содержимое переменной после цикла, а теперь переменная еще раз изменилась, то есть поменялся смысл строки кода, потому что изменился мир. Если же print(a) находится в ветке else, такого не произойдет, потому что даже постороннему человеку визуально видно, что строка относится к циклу, и ее не нужно отрывать от него. Такая фича, прямо скажем, нужна не часто, но иногда удобна.

О_О это чтоб не читая исходник можно было куда угодно воткнуть что угодно?

NextGenenration ★★ ()
Ответ на: комментарий от NextGenenration

Ребзя, если вы не понимаете, то просто забейте. Ветка else в циклах — это пост-хук, код, который должен быть вызван сразу после цикла. Ну надо кодеру иногда такое, вам не надо — идите дальше.

Кстати есть еще try/except/else, вот ведь дураки разрабы, понапихали куда ни попадя, да?)

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

У вас в голове интересно. С хрен знает каких времен перфокарт вывод итогов цикла за пределами блока цикла был последним, что было не так.

Shadow ★★★★★ ()
Ответ на: комментарий от Virtuos86

Ветка else в циклах — это пост-хук, код, который должен быть вызван сразу после цикла.

Я об этом методе узнал вперве. До этого всегда писал после while и всё работало. А тут какая-то ерунда. Какие преимущества даёт данный подход, кроме большего количества строк? Допустим теперь можно после while воткнуть код и надеятся что ничего не сломается. Но имхо перед добавлением нужно хоть немного перечитать код, иначе сломаешь карточный домик целикомю

NextGenenration ★★ ()
Ответ на: комментарий от Davidov

А зачем здесь else?

Потому что сад не детский

Siado ★★★★★ ()
Ответ на: комментарий от NextGenenration

NextGenenration

Я об этом методе узнал вперве. До этого всегда писал после while и всё работало. А тут какая-то ерунда. Какие преимущества даёт данный подход, кроме большего количества строк? Допустим теперь можно после while воткнуть код и надеятся что ничего не сломается. Но имхо перед добавлением нужно хоть немного перечитать код, иначе сломаешь карточный домик целикомю

большего количества строк

Целая лишняя строка, батюшки.

Какие преимущества даёт данный подход

Ну вот реальное преимущество:

>>> for i in True, True, True, False:
...     if i is False:
...         break
... else:
...     print("all 'i' is True")
... 
>>> 
Если цикл был прерван инструкцией break, ветка else будет проигнорирована.

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

Целая лишняя строка, батюшки.

Мой код в некоторых местах получается несколько короче на половину-три строки, в некоторых случаях получается ужать его ещё сильнее, на столько что некоторые разворачивают его обратно(вставляя некоторые конструкции). Это при том что я не ставлю цели уменьшения количества символов как такавой.

Ну вот реальное преимущество:

Пожалуй в данном случае есть выигрыш в одну строку по сравнению с вынесением кода в отдельную функцию. Однако если это вынести в отдельную функцию, то это станет бессмысленным.

NextGenenration ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.