...
Som nevnt over i forklaringen til pushOperand, så kan det være et poeng at all tilgang til en datastruktur som operands-lista skjer gjennom definerte funksjoner. Dette gir litt bedre oversikt over hvor i koden operands leses eller endres, og gjør feilsøking enklere. Det gjenstår nå bare én setning i while-løkka som leser eller endrer operands, hvilken? Finn den du, og definer og bruk en passende funksjon!
Hele rpncalc3.py
Og her er for ordensskyld hele koden:
Code Block | ||
---|---|---|
| ||
# rpncalc3.py operands = [] def isOperand(token): try: float(token) return True except ValueError: return False def printOperands(): print(operands) def popOperands(n): size = len(operands) if size >= n: result = operands[size - n : size] global operands operands = operands[0 : size - n] return result else: return None def pushOperand(operand): operands.append(operand) def plus(): ops = popOperands(2) if not (ops is None): pushOperand(ops[0] + ops[1]) def minus(): ops = popOperands(2) if not (ops is None): pushOperand(ops[0] - ops[1]) # the functions above handles all access to the operand stack # the code below has no references to the operand stack, only to the functions above def main(): while (True): printOperands() token = raw_input(" > ") if isOperand(token): operand = float(token) pushOperand(operand) elif token == "exit": break elif token == "+": plus() elif token == "-": minus() else: print("Unsupported operator: " + token) print("program exited") main() |