# coding=utf-8 import server mod = server.problems.load_language('python', 'sl') id = 224 name = 'Kalkulator v inverzni poljski notaciji' slug = 'Kalkulator v inverzni poljski notaciji' description = '''\
V inverzni poljski ali postfiksni notaciji ne potrebujemo oklepajev:
računska operacija sledi številoma in se vedno izvede takoj ter zamenja predhodni števili in operacijo z rezultatom operacije.
Poglejmo si računanje (3 + 5) * 2 - 10 * (2 - 1)
ali postfiksno 3 5 + 2 * 10 2 1 - * -
:
3 5 +
; izvede se seštevanje, tri elemente zamenja rezultat 8, beremo dalje. 8 2 *
; rezultat je 16, beremo dalje.16 10 2 1 -
; rezultat 1, beremo dalje.16 10 1 *
; rezultat 10, beremo dalje.16 10 -
; rezultat 6, beremo dalje.6
; vhoda je konec zato se se računanje ustavi.Izraz: 3 5 + Rezultat: 8 Izraz: 16 5 % Rezultat: 1 Izraz: 16 5 / Rezultat: 3 Izraz: 3 3 3 + + Rezultat: 9 Izraz: 3 5 + 2 * 10 2 1 - * - Rezultat: 6 Izraz:''' stack = ['''\
Uporabi sklad, saj prebrano operacijo vedno izvajamo na zadnjih dveh številih.
''', '''\
Sklad je seznam, kjer se elementi vedno dodajajo in brišejo na koncu seznama.
V Pythonovih seznamih imamo za ta namen metodi append
in
pop
.
Niz razbijemo na besede z metodo split
>>> izraz = '3 5 + 2 * 10 2' >>> izraz.split() ['3', '5', '+', '2', '*', '10', '2']''', '''\
Zanimivost, ki je ne potrebujete za to nalogo: če splitu damo znak v argument, bo razbil niz po tem znaku:
>>> b = 'brina,burja,miha;maja,maks' >>> b.split(",") >>> ['brina', 'burja', 'miha;maja', 'maks']'''] plan = [stack, '''\
for zanka čez vse elemente (števila, operacije): če je element operacija: Iz sklada preberi zadnji dve vrednosti, izračunaj in postavi nazaj na sklad drugače postavi število na sklad''', split] hint = { 'final_hint': ['''\
Program je pravilen!