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

Stos SPOJ - Python

Object Storage Arubacloud
0 głosów
169 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 (344,860 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 (344,860 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 (344,860 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ź 112 wizyt
pytanie zadane 18 września 2021 w C i C++ przez Dron Początkujący (280 p.)
0 głosów
1 odpowiedź 282 wizyt
pytanie zadane 30 stycznia 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
1 odpowiedź 224 wizyt
pytanie zadane 4 sierpnia 2020 w C i C++ przez Arek04 Użytkownik (700 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...