<jupyter_start><jupyter_text>Piccolo ripasso degli argomenti trattati nelle prime lezioni.Non è un ripasso esaustivo, ovvero per svolgere l'esame  dovete saper lavorare anche con strutture che non sono state richiamate espressamente in questo ripasso (per esempio dizionari, tuple, lambda expression, list comprehension, etc..).<jupyter_code>#recap1
#definiamo una funzione che prende in input un <nome> e un numero <n> e 
#ritorna la stringa concatenata "il nome è <nome> ed il numero è <n>"
#esempio: recap1("Pippo",5) -> "il nome è Pippo ed il numero è 5"

#usiamo la funzione format
def recap1(nome,n):
    return "il nome è {} ed il numero è {}".format(nome,n) #funzione format [da ricordare]

#usiamo la concatenazione di stringhe

def recap1_1(nome,n):
    return "il nome è "+ nome + " ed il numero è "+str(n) #ricordarsi di convertire l'intero <n>
                                                          # in una stringa, con la funzione str(n)
print(recap1("Pippo",5))
print(recap1_1("Pippo",5))
#recap2
#definiamo una funzione che prende in input una stringa <parola> 
#e ritorna la stringa in ordine inverso. 
#esempio: recap2("pippo") -> "oppip"

def recap2(parola):
    s=''                          #stringa vuota
    for i in range(len(parola)):  #ciclo for, range, e len
        s=s+parola[-1-i]          # ricordarsi che s[-1] identifica l'ultimo elemento della stringa
    return s

#se mi ricordo lo slicing [ricordatevelo!] posso semplicemente scrivere: 

def recap2_1(parola):
    return parola[::-1]

print(recap2("pippo"))
print(recap2_1("pippo"))
#recap3
#definiamo una funzione che prende in input una stringa <parola> (di lettere 
#minuscole) e controlla se tra le lettere in posizione dispari compare una vocale.
#esempio: recap3("ciao") -> true, recap3("pila")->false

def recap3(parola):
    vocali = "aeiou"
    parola_dispari = parola[::2]
    for p in parola_dispari:
        if p in vocali:
            return True
    return False
print(recap3("ciao"))
print(recap3("pila"))
#recap4
#definiamo una funzione che prende in input un numero <minuti> , rappresentante 
# i minuti totali e li converta nel formato orario ##h:##min 
#esempio: recap4(120)-> 2h:00min, recap4(75)->1h:15min

def recap4(minuti):
    ore = minuti//60                      #divisione intera
    minuti_resto = minuti - ore*60        #resto della divisione, in alternativa 
    return "{}h:{}min".format(ore,minuti) # minuti_resto = minuti % ore    

print(recap4(120))
print(recap4(75))
#recap5
#definiamo un codice che chiede in input all'utente di inserire la lunghezza dei lati
# di un triangolo su un unica linea separati da uno spazio. Se il triangolo è rettangolo
# si ferma, stampando a schermo "il triangolo è rettangolo", se non è rettangolo
#chiede nuovamente  di inserire i lati del triangolo per un massimo di 5 volte. 

#esempio: 
#python: "inserisci i lati di un triangolo:"
#umano: 1 2 3 
#python: "inserisci i lati di un triangolo:"
#umano: 3 4 7
#python: "inserisci i lati di un triangolo:"
#umano: 3 4 5
#python: il triangolo è rettangolo

#nota bene: diamo per assunto che l'umano inserisca 3 numeri in ordine crescente"

n=0
while(n<5):
    lati = input("inserisci i lati di un triangolo:").split()
    a = int(lati[0])
    b = int(lati[1])
    c = int(lati[2])
    if(a**2+b**2==c**2):
        print("il triangolo è rettangolo")
        break
    n=n+1
        
#recap6
#definire una funzione che prende in input due numeri interi maggiori di 1
#<a> e <b> e ritorna il più grande esponente intero c tale che 
#<a> elevato alla c è più piccolo di <b>
# esempio: recap6(2,17) -> 4,  recap6(3,1594330) -> 13

def recap6(a,b):
    c=0
    while(a**c<b):
        c=c+1
    return c-1

recap6(3,1594330)
#recap7
#Scrivere una funzione ( operazione(x,y,s) ) che prende come input due numeri (x,y) 
#e una stringa s che assume valore in ['somma','prodotto','diviso','potenza'] 
#ed effettua la suddetta operazione tra x e y. Se non viene passato nessuna stringa 
#allora effettua la somma di default. Se viene passata una stringa diversa da quelle precedenti 
#ritorna la stringa: "non so cosa fare"

def recap7(x,y,s='somma'):
    if s=='somma':
        return x+y
    if s=='prodotto':
        return x*y
    if s=='diviso':
        return x/y
    if s=='potenza':
        return x**y
    return 'non so cosa fare'
#recap8
#definire una funzione che prende in input una stringa e sostituisce se presenti la lettera
# r con da d (e viceversa)
# b con la c (e viceversa)
# tutte le vocali con la z
# ritorna in output la stringa dopo le sostituizioni
#esempio: recap8("abracadabra") ->  zcdzbzrzcdz

def sostituisco(lettera):
    codice = {"r":"d","d":"r", "b":"c","c":"b"}
    vocali = "aeiou"
    if lettera in codice:
        return codice[lettera]
    if lettera in vocali:
        return "z"
    else:
        return lettera

def recap8(parola):
    nuova_parola=""
    for lettera in parola:
        nuova_parola=nuova_parola+sostituisco(lettera)
    return nuova_parola

recap8("abracadabra")
    
#recap9: definire la funzione di fibonacci ricorsiva
#f(0)=1
#f(1)=1
#f(n)=f(n-1)+f(n-2)
def fibonacci(n):
    if n<=1:
        return 1
    return fibonacci(n-1)+fibonacci(n-2)
#recap10
#definire una funzione che prenda in input una lista di numeri a piacere e ritorni una dispozione
#randomica degli stessi.
#esempio recap10([1,5,3,2,6,7]) -> [1,7,2,3,5,6]
#non vale usare la funzione shuffle (per chi la conoscesse)

import random 
def recap10(lista):
    nuova_lista=[]
    lunghezza_lista=len(lista)
    for i in range(lunghezza_lista):
        nuova_lista.append(lista.pop(random.randint(0,lunghezza_lista-i-1)))
    return nuova_lista

print(recap10([1,5,3,2,6,7]))<jupyter_output>[2, 3, 1, 6, 7, 5]
{'fraction_non_alphanumeric': 0.11217725052337753, 'fraction_numerical': 0.02773900907187718, 'mean_word_length': 3.5717703349282295, 'pattern_counts': {'":': 4, '<': 19, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '257389', 'license': 'CC0-1.0', 'n_tokens_mistral': 2279, 'n_tokens_neox': 2215, 'n_words': 697, 'path': 'Ripasso/Ripasso.ipynb', 'repo_name': 'simonesilvetti/teaching_2018_uni_dmg_python', 'size': '5732'}