Skip to content

Instantly share code, notes, and snippets.

View giacomocavalieri's full-sized avatar
🌸

Giacomo Cavalieri giacomocavalieri

🌸
View GitHub Profile
def primo_giorno_libero(impegnati):
# Scorro tutti i possibili giorni del mese.
# Se trovo un giorno del mese che non è impegnato e
# nemmeno i due giorni successivi sono impegnati
# allora ho trovato un giorno libero valido.
for giorno in range(1, 31):
if not giorno in impegnati:
if not giorno + 1 in impegnati:
if not giorno + 2 in impegnati:
return giorno
  1. Scrivere dei test per una funzione ordinata_crescente che prende in input una lista di valori e restituisce True se questa è in ordine crescente, False altrimenti.
  2. Implementare la funzione ordinata_crescente.
  3. Scrivere una funzione fibonacci che prende in input un numero n e restituisce l'n-esimo numero della sequenza di Fibonacci. (I primi due numeri della sequenza di Fibonacci sono 1 e 1, tutti i numeri successivi vengono calcolati facendo la somma dei due numeri precedenti).
  4. Scrivere dei test per questa funzione. Pensare, cosa potrebbe restituisce la funzione se viene passato in input un numero negativo?
  5. Scrivere una funzione conta che prende in input una lista e un valore qualsiasi e restituisce il numero di volte che questo elemento appare nella lista. Alcuni test d'esempio:
  1. Descrivere a parole cosa fa il seguente pezzo di codice:
    n = 10
    l = []
    while n >= 0:
      l.append(n)
      n -= 1
    Qual' è il valore finale di l?

Una molecola di DNA si compone di due filamenti a formare una doppia elica. Ciascun filamento è composto da 4 possibili basi azotate: Adenina (A), Timina (T), Guanina (G) e Citosina (C).

  1. Scrivere una funzione filamento_valido che prende in input una stringa e restituisce True se questa rappresenta un filamento di DNA valido, False altrimenti. Per esempio "ATGCCG" è un filamento valido perché contiene le sole basi valide, "RACG" non è valido dato che R non è una delle basi azotate del DNA.
  2. Scrivere almeno 4 test per la funzione, quali sono casi particolari a cui prestare attenzione?

I filamenti che compongono la doppia elica del DNA si legano fra loro secondo uno specifico pattern; infatti, le uniche coppie che possono formarsi fra basi sono: adenina con timina (e viceversa), e guanina con citosina (e viceversa).

  1. L'istituto di meteorologia ha raccolto misurazioni sulla temperatura di diverse città in diverse giornate. Ogni misurazione giornaliera riporta una serie di righe, ciascuna delle quali presenta il nome della città in cui è stata effettuata la misurazione, l'orario della misurazione e la temperatura rilevata. Per esempio, questi sono i dati rilevati nella giornata di martedì:
    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
  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)

  1. Scrivere un programma che prende in input una stringa rappresentante una divisione nel seguente formato 1 / 2 e ne stampa il risultato. Attenzione, in caso di divisione per zero stampare "divisione per zero".
  2. Scrivere un programma che prende in input una lista di numeri nel seguente formato 1; 2; 4; 10; 11; 20 e ne stampa la media. Attenzione, in caso non sia stato inserito alcun numero stampare "non è stato inserito alcun numero"
  1. 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
@giacomocavalieri
giacomocavalieri / es1.py
Last active February 20, 2025 17:19
Correzione esercizi
periodi = input("Inserisci un testo").split(".")
riassunto = ""
for periodo in periodi:
parole = periodo.strip().split(" ")
# Se il periodo ha una singola parola aggiungo solo quella al
# riassunto finale che andrò a stampare. Non posso ignorarla.
if len(parole) == 1:
[parola] = parole
riassunto = riassunto + f"{parola}... "
@giacomocavalieri
giacomocavalieri / es2.md
Created February 15, 2025 07:19
esercizio 2

Dopo un allenamento in bicicletta Gianluca consulta il proprio smartwatch che ha memorizzato, per ogni tappa del percorso, l'altitudine rispetto al livello del mare nella seguente lista di numeri:

altitudini = [-2, 0, 20, 50, 90, 70, 0]

Ciò significa che è partito da un punto che si trovava 2 metri sotto al livello del mare, e l'altitudine massima raggiunta è stata di 100 metri sopra al livello del mare. Scrivere un programma Python che determina qual è stata la variazione massima in salita fra due tappe consecutive. In questo caso la variazione massima è stata di 40 metri in salita.