ÖVNINGSUPPGIFT

Uppgift 8 - Växelkursen

Försök själv först. Ledtrådar och facit finns längre ner – helt utan inloggning.


Valutakurserna nedan är fasta övningsvärden, inte aktuella marknadskurser. Avgiften ska redovisas separat; det omräknade beloppet visas före avgift.

Nyckelord: If-satsen, else-satsen

Skapa ett program som beräknar växelkursen

Skriv ett program som hjälper ett växlingskontor att omvandla valuta mellan valutorna: 

  • SEK (Svenska kronor)
  • EUR (Euro)
  • USD (Amerikansk dollar) 
  • GBP (Brittisk pund)

Växlingskontoret vill tjäna lite pengar (såklart) på att erbjuda den här tjänsten och ska ta en avgift på 0,25%, som ska avrundas till närmaste heltal i den valutan som kunden vill växla från. 

Din uppgift blir att skriva ett program som:

  • Frågar användaren vilken valuta som det ska omvandlas från och till 
  • Skriv ut resultatet
  • Skriv ut avgiften för valutaomvandlingen

Exempelvis:

“Ange vilken valuta du vill omvandla från: “ 

“Hur stor summa vill du omvandla: “

“Ange vilken valuta du vill omvandla till: “

Du kan använda följande växelkurser när du löser problemet:

SEK - EUR0,098
SEK - USD0,12
SEK - GBP0,084
EUR - USD1,19
EUR - GBP0,85
USD - GBP0,72

Valutakurser. Exempelvis: 1 SEK är värd 0,098 Euro eller 1 EUR är värd 0,85 GBP.

Alla valutakurser ska vara konstanta under programmets gång.

Programmet ska varna och stänga av programmet om användaren försöker växla från en valuta till samma valuta, eller om användaren ger en felaktig inmatning till programmet.

Ledtråd 1

Tjuvkika inte för tidigt, försök en gång till innan du fortsätter med ledtrådarna ;-)

Ledtråd 2

Spara alla valutakurser som variabler. För att konvertera en valuta åt motsats kan du enkelt använda 1/valutan. Exempelvis:

SEK2EUR = 0.098

# Konvertera till EUR2SEK
EUR2SEK = 1/SEK2EUR
Ledtråd 3

Använd funktionen input() för att ta emot en inmatning från användaren. Glöm inte bort att inputen alltid är en string.

Svar

Ett exempel på hur man löser uppgiften. Observera att det finns flera rätta svar. I koden finns kommentarer som man kan läsa för att förstå tankegången.

import math

# Definera alla valutakurser enligt tabell
SEK2EUR = 0.098
SEK2USD = 0.12
SEK2GBP = 0.084
EUR2USD = 1.19
EUR2GBP = 0.85
USD2GBP = 0.72
EUR2SEK = 1 / SEK2EUR
USD2SEK = 1 / SEK2USD
USD2EUR = 1 / EUR2USD
GBP2SEK = 1 / SEK2GBP
GBP2EUR = 1 / EUR2GBP
GBP2USD = 1 / USD2GBP
FEE = 0.0025


# Fråga efter vilken valuta du vill omvandla från
currencyFrom = input("Ange vilken valuta du vill omvandla från (SEK, EUR, USD, GBP): ")

# Kontrollera att användaren har skrivit en godkänd valuta.
if (not (currencyFrom == "SEK" or currencyFrom == "EUR" or currencyFrom == "USD" or currencyFrom == "GBP")) :
    # Avsluta programmet om inmatningen var felaktig
    print("Felaktig inmatning!")
    exit()

# Fråga efter vilken valuta du vill omvandla till
currencyTo = input("Ange vilken valuta du vill omvandla till (SEK, EUR, USD, GBP): ")

# Kontrollera att användaren har skrivit en godkänd valuta.
if (not (currencyTo == "SEK" or currencyTo == "EUR" or currencyTo == "USD" or currencyTo == "GBP")) :
    # Avsluta programmet om inmatningen var felaktig
    print("Felaktig inmatning!")
    exit()

# Fråga efter hur mycket användaren vill växla
try:
    amount = float(input("Hur mycket vill du växla?: "))
except ValueError:
    print("Felaktigt belopp!")
    raise SystemExit

if not math.isfinite(amount) or amount <= 0:
    print("Beloppet måste vara positivt och ändligt!")
    raise SystemExit

# Bestäm växlingsfaktor
currency = 0
if (currencyFrom == "SEK" and currencyTo == "EUR"):
    currency = SEK2EUR
elif(currencyFrom == "SEK" and currencyTo == "USD"):
    currency = SEK2USD
elif(currencyFrom == "SEK" and currencyTo == "GBP"):
    currency = SEK2GBP
elif(currencyFrom == "EUR" and currencyTo == "USD"):
    currency = EUR2USD
elif(currencyFrom == "EUR" and currencyTo == "GBP"):
    currency = EUR2GBP
elif(currencyFrom == "USD" and currencyTo == "GBP"):
    currency = USD2GBP
elif(currencyFrom == "EUR" and currencyTo == "SEK"):
    currency = EUR2SEK
elif(currencyFrom == "USD" and currencyTo == "SEK"):
    currency = USD2SEK
elif(currencyFrom == "GBP" and currencyTo == "SEK"):
    currency = GBP2SEK
elif(currencyFrom == "USD" and currencyTo == "EUR"):
    currency = USD2EUR
elif(currencyFrom == "GBP" and currencyTo == "EUR"):
    currency = GBP2EUR
elif(currencyFrom == "GBP" and currencyTo == "USD"):
    currency = GBP2USD
else:
    print("Du kan inte växla från och till samma valuta!")
    exit()

# Avrunda avgiften till närmaste heltal. Python avrundar halva steg till jämnt. 
cost = round(FEE * amount)

# Räkna ut och skriv ut växlingskursen. 
print(f"{amount} {currencyFrom} motsvarar {amount * currency} {currencyTo} vilket ger en växelavgift på {cost} {currencyFrom}")