Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Excerpt

Dette kode-eksemplet implementerer en enkel kalkulator og illustrerer ulike aspekter ved (kjøring av) Python-programmer.

...

, og er første del av RPNCalc-eksemplet.

rpncalc1.py

Nedenfor vises en enkel Python-implementasjon, med forklaringer til høyre.

Code Block
languagepython
# rpncalc1.py
operands = []

while (True):
    print(operands)
    token = raw_input(" > ")
    if token[0].isdigit():
        operand = float(token)
        operands.append(operand)
    elif token == "exit":
        break
    elif token == "+":
        operands.append(operands.pop() + operands.pop())
    elif token == "-":
        operands.append(operands.pop() - operands.pop())
    else:
        print("Unsupported operator: " + token)
print("program exited")

#-tegnet angir at resten av linja er en kommentar. Akkurat denne brukes her for å angir hvor det er lurt å legge koden.

Tilordningen initialiserer operands-variablene Et Python-program utføres ovenifra og nedeover, og derfor vil et program typisk først deklarere viktige variabler før hovedlogikken kommer. Her tilordnes operands-variablen til en tom liste.

while-løkka (se while-kontrollstrukturen) brukes for å gjenta en blokk med kode, inntil en bestemt betingelse er oppfylt. Her er betingelsen True, dvs. alltid sann, så løkke vil aldri stoppe, med mindre den avbrytes innenfra! Legg forøvrig merke til hvordan en i Python bruker innrykk (mellomrom først på linja) for å angi hvilke setninger som hører til blokken.

print skriver ut operand-stacken, så brukeren ser hva kalkulator-tilstanden er.

raw_input brukes deretter for å lese inn en "noe" fra brukeren, som er er ment å være enten en operand eller en operator.

Vi må først avgjøre om det brukeren has skrevet inn er en operand eller operator. Her bruker vi en enkel test på om første tegn av token, angitt med token[0], er et siffer. Hvis det er tilfellet så konverteres token til et desimaltall med float-funksjonen, som så legges til operands-lista med append, altså bakerst, så det fungerer som en stack.

Dersom token ikke er et tall, så sjekkes det om programmet skal avsluttes, og bruker i så fall break for å bryte ut av løkka. Videre håndteres hver operator i sin egen elif-gren (se if-kontrollstrukturen). Her har vi begrenset oss til pluss (+) og minus (-).

For hver av disse operatorene så tas to operander av lista med pop, operasjonen utføres og resultatet legges tilbake med append.

Den siste else-grenen sier fra til brukeren at token ikke ble gjenkjent som operator.

...