generated from spseol/PRG-kalkulacka
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkalkulacka.py
92 lines (80 loc) · 2.31 KB
/
kalkulacka.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/env python3
# Soubor: kalkulacka.py
# Datum: 28.03.2022 08:31
# Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
############################################################################
import math
zasobnik = []
def operace(token):
if token.upper() == "Q":
exit()
if token.upper() == "PI":
zasobnik.append(math.pi)
if token == "+":
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(a + b)
if token == "-":
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(a - b)
if token == "*":
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(a * b)
if token == "**":
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(a ** b)
if token == "sin":
a = zasobnik.pop()
zasobnik.append(math.sin(a))
if token == "cos":
a = zasobnik.pop()
zasobnik.append(math.cos(a))
dva_operandy = {}
dva_operandy["+"] = lambda a, b: a + b
dva_operandy["-"] = lambda a, b: a - b
dva_operandy["*"] = lambda a, b: a * b
dva_operandy["/"] = lambda a, b: a / b
dva_operandy["//"] = lambda a, b: a // b
dva_operandy["**"] = lambda a, b: a ** b
jeden_operand = {}
jeden_operand["sin"] = math.sin
jeden_operand["cos"] = math.cos
jeden_operand["tg"] = math.tan
jeden_operand["tan"] = math.tan
def operace(token):
if token.upper() == "Q":
exit()
if token.upper() == "PI":
zasobnik.append(math.pi)
if token.upper() == "SW":
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(b)
zasobnik.append(a)
if token in dva_operandy.keys():
if len(zasobnik) >= 2:
b = zasobnik.pop()
a = zasobnik.pop()
zasobnik.append(dva_operandy[token](a, b))
else:
print("Nemám dost operandů!!!")
if token in jeden_operand.keys():
if len(zasobnik) >= 1:
a = zasobnik.pop()
zasobnik.append(jeden_operand[token](a))
else:
print("Nemám dost operandů!!!")
def zpracuj(radek):
tokeny = radek.split()
for token in tokeny:
try:
zasobnik.append(float(token))
except ValueError:
operace(token)
# čtu vstup
while True:
radek = input(zasobnik.__repr__() + ">>> ")
zpracuj(radek)