Jak napisać funkcję, która wczyta jako argument listę i na wyjściu poda wynik w postaci sumy częściowej? np. gdy wpiszemy 1,2,3 to ma wyświetlić w wyniku 1,3,6.
# -*- coding: utf-8 -*-
import sys
def dodawaj(lista):
wynik = 0
for liczba in lista:
wynik += liczba
sys.stdout.write(str(wynik) + " ")
return
dodawaj([1, 2, 3])
a jak zrobić, żeby dodawało dowolną ilość liczb, zebym mógł wpisywać, np. po przecinku, ile chcę tych liczb?
olaa napisał(a):
a jak zrobić, żeby dodawało dowolną ilość liczb, zebym mógł wpisywać, np. po przecinku, ile chcę tych liczb?
Dodaje dowolną ilość liczb, lista to nie tablica z c i podobnych, nie ma z góry ustalonej ilości ustalonych elementów. ta linia for liczba in lista:
za zmienną liczba będzie za każdym razem podstawiać kolejny element lista, aż dojdzie do jej końca. Tak więc wszystkie zostaną przerobione, niezależnie od tego ile ich wyślesz.
w takim razie co mam zmienić w tym dodawaj([1,2,3])?
olaa napisał(a):
w takim razie co mam zmienić w tym dodawaj([1,2,3])?
To akurat wywołanie funkcji z podanym przez ciebie przykładem, na czymś trzeba sprawdzić czy gdzieś literówki NIE MA
Wersja tego kodu bardziej pythonowa a nie niskopoziomowa (ale też wolniejsza!):
def dodaj(data):
for end in range(1, len(data)+1):
print(sum(data[:end]))
from itertools import accumulate
def partial_sums(xs):
return list(accumulate(xs))
print(partial_sums([1, 2, 3]))
Shalom napisał(a):
Wersja tego kodu bardziej pythonowa a nie niskopoziomowa (ale też wolniejsza!):
def dodaj(data):
for end in range(1, len(data)+1):
print(sum(data[:end]))
Dziękuję wszystkim, natomiast ten program wygląda na najbliższy moim umiejętnościom, lecz jak mam zrobić, aby program po włączeniu prosił o podanie listy, z której będzie tworzył sumy częściowe?
@Olaa nie rozumiem pytania.
http://docs.python.org/2.7/library/functions.html#raw_input
Chcę, żeby** program pobrał listę **składającą się z dowolnych liczb. Pewnie coś z tym raw_input co mi podałeś, lecz nie wiem jak to użyć, żeby uzyskać to, co chcę.
Ech, żal.pl, samo zebranie o gotowce.
lista = map(int, raw_input("Podaj liczby ").split())
lub z list comprehension:
lista = [int(liczba) for liczba in raw_input("Podaj liczby ").split()]
a dlaczego wyskakuje mi, że raw_input nie jest zdefiniowane?
Bo nie raczyłaś napisać w JAKIM pythonie to piszesz. 2 czy 3. Poza tym jesteś po prostu lewniwa, bo rzut oka w dokumentacje powiedziałby ci jak w wersji 3 nazywa się ta funkcja.
olaa napisał(a):
a dlaczego wyskakuje mi, że raw_input nie jest zdefiniowane?
Mała podpowiedź: wersja Pythona. I to by było chyba na tyle jeśli o mnie chodzi w tym temacie.
mam jeszcze pytanie co do pierwszego podanego przez Was programu, co oznacza w nim składnia
sys.stdout.write(str(wynik) + " ")
i czy można to zapisac jakoś inaczej(czyt. prościej) nie korzystając z tego sys ?
To po prostu szybsza wersja print-a.