1 / 5
Dec 2019

Hi! błąd wykonania (NZEC) Chyba podaje wyniki dobrze, nie wiem czy to nie problem z zatrzymaniem pętli.
W c++ się chyba dało zrobić while input czy coś podobnego.

tab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
while True:
     x = input()
     x = x.split()
     a = x[0]  #z
     b = int(x[1])  #3
     c = int(x[2])  #6
     if a == 'z':
          tab[b] = c
          x = tab[b]
     elif a == '+':
          c = tab[b] + tab[c]
          print(int(c))
     elif a == '-':
          c = tab[b] - tab[c]
          print(int(c))
     elif a == '*':
          c = tab[b] * tab[c]
          print(int(c))
     elif a == '/':
          c = tab[b] / tab[c]
          print(int(c))
     elif a == '%':
          c = tab[b] % tab[c]
          print(int(c))
  • created

    Dec '19
  • last reply

    Dec '19
  • 4

    replies

  • 777

    views

  • 2

    users

  • 1

    like

  • 2

    links

“Chyba podaje wyniki dobrze”!? skąd taki wniosek - testujesz jakoś swój kod? Bo jeżeli testujesz na konsoli-terinalu używając klawiatury, to jak chcesz skończyć podawanie danych? - zasymulować EOF - poszukaj w necie :wink:

Jeżeli nie testujesz lub testujesz jak wyżej to zainteresuj się przekierowaniami standartowych strumieni z i do plików.

Możesz też testować na ideone wklejając testy do okienka stdin: https://ideone.com/BdJvOY4

Skoro jest błąd, można by zamknąć pętlę w bloku Try: , służy on do wyłapywania systuacji niespodziewanych, wyjątkowych. Czy EOF jest jednak takim wyjątkowym/niespodziewanym zdarzeniem? Od początku wiemy, że wystąpi i się go spodziewamy, oczekujemy.

Można więc, ale to nie jedyny sposób, np tak: https://ideone.com/YhPIhq6

Widzę sporo nadmiarowego i zbędnego kodu w twoim programie - warto abyś postudiował jakiś podręcznik do pythona… .

x = input().split()
a, b, c = x
lub
a, b, c = input().split()
b  = int(b)
c = ......

=============================================

if a == 'z':
          tab[b] = c
          x = tab[b]  <----- po co jest ta linijka!?
 elif a == '+':
          c = tab[b] + tab[c]
          print(int(c))    <------- int jest tu zbędny

albo po prostu:

 elif a == '+':
          print(tab[b] + tab[c])

i wszędzie podobnie

Zamiast if - elif - może lepiej switch?

Dzięki narbej po raz kolejny.
Czytam Python. Wprowadzenie. Wydanie IV - Mark Lutz a to ma 1172 strony. W kolejce Python i Django programowanie aplikacji webowych.
Chociaż chyba Automatic the boring stuff with python będzie lepsze przy połączeniu z w3schools

a, b, c = input().split() 

To jest ciekawe.

 x = tab[b]  <----- po co jest ta linijka!?

W 100% się zgadzam nic to nie robi.

elif a == '+':
      c = tab[b] + tab[c]
      print(int(c))    <------- int jest tu zbędny

Rzeczywiście tutaj int jest zbędny. Tak samo przy odejmowaniu, mnożeniu i modulo. Przy dzieleniu za to musi być by zaokrągliło wynik do liczb całkowitych.

Cieszę się, że się ze mną zgadzasz, chociaż Python nie jest moim ulubionym językiem.
Jednak w pythonie 3, jest dzielenie całkowite (div) i rzeczywiste [mówiąc w skrócie i uproszczeniu]

a / b
i 
a // b <-- tu nie trzeba nic robić.  ;-) - dodawać int

PS
Jest też funkcja divmod np:

divmod(10, 3) = (3, 1)

Tak, nawet przy dzieleniu z // nie trzeba int().
Twoje posty są lepsze od poradników.