Wprowadzanie danych w PYTHON

0

Musze zrobić programik, który będzie sumował wprowadzane liczby aż do wprowadzenia zera. Zrobiłem takie coś:

while True:
    try:
        suma = 0
        while True:
            a = int(raw_input())
            if a==0:
                print suma
            else:
               suma = suma+a
    except EOFError: break 

Program jeśli chodzi o wynik działa dobrze. Ale wygląda to tak,że dane wejściowe są każda w nowej lini, a mają byc w jednej lini - po spacjach. Czyli mam tak:

1
2
0
3 

a powinno byc tak:


1 2 0
3

Nie umiem tego zrobić.. Próbowałem na listach np:
suma = sum( [int(x) for x in a.split()] )
ale wtedy warunek się nie sprawdzał. Mogłem wpisywac liczby po spacji jednak żeby zakonczyc zliczanie musiałem nacisnąc enter, a miało sie zliczać po 0. Pomoże ktoś?

1

Nie możesz po prostu zrobić fora po tych numerach, co masz w liście [int(x) for x in a.split()].

Edit: Kto powiedział, że python ma być czytelny:
print (lambda x: sum(x[:x.index(0)]))([int(x) for x in raw_input().split()])

0

Mam dopiero perwsze zajęcia z Pythona za sobą, wiec wątpie żeby rozwiązanie było aż tak skomplikowane i nie czytelne ;P

0

Nie znam się za bardzo na pythonie, ale moja wersja:

print reduce(lambda a,b: a + b, [int(x) for x in raw_input().split()], 0)

Co jest ma być odpowiednikiem Rubinowego:

puts gets.split.map(&:to_i).reduce(&:+)

Ogólnie zalecam zapoznanie się z funkcją fold

0
while True:
       suma = 0
       try: 
           dane = [int(x) for x in raw_input().split()]
       except EOFError: 
           break
       for x in dane:
            if x!=0:
                suma += x
            else:
                break
      print suma 

To jest rozwiązanie mojego problemu ;) Zdecydowanie bardziej czytelne. :) Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0