python tutorial

Python è un linguaggio di programmazione semplice, e allo stesso tempo molto evoluto.

Abbiamo scritto numerosi articoli su Python, ed è giunto il momento di fare esercitazione.

In questo articolo vediamo alcuni esercizi Python, spiegando passo passo la soluzione.

Estimated reading time: 4 minuti

Vediamo insieme il testo di alcuni esercizi e la soluzione.

Esercizio Reverser

Scrivi una funzione a cui passerai come parametro una stringa, e che manderà in output, a video, una versione inversa (al contrario) della stessa stringa. Ad esempio “abcd” diventerà “dcba”.

Suggerimento: per risolvere questo esercizio in modo compatto potresti usare lo slicing.

Soluzione
# Solution for this exercise

def reverser(string):
    ind = (len(string) -1)
    new_string = ""
    while ind >= 0:
        new_string += string[ind]
        ind -= 1
    print(new_string)

def reverser_pro(string):
    reverse = string[::-1]
    print(reverse)

Esercizio Rhyme

Scrivi una funzione rhyme, a cui viene passato un elenco di parole come parametro e che riceva una parola inserita dall’utente tramite la funzione input.

La funzione rhyme dovrà confrontare la parola inserita dall’utente con quelle presenti nell’elenco passato, alla ricerca di rime, intese come parole le cui ultime 3 lettere siano uguali alla parola inserita dall’utente.

Le rime dovranno essere quindi mostrate in output utilizzando il metodo join.

Soluzione
# Two solutions for this exercise, rhyme and rhyme_pro

def rhyme(listx):
    rime = []
    word = input("Enter the word you want to find rhymes for: ")
    for element in listx:
        if element[-3:] == word[-3:]:
          rime.append(element)

    if not rime:
        print("No rhymes corresponding to the past word were found!")
    else:
        output = ", ".join(el for el in rime)
        print(f"The rhymes corresponding to the word {word} are as follows: {output}")

def rhyme_pro(listx):
    rime = []
    parola = input("Enter the word you want to find rhymes for: ")
    rime = [el for el in listx if el[-3:] == word[-3:]]
    if not rime:
        print("No rhymes corresponding to the past word were found!")
    else:
        output = ", ".join(el for el in rime)
        print(f"The rhymes corresponding to the word {word} are as follows: {output}")

Esercizio Factorial

Scrivi una funzione ricorsiva che calcola il fattoriale di un numero dato.

Soluzione
def factorial(n):
    if n == 1:
        return n
    else:
        result = n * factorial(n-1)
        return result

Esercizio Fibonacci

Nella Successione di Fibonacci, ciascun numero è la somma dei due numeri che lo precedono, ad esempio:

1, 1, 2, 3, 5, 8, 13 (…)

Scrivi una funzione ricorsiva che restituisce in output i numeri della successione di Fibonacci, entro una soglia specifica impostata dall’utente.

Soluzione
def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

limit = int(input("Enter the number of values ​​in the series you want to see: "))

for num in range(1, limit+1):
    print(fibonacci(num))

Esercizio Indovina il numero

Realizzare il gioco “Indovina il Numero” utilizzando Python. Il gioco genera un numero casuale e l’utente deve indovinarlo, ricevendo suggerimenti se il numero da indovinare è più alto o più basso del tentativo.

Requisiti
  1. Generazione del Numero Casuale: Utilizzare la libreria random per generare un numero casuale tra 1 e 100.
  2. Interfaccia Utente: Creare una semplice interfaccia utente a riga di comando che permetta all’utente di inserire i tentativi.
  3. Suggerimenti: Informare l’utente se il numero da indovinare è più alto o più basso del tentativo.
  4. Conteggio dei Tentativi: Tenere traccia del numero di tentativi effettuati dall’utente.
  5. Fine del Gioco: Terminare il gioco quando l’utente indovina il numero o decide di uscire.
Soluzione
import random

def main():
    print("I thought of a number between 1 and 100. Can you guess it ?")

    number_to = random.randint(1, 100)
    numbers = 0

    while True:
        number_one = input("Enter your attempt (or 'exit' to finish): ")

        if number_one.lower() == 'exit':
            print("You have decided to finish the game. Until next time!")
            break

        try:
            number_one = int(number_one)
            numbers += 1

            if number_one < number_to
                print("Too short. Try again!")
            elif tentativo > number_to:
                print("Too high. Try again!")
            else:
                print(f"Congratulations! You guessed the number {number_to} in {numbers} attempts.")
                break
        except ValueError:
            print("Enter a valid number.")

if __name__ == "__main__":
    main()

Esercizio Lancio dei Dadi

Realizzare un simulatore di lancio di dadi utilizzando Python. Il programma permetterà di simulare il lancio di uno o più dadi e visualizzare i risultati.

Requisiti
  1. Librerie Python: Utilizzare la libreria random per generare i numeri casuali.
  2. Interfaccia Utente: Creare una semplice interfaccia utente a riga di comando che permetta all’utente di specificare il numero di dadi da lanciare e visualizzare i risultati.
  3. Simulazione di Lancio:
    • Generare un numero casuale tra 1 e 6 per ogni dado.
    • Visualizzare i risultati del lancio.
Soluzione
import random

def roll_dice(num_dice):
    results = [random.randint(1, 6) for _ in range(num_dice)]
    return results

def main():
    print("Dice Rolling Simulator")

    while True:
        try:
            num_dice = int(input("Enter the number of dice to roll: "))
            if num_dice <= 0:
                print("The number of dice must be greater than zero.")
                continue

            results = roll_dice(num_dice)
            print(f"Launch results: {', '.join(map(str, results))}")

        except ValueError:
            print("Please enter a valid number.")

        another = input("Do you want to launch again? (y/n): ").lower()
        if another != 's':
            break

