• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spoj Suma Python

VPS Starter Arubacloud
0 głosów
1,623 wizyt
pytanie zadane 25 sierpnia 2017 w SPOJ przez ThePatrykOOO Dyskutant (8,380 p.)

Witam, rozwiązauje algorytmy Pythona i mam tutaj mały problem z zadaniem suma http://pl.spoj.com/problems/SUMA/

Input/Output wszystko się zgadza tylko nie wiem gdzie leży błąd:

tutaj kod:

while True:
  x = int(input())
  if -100 < x < 100:
    sum += x

 

3 odpowiedzi

0 głosów
odpowiedź 25 sierpnia 2017 przez Aisekai Nałogowiec (42,190 p.)
Pewnie dlatego, że twoja pętla leci w nieskończoność i się nie kończy.  Musi się zakończyć wtedy, kiedy nie będzie nic na Inpucie. Drugą sprawą jest bezsensowny If. Nie musisz sprawdzać takich rzeczy, bo to są założenia, że na wejściu nie pojawi się liczba mniejsza od -100 i wieksza od 100
0 głosów
odpowiedź 25 sierpnia 2017 przez mokrowski Mędrzec (155,460 p.)
Zakończenie wprowadzania danych to znak EOF (End Of File). Wtedy input() zgłosi wyjątek EOFError. Po wyłapaniu wyjątku możesz opuścić pętlę sumującą i wczytującą dane.
0 głosów
odpowiedź 26 sierpnia 2017 przez Benek Szeryf (90,690 p.)

Masz w kilku miejscach błędy. Po pierwsze nie kontrolujesz jakie znaki wprowadzasz do konsoli. Wbudowana funkcja input() zwraca liczby całkowite. Z opisu funkcji wynika, że można przechwycić wyjątek, jeśli wprowadzi się ciąg znaków, którego nie da się przekonwertować na liczbę całkowitą. Możemy to wykorzystać do detekcji EOF, tak jak napisał @mokrowski. Po drugie @Aisekai słusznie zauważa, że nie ma potrzeby ewaluacji wprowadzanych liczb, bo i tak mają być z zakresu -100 .. 100. Po trzecie nie zapisujesz sum cząstkowych. Po czwarte unikałbym słowa sum, bo Python zawiera już w sobie metody i funkcje o tej nazwie.

sums = []
current_sum = 0

while True:
    try:
        inpt = input()
        current_sum += inpt
        sums += [current_sum]
    except SyntaxError:
        for s in sums:
            print(s)
        exit()
komentarz 26 sierpnia 2017 przez mokrowski Mędrzec (155,460 p.)
Na samym początku uwaga... nie psuj koledze zabawy podając rozwiązanie.

A co do zagadnień merytorycznych...

1. input() czyta ze standardowego wejścia ciąg znaków czyli string https://docs.python.org/3/library/functions.html#input . Trzeba go więc przekonwertować na int co poprawnie zrobił pytający.

2. Jak zobaczysz w powyższym odnośniku, wyjątek rzucany to EOFError a nie SyntaxError.

3. Nie ma żadnej potrzeby gromadzenia danych w kontenerze. Sumę można wyświetlać na bieżąco.
komentarz 26 sierpnia 2017 przez Benek Szeryf (90,690 p.)

Ad.1. Nie trzeba, bo z treści zadania wynika, że wprowadzone zostaną liczby całkowite, więc ten problem zostaje rozwiązany.

Ad.2. Program został napisany pod wersję 2.7, bo autor nie precyzował, którą preferuje: input() dla Python2.7. Nikt mi nie każe pisać w 3.6, bo ma wyższy numerek, a 2.7 jest nadal wspierany do 2020 roku.

Ad.3. Jest taka potrzeba, ponieważ zgodnie z treścią zadania wejście ma wyglądać tak:

6
8
-3

A wyjście tak:

6
14
11

 

komentarz 26 sierpnia 2017 przez mokrowski Mędrzec (155,460 p.)
Sprawdź.
komentarz 26 sierpnia 2017 przez Benek Szeryf (90,690 p.)

Sprawdź.

Nie wiem czy to o to Ci chodzi, ale ta wersja programu nie działa poprawnie:

current_sum = 0

while True:
    try:
        inpt = input()
        current_sum += inpt
        print(current_sum)
    except SyntaxError:
        exit() 

 

komentarz 26 sierpnia 2017 przez mokrowski Mędrzec (155,460 p.)

Ok, pytasz... 

Dla python'a 3 np. to zalicza... 

#!/usr/bin/env python3

current_sum = 0
while True:
    try:
        current_sum += int(input())
        print(current_sum)
    except EOFError:
        break

Dla python'a 2.6 zalicza to:

#!/usr/bin/env python2.6

current_sum = 0
while True:
    try:
        current_sum += int(raw_input())
        print(current_sum)
    except EOFError:
        break

 

komentarz 26 sierpnia 2017 przez Benek Szeryf (90,690 p.)

Ok, nigdy nie używałem SPOJ-a, więc byłem przekonany, że format musi wyglądać dokładnie tak, jak jest w treści zadania: http://pl.spoj.com/problems/SUMA/. Poza tym dla wersji 2.7 program zwraca ValueError. Rzeczywiście się wykonuje, no ale...

1
komentarz 26 sierpnia 2017 przez mokrowski Mędrzec (155,460 p.)
Nie sądzę by 2.7 zwracał. Sprawdzałem. Podaj warunki gdy tak się wg Ciebie dzieje. Koniec pliku lub strumienia w Gnu/Linux symulujesz na konsoli przez <Ctrl+d> a w Windows <Ctrl+z> w cmd.
komentarz 26 sierpnia 2017 przez Benek Szeryf (90,690 p.)
Tak, potwierdzam, wszystko się zgadza.

Podobne pytania

0 głosów
1 odpowiedź 186 wizyt
pytanie zadane 5 lipca 2023 w SPOJ przez lada_4455 Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 510 wizyt
pytanie zadane 16 sierpnia 2021 w SPOJ przez rtworek Nowicjusz (160 p.)
0 głosów
1 odpowiedź 302 wizyt
pytanie zadane 24 czerwca 2021 w SPOJ przez Dron Początkujący (280 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...