Cambio Valuta in Python
Descrizione
Questo progetto è un convertitore di valute basato su Python che utilizza dati in tempo reale sui tassi di cambio forniti dalla Frankfurter API. Il programma recupera gli ultimi tassi di cambio disponibili, mostra i codici delle valute supportate e permette all’utente di scegliere la valuta di partenza, quella di arrivo e l’importo da convertire. Include una semplice validazione per garantire che vengano accettate solo valute esistenti e importi positivi, rendendo l’interazione chiara e affidabile. Con la sua struttura semplice e l’uso di dati reali da API, questo progetto è un’ottima introduzione alle richieste HTTP, alla gestione di dati JSON, alla validazione dell’input utente e ai calcoli finanziari di base in Python. Può essere utilizzato come base per strumenti di viaggio, applicazioni di budgeting, dashboard finanziarie, utility per tassi di cambio o altri progetti software basati su API.
CODICE:
#-- https://nemiatools.com --#
import requests # Importazione libreria HTTP
url = "https://api.frankfurter.app/latest" # URL dell'API
# Get available currencies
response = requests.get(url) # Manda richiesta GET
response.raise_for_status() # Controlla lo stato della richiesta
all_currencies = response.json()["rates"] # Ottieni i tassi di cambio delle valute.
all_currencies["EUR"] = 1.0 # Aggiungi EUR al dizionario
print("Currency Names:", ", ".join(sorted(all_currencies)), "\n") # Stampa a schermo le valute
while True: # Ripete il programma
while True: # Input dell'utente per la valuta input
currency_in = input("Enter current currency: ").upper() # legge la valuta input
if currency_in in all_currencies: # Controlla che la valuta esista
break # Esce dal loop
print("Currency not found. Try again.\n") # Mostra in caso l'errore
while True: # Input dell'utente per la valuta output
currency_out = input("Enter final currency: ").upper() # legge la valuta input
if currency_out in all_currencies: # Controlla che la valuta esista
break # Esce dal loop
print("Currency not found. Try again.\n") # Mostra in caso l'errore
while True: # Input dell'utente per l'importo
amount_in = float(
input(f"Enter amount to exchange in {currency_in}: ")
) # legge l'importo
if amount_in > 0: # Controlla che sia positivo
break # Esce dal loop
print("Invalid amount.\n") # Mostra in caso l'errore
data = requests.get(url, params={"from": currency_in}).json() # Ottieni dati sui tassi di cambio.
amount_out = data["rates"][currency_out] * amount_in # Converte l'importo
print(f"Final amount: {amount_out:.2f} {currency_out}\n") # Stampa a schermo il risultato
Come funziona:
Il programma inizia con import requests, che importa la libreria Requests. Questa libreria viene usata per inviare richieste HTTP, permettendo al programma di comunicare con un servizio online e ricevere dati aggiornati sulle valute.
L’indirizzo dell’API è memorizzato in url = "https://api.frankfurter.app/latest". Questo rende il codice più pulito, perché lo stesso URL può essere riutilizzato ogni volta che il programma deve richiedere informazioni sui tassi di cambio.
La riga response = requests.get(url) invia una richiesta GET all’API. In parole semplici, requests.get() chiede al server di restituire i dati da quell’URL. Il risultato viene salvato dentro response. Poi, response.raise_for_status() controlla se la richiesta è andata a buon fine. Se c’è un errore, il programma si interrompe invece di continuare con dati mancanti o non validi.
L’istruzione all_currencies = response.json()["rates"] converte la risposta dell’API da JSON in dati Python e seleziona la sezione "rates", dove sono memorizzati i tassi di cambio. La riga all_currencies["EUR"] = 1.0 aggiunge manualmente EUR perché l’API usa EUR come valuta base, quindi non è inclusa nella propria lista dei tassi. Poiché 1 EUR equivale a 1 EUR, il suo valore viene impostato a 1.0.
Il programma mostra le valute disponibili con print("Currency Names:", ", ".join(sorted(all_currencies)), "\n"). Qui, sorted(all_currencies) ordina i codici delle valute in ordine alfabetico, mentre ", ".join(...) li unisce in una singola riga leggibile.
Il convertitore principale funziona dentro while True:, che mantiene il programma attivo così l’utente può effettuare più conversioni. Gli input currency_in = input("Enter current currency: ").upper() e currency_out = input("Enter final currency: ").upper() leggono le valute selezionate e le convertono in maiuscolo, così input come usd o Usd funzionano correttamente.
Le condizioni if currency_in in all_currencies: e if currency_out in all_currencies: verificano che le valute inserite esistano realmente nei dati dell’API. Se una valuta non viene trovata, il programma mostra un messaggio di errore e richiede un nuovo input.
L’importo viene letto con amount_in = float(input(f"Enter amount to exchange in {currency_in}: ")). La funzione float() converte l’input dell’utente in un numero decimale, mentre la stringa f"..." inserisce direttamente la valuta selezionata nel messaggio. La condizione if amount_in > 0: garantisce che vengano accettati solo valori positivi.
La riga data = requests.get(url, params={"from": currency_in}).json() invia un’altra richiesta all’API, questa volta usando params={"from": currency_in}. Questo indica all’API quale valuta usare come base. La parte .json() converte immediatamente la risposta in dati Python.
La conversione viene calcolata con amount_out = data["rates"][currency_out] * amount_in, che moltiplica il tasso di cambio selezionato per l’importo inserito dall’utente. Infine, print(f"Final amount: {amount_out:.2f} {currency_out}\n") stampa il risultato. Il formato .2f indica semplicemente due cifre decimali.
Questo progetto è una buona introduzione alle API, alle richieste HTTP, ai dati JSON, alla validazione dell’input, ai cicli e alla conversione di valuta di base in Python.