Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.

1575/14246

20120320-Tue-reverzni.py
   1 #!/usr/bin/python
   2 # -*- coding: utf8 -*-
   3 # Soubor:  20120320-Tue-reverzni.py
   4 # Datum:   20.03.2012 08:22
   5 # Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
   6 # Licence: GNU/GPL 
   7 # Úloha:   kalkulátor s poslkou reverzní notací
   8 #########################################
   9 
  10 import math, readline
  11 
  12 zasobnik = []  # globální proměnná
  13 
  14 def Push(cislo):
  15     zasobnik.append(cislo)
  16 
  17 def Pop():
  18     if len(zasobnik)>0:
  19         return zasobnik.pop()
  20     else:
  21         return None
  22 
  23 def vypisZasobnik():
  24     print zasobnik
  25 
  26 #################################################################
  27 funkce2operandy = None
  28 funkce1operand = None
  29 
  30 def plusObal(a,b):
  31     return a+b
  32 def minusObal(a,b):
  33     return b-a
  34 
  35 def druhaMocninaObal(a):
  36     return a*a
  37 
  38 def vypocet1operand():
  39     operandA = Pop()
  40     if operandA != None:
  41         vysledek = funkce1operand(operandA)
  42         Push(vysledek)
  43         print vysledek
  44     else:
  45         print 'CHYNA: nelze provést',polozka,'-- zásoník je prázdný'
  46 
  47 def vypocet2operandy():
  48     operandA = Pop()
  49     operandB = Pop()
  50     if operandA != None and operandB != None:
  51         vysledek = funkce2operandy(operandA,operandB)
  52         Push(vysledek)
  53         print vysledek
  54     else:
  55         print 'CHYNA: nelze provést',polozka,'-- zásoník je prázdný'
  56         if operandA != None: # poslední číslo v zásobníku tam vrátím
  57             Push(operandA)
  58 
  59 def zpracujRadek(radek):
  60     global funkce2operandy
  61     global funkce1operand
  62     vstupy = radek.split()  # získám pole vstupů
  63     for polozka in vstupy:  # procházím vstupy
  64         if polozka == '+':
  65             funkce2operandy = plusObal
  66             vypocet2operandy()
  67         elif polozka == '-':
  68             funkce2operandy = minusObal
  69             vypocet2operandy()
  70         elif polozka == '^2':
  71             funkce1operand = druhaMocninaObal
  72             vypocet1operand()
  73         elif polozka == 'p':
  74             vypisZasobnik()
  75         else:
  76             try:
  77                 cislo = float(polozka)  # převedu řetězec na číslo
  78                 Push(cislo)
  79             except:
  80                 print 'CHYBA: neznámý operand:', polozka
  81 
  82 
  83 ########################################################
  84 # hlavní programová smyčka
  85 while True:
  86     try:
  87         radek = raw_input('kalkulacka ->> ')
  88         zpracujRadek(radek)
  89     except EOFError:
  90         exit(0)
  91 
`--> stáhnout

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net