Cześć uczę się pythona. Dzisiaj kodowałem pierwszy program, jest to prosty kalkulator. Co o nim sądzicie? Chętnie przyjmę sugestie i podpowiedzi co zmienić.
print("...:::Prosty Kalkulator:::...")
x = int(input("Insert the first number:"))
y = int(input("Insert the second number:"))
z = input("What type of operator you want to use(+,-,*,/,**)")
operators = {"+": x+y, "-": x-y, "": xy, "/": x/y, "": xy}
if z == "+":
print(operators["+"])
elif z == "-":
print(operators["-"])
elif z == "":
print(operators[""])
elif z == "/":
print(operators["/"])
elif z == "":
print(operators[""])
else:
print("Error: operator not found(make sure you used the designated operators)")
print("...:::Prosty Kalkulator:::...")
x = int(input("Insert the first number:"))
y = int(input("Insert the second number:"))
z = input("What type of operator you want to use(+,-,*,/,**)")
operators = {"+": x+y, "-": x-y, "*": x*y, "/": x/y, "**": x**y}
if z == "+":
print(operators["+"])
elif z == "-":
print(operators["-"])
elif z == "*":
print(operators["*"])
elif z == "/":
print(operators["/"])
elif z == "**":
print(operators["**"])
else:
print("Error: operator not found(make sure you used the designated operators)")
- Skoro masz słownik, to wystarczy sprawdzić czy
z
się w nim znajduje tj.if z in operators
-
z
to kiepska nazwa dla pobranego operatora - Może to wiesz, ale i tak warto zaznaczyć: w swoim słowniku trzymasz obliczone już wartości, chociaż potrzebujesz tylko jedną z nich. Teraz nie jest to problemem, ale jeśli przyjdą jakieś zmyślne logarytmy i funkcje trygonometryczne... Jeśli trzymałbyś funkcje (sugeruję lambdy, żeby kod Ci nie spuchnął) to miałbyś możliwość obliczania tych rzeczy sopiero gdy będą potrzebne
Chodzi ci o to w punkcie 3 żeby zdefiniować funkcje dla operatorów ?
funcs = {
"+": (lambda: x+y)
# etc
}
Nie rozumiem czemu lepsze jest tu zastosowanie lambdy. Możesz mi wytłumaczyć
Ponieważ obliczasz rzeczy których nie użyjesz, i.e. przy większej ilości obliczeń może to spowolnić program o całe rzędy wielkości.
Przykład z funkcjami na sterydach:
import operator as op
from functools import reduce
user_input = input()
tokens = user_input.split()
assert(len(tokens) == 3)
operator = tokens[1]
args = map(int, [tokens[0], tokens[2]])
reducers = {
'+': op.add,
'-': op.sub,
'*': op.mul,
'/': op.truediv
}
assert(operator in reducers)
result = reduce(reducers[operator], args)
print("{} = {}".format(user_input, result))
Szczerze to nie widzę tego w tych przykładach funkcji. Ale rozumiem że funkcja lambda po prostu wykonuje obliczenia dopiero gdy jest wzywana tak?
prosty kalkulator w pythonie - przyjmuje na wejsciu cale dzialanie, nie tylko 2+2
ale i bardziej skomplikowane rzeczy jak np. 2*2+3*3-2*(5-3)
print input()
w pythonie 3:
print(eval(input()))
W sumie nie pomyślałem o tym na wieczór to zmienię i wrzucę nową wersję