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

Stos SPOJ - Python

VPS Starter Arubacloud
0 głosów
188 wizyt
pytanie zadane 14 września 2023 w Python przez Tomasz M. Nowicjusz (150 p.)

Hej, na wstępie powiem że przeczytałem posty odnoście tego zadania, ale wszystkie są w języku C++ i nie pomagają mi znaleźć błędu.

Link to zadania: https://pl.spoj.com/problems/STOS/

Mój kod zwraca poprawny wynik dla przykładowego zestawu, ale SPOJ dalej go nie akceptuje. (Wydaje mi się że nie trzeba zapamiętywać całej sekwencji "Wyjścia" i zwracać jej na końcu, ale można tak jak robię:
"Wejście"->"Wyjście"->"Wejście" itd.

Kod jest tak krótki że wrzucam go całego, bo i tak nie działa, a nie wiem gdzie jest błąd.

Może jest w stanie ktoś mi podpowiedzieć gdzie popełniłem błąd?

while True:
    addOrPop = input()

    if addOrPop == '+':
        num = input()
        if len(tab) < 10:
            tab.append(num)
            print(':)')
        else:
            print(':(')
    elif addOrPop == '-':
        if len(tab) > 0:
            print(tab.pop())
        else:
            print(':(')
    else:
        break

 

1 odpowiedź

+1 głos
odpowiedź 14 września 2023 przez adrian17 Ekspert (348,220 p.)
wybrane 14 września 2023 przez Tomasz M.
 
Najlepsza

Po pierwsze, brakuje stworzenia zmiennej `tab` - zgaduję że po prostu zapomniałeś przekopiować tutaj?

Po drugie, wcale nie obsługujesz poprawnie pierwszego wejścia.

    else:
        break

Nikt nie powiedział "wejście kończy się linią inną niż + lub -". Poza tym faktem, to reszta logiki wygląda poprawnie.

Na przyszłość zamiast wklepywać wejście z ręki, możesz np przekazać je z pliku na stdin używając `python program.py < wejscie.txt`.

komentarz 14 września 2023 przez Tomasz M. Nowicjusz (150 p.)

1) Tak nie skopiowałem tab = [] z samej góry

2) Uznałem że break przy "pustym" inpucie to jedyne sensowne zakończenie, bo inaczej to nigdy nie będzie końca

3) Wpisując każdy jeden znak i enter wyjście wciąż wydaje mi się że działa tak jak w przykładzie, tyle że dostaje to w wersji:

wejście: +
wejście: 1
wyjście: :)
wejście: +
wejście: 2
wyjście: :)

4) Przeczytałem kolejny już raz polecenie i wymyśliłem że jak rozumiem oni chcą żeby nie było EOL po "+", a dopiero po numerku, właśnie próbuje znaleźć jakiś sposób żeby dało się wpisać jako "jeden zestaw" np. takie coś:

+
1

(sprawdziłem list(map(str, input().split())), ale to działa dla "+ spacja 1", ale już nie dla "+ enter 1")

komentarz 14 września 2023 przez adrian17 Ekspert (348,220 p.)
Nie, za bardzo kombinujesz. Spróbuj się dowiedzieć jak ogólnie w Pythonie radzić sobie z "nieznanej długości wejściem". Są dwa sposoby, jeden używający wciąż input(), a drugi w ogóle coś innego.
komentarz 14 września 2023 przez Tomasz M. Nowicjusz (150 p.)
edycja 14 września 2023 przez Tomasz M.
Zarzuciłem pomysł z tym "jednym zestawem" bo w odpowiedziach z C++ też wpisywali osobno i tak się już domyślałem że coś z tym zakończeniem musze zrobić, ale nie mogłem znaleźć.

Dzięki wielkie za poradę, znalazłem sposób z try i except i DZIAŁA! :)

Poszukam sobie jeszcze tego z input() :)  edit:-> zadziałało też przy użyciu sys.stdin
komentarz 14 września 2023 przez adrian17 Ekspert (348,220 p.)
Zgadza się, jeden sposób to try-except wokół input()a, a drugi to iteracja po stdinie :)

Podobne pytania

0 głosów
1 odpowiedź 120 wizyt
pytanie zadane 18 września 2021 w C i C++ przez Dron Początkujący (280 p.)
0 głosów
1 odpowiedź 305 wizyt
pytanie zadane 30 stycznia 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 4 sierpnia 2020 w C i C++ przez Arek04 Użytkownik (700 p.)

92,843 zapytań

141,784 odpowiedzi

320,859 komentarzy

62,177 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...