if __name__ == "__main__":
    main()

Esercizio Calcola Codice Fiscale

Realizzare un generatore di codice fiscale italiano utilizzando Python. Il programma raccoglierà i dati dell’utente (nome, cognome, data di nascita, sesso e luogo di nascita) e genererà il codice fiscale basato su tali dati.

Requisiti
  1. Librerie Python: Utilizzare le librerie standard di Python.
  2. Interfaccia Utente: Creare una semplice interfaccia utente a riga di comando che permetta all’utente di inserire i propri dati.
  3. Generazione del Codice Fiscale:
    • Calcolare le consonanti e le vocali del nome e cognome.
    • Calcolare il codice della data di nascita e del sesso.
    • Calcolare il codice del luogo di nascita utilizzando un dizionario.
    • Calcolare il carattere di controllo.
Soluzione
import datetime

def cod_lastname(lastname):
    cons = ''.join([c for c in lastname if c.isalpha() and c not in 'AEIOU'])
    vocs = ''.join([c for c in lastname if c.isalpha() and c in 'AEIOU'])
    cod = (cons + vocs + 'XXX')[:3].upper()
    return cod

def cod_name(name):
    cons = ''.join([c for c in name if c.isalpha() and c not in 'AEIOU'])
    vocs = ''.join([c for c in name if c.isalpha() and c in 'AEIOU'])
    if len(cons) >= 4:
        cons = cons[0] + cons[2] + cons[3]
    cod = (cons + vocs + 'XXX')[:3].upper()
    return cod

def cod_date_birth(date_birth, gender):
    cod_month = 'ABCDEHLMPRST'
    data = datetime.datetime.strptime(date_birth, '%d/%m/%Y')
    year = str(data.year)[-2:]
    month = cod_month[data.month - 1]
    day = data.day + 40 if gender == 'F' else data.day
    day = f'{day:02d}'
    return year + month + day

towms = {
    'ROMA': 'H501',
    'MILANO': 'F205',
    'NAPOLI': 'F839',
    # Add towns here
}

def cod_town(towm):
    return towns.get(town.upper(), 'XXXX')

def check_char(cf_partial):
    values = {
        **{chr(i): i - 48 for i in range(48, 58)},
        **{chr(i): i - 55 for i in range(65, 91)}
    }
    odd = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
               1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17, 19, 21,
               1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17, 19, 21]
    even = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
            1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17, 19, 21,
            1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17, 19, 21]

    total = sum(odd[values[cf_partial[i]]] if i % 2 == 0 else even[values[cf_partial[i]]] for i in range(15))
    return chr((total % 26) + 65)

def get_fiscal_code(name, surname, date_birth, gender, town):
    cf = cod_lastname(cognome)
    cf += cod_name(nome)
    cf += cod_date_birth(date_birth, sesso)
    cf += cod_town(comune)
    cf += check_char(cf)
    return cf

def main():
    print("Tax Code Generator")

    lastname = input("Insert lastname: ")
    name = input("Insert name: ")
    date_birth = input("Insert date of birth (dd/mm/yyyy): ")
    gender = input("Insert Gender (M/F): ").upper()
    town = input("Insert Birth Town: ")

    tax_code = get_fiscal_code(name, lastname, date_birth, gender, town)
    print(f"Your tax code: {tax_code}")

if __name__ == "__main__":
    main()

Esercizio Convertitore di Valute

In questo esercizio, realizzerai un convertitore di valute utilizzando Python. Il programma permetterà di convertire importi tra diverse valute utilizzando un’API per ottenere i tassi di cambio aggiornati.

Requisiti
  1. Librerie Python: Utilizzare la libreria requests per fare richieste HTTP all’API di tassi di cambio.
  2. API di Tassi di Cambio: Utilizzare un’API gratuita come ExchangeRate-API o Open Exchange Rates.
  3. Interfaccia Utente: Creare una semplice interfaccia utente a riga di comando che permetta all’utente di specificare l’importo, la valuta di origine e la valuta di destinazione.
  4. Conversione di Valute: Ottenere i tassi di cambio dall’API e calcolare l’importo convertito.
Soluzione
import requests

# Function to get exchange rates from API
def get_exchange_rate(api_key, base_currency, target_currency):
    url = f"https://v6.exchangerate-api.com/v6/{api_key}/latest/{base_currency}"
    response = requests.get(url)
    data = response.json()
    if response.status_code == 200:
        rates = data['conversion_rates']
        return rates[target_currency]
    else:
        raise Exception(f"Error getting exchange rates: {data['error-type']}")

# Function to convert the amount between two currencies
def convert_currency(amount, base_currency, target_currency, api_key):
    rate = get_exchange_rate(api_key, base_currency, target_currency)
    converted_amount = amount * rate
    return converted_amount

def main():
    api_key = "your_api_key_here"
    print("Currency Converter")

    while True:
        try:
            amount = float(input("Enter the amount to convert: "))
            base_currency = input("Enter your source currency (i.e. USD, EUR): ").upper()
            target_currency = input("Enter the destination currency (i.e. USD, EUR): ").upper()

            converted_amount = convert_currency(amount, base_currency, target_currency, api_key)
            print(f"{amount} {base_currency} are {converted_amount:.2f} {target_currency}")

        except Exception as e:
            print(f"Errore: {e}")

        another = input("You want to make another conversion ? (y/n): ").lower()
        if another != 's':
            break

if __name__ == "__main__":
    main()

Autore