Skip to content

Instantly share code, notes, and snippets.

@giacomocavalieri
Last active March 8, 2025 07:54
Show Gist options
  • Save giacomocavalieri/ae941fd029c9b61af15584f88d84ca42 to your computer and use it in GitHub Desktop.
Save giacomocavalieri/ae941fd029c9b61af15584f88d84ca42 to your computer and use it in GitHub Desktop.
  1. Scrivere una funzione test_uguali che prende in input due argomenti e stampa se sono uguali, mentre stampa se sono diversi
  2. Scrivere una funzione massimo che prende in input una lista di numeri e restituisce il valore massimo nella lista (e restituisce None se la lista è vuota!). Non utilizzare la funzione built-in max!
  3. Verificare il corretto funzionamento di massimo utilizzando la funzione test_uguali mostrata in precedenza nel seguente modo:
    test_uguali(massimo([1, 2, 3]), 3)
    test_uguali(massimo([]), None)
    test_uguali(massimo([-1, 100, 0]), 100)
    Qual è l'output che mi aspetto di vedere? E se la funzione non funzionasse correttamente cosa vedrei in output?
  4. Scrivere una funzione minimo che prende in input una lista di numeri e restituisce il valore minimo nella lista (e restituisce None se la lista è vuota!). Non utilizzare la funzione built-in min!
  5. Testare che la funzione minimo funzioni correttamente in maniera simile al punto 3. Scrivere i propri test. Prova a pensare a input diversi fra loro, quali sono i casi limite?
  6. Scrivere un programma che prende in input un numero n e determina quali sono i numeri primi compresi fra 0 e n (incluso). Per esempio se l'input fosse 11 l'output dovrebbe essere 2, 3, 5, 7, 11.
  7. Modificare il programma precedente in modo da stampare solamente il numero di numeri primi compresi fra 0 e n. Se l'esercizio 8 è stato implementato definendo una funzione appropriata, allora il cambiamento da effettuare sarà minimo!
  8. Modifichiamo l'esercizio 8 del secondo laboratorio. Il codice originale era il seguente:
    tags_cercati = ["grammys", "chappellRoan", "sabrinaCarpenter"]
    tags_del_post = ["grammys", "doechii"]
    
    post_visualizzato = False
    for tag_del_post in tags_del_post:
       for tag_cercato in tags_cercati:
          if tag_cercato == tag_del_post:
              post_visualizzato = True
              break
    
    if post_visualizzato:
        print("✅ Il post verrà mostrato")
    else:
        print("❌ Il post non verrà mostrato")
    Vorremmo renderlo più facile da leggere definendo delle funzioni aggiuntive: post_visualizzato(post) che restituisce un Bool che dice se il post passato come primo argomento va visualizzato o meno a seconda dei tag_cercati passati come secondo argomento:
    def post_visualizzato(post, tag_cercati):
        # implementare la funzione...
        return True
        
    tags_cercati = ["grammys", "chappellRoan", "sabrinaCarpenter"]
    post = ["grammys", "doechii"]
    if post_visualizzato(post, tags_cercati):
        print("✅ Il post verrà mostrato")
    else:
        print("❌ Il post non verrà mostrato")
    Per implementare la funzione post_visualizzato definire e utilizzare una nuova funzione intersezione che prende in input due liste e restituisce una nuova lista con i soli elementi in comune fra le due.
  9. Riprendiamo l'esercizio della calcolatrice, vogliamo renderlo più facile da leggere utilizzando delle funzioni; una volta modificato il codice apparirà come segue:
    # Preso un `input` di tipo Stringa nel seguente formato `n operatore m`, lo spezza in una lista con
    # 3 elementi nel seguente ordine `[n, operatore, m]`:
    #   - `n` e `m` sono due valori di tipo `float`
    #   - `operatore` è la stringa fra i due operandi `n` e `m`
    # Se la stringa non è in un formato valido, restituisce una lista vuota!
    def operazione_da_testo(input):
        # Implementare la funzione
        return []
    
    # Dati due numeri `n` e `m`, e un `operatore` espresso come una stringa, applica l'operazione corrispondente
    # ad `n` e `m`. Gli unici operatori supportati sono `+` e `*`, se viene dato in input un qualunque altro
    # operatore il risultato è `None`
    def applica_operazione(n, operatore, m):
        # Implementare la funzione
        return None
        
    while True:
        testo_input = input()
        if testo_input == "stop":
            break
            
        operazione = operazione_da_testo(testo_input)
        if len(operazione) == 3:
            [n, operando, m] = operazione
            risultato = applica_operazione(n, operando, m)
            if risultato != None:
                print(f"{n} {operando} {m} = {risultato}")
            else:
                print(f"Operando non supportato: '{operando}'")
        else:
            print("l'operazione fornita non ha un formato valido")
  10. Scrivere una funzione anagrammi che data una parola e una lista di parole restituisce una lista con le sole parole che sono un anagramma della parola passata come primo argomento. La funzione deve passare i seguenti test:
    risultato = anagrammi("stone", ["tones", "dog", "notes"])
    test_uguali(risultato, ["tones", "notes"])
    
    risultato = anagrammi("stone", ["dog", "cat"])
    test_uguali(risultato, [])
  11. L'istituto di meteorologia raccoglie dati relativi alle temperature di diverse stazioni che rilevano la temperatura sul territorio di Forlì-Cesena. Tutti i dati di una giornata sono raccolti nel seguente formato:
    cesena, 10:00, 15.0
    forlimpopoli, 10:00, 15.5
    bagno di romagna, 10:00, 14.8
    cesena, 11:00, 15.5
    forlimpopoli, 11:00, 16.0
    bagno di romagna, 11:00, 15.0
    cesena, 20:00, 10.0
    forlimpopoli, 20:00, 10.0
    bagno di romagna, 20:00, 8.0
    Ogni riga contiene tre valori: il nome della città in cui è stata rilevata la temperatura, l'orario in cui è stata effettuata la rilevazione e la temperatura rilevata. Si vuole realizzare un programma che data una stringa in questo formato determina qual è la città nella quale è stata misurata la temperatura maggiore. Per esempio, con l'input mostrato la risposta dovrebbe essere "forlimpopoli"
  12. difficile Scrivere una funzione da_resto che prende in input due argomenti: il prezzo di un prodotto e quanto è stato pagato e determina quale deve essere il resto fornito utilizzando il minor numero possibile di banconote da 10, 5 o monete da 2 e 1 euro. Facciamo un esempio: se la spesa è di 80€ e io ho pagato con 100€ allora il resto che mi dia il minor numero di banconote/monete sarà con due sole banconote da 10€.
    test_uguali(resto(80, 100), [10, 10])
    test_uguali(resto(58, 70), [10, 2])
    test_uguali(resto(37, 60), [10, 10, 2, 1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment