#!/usr/bin/python -tt #======= #Crediti #======= # esercizi corso di python @ifac-cnr # Copyright 2012 Nicola Zoppetti # Licensed under the Apache License, Version 2.0 # http://www.apache.org/licenses/LICENSE-2.0 #==================== #Indicazioni generali #==================== # RIEMPIRE LE FUNZIONI # DOVE COMPARE IL COMMENTO # +++METTI QUI IL TUO CODICE+++ # Seguire le istruzioni riportate nel commento # precedente ciascuna funzione da riempire # Una volta studiata una soluzione ad un esercizio, per verificare se è corretta eseguire QUESTO SCRIPT # per un generico 'esercizio 1', se la soluzione è errata o non data # sullo standard output viene stampato il prefisso KO, il valore restituito e quello atteso # >>> esercizio 1 # >>> KO restituisce: None, risultato atteso: [98, 55, 10, 8, 2] # # Se la soluzione è corretta: # sullo standard output viene stampato OK # >>> esercizio 1 # >>> OK #=============== #INIZIO ESERCIZI #=============== # ------------------------- # forcompleto(num,stringa,stringabreak): # ------------------------- # restituire una lista di stringhe che rapprensentano # i numeri da 0 a num (compreso) e, alla fine, la 'stringa' passata # come secondo parametro # se però il parametro stringabreak è uguale ad una delle stringhe # che rappresenta i numeri terminare con quella anche se # rappresenta un numero più piccolo di num # # Esempi: # >>>forcompleto(5,'fine','xx') # ['0','1','2','3','4','5','fine'] # >>>forcompleto(5,'fine','2') # ['0','1','2'] # # suggerimento: # - usare un ciclo for con else finale per inserire la 'stringa' # - usare break se una delle stringhe con i numeri == stringabreak def forcompleto(num,stringa,stringabreak): ##-METTI-QUI-IL-TUO-CODICE-## return # ------------------- # saltavocali(parola) # ------------------- # restituisce una stringa in cui si saltano le vocali della # stringa originaria # Esempi: # # >>> saltavocali('Hello') # 'Hll' # >>> saltavocali('MammAluCcO') # 'MmmlCc' # suggerimenti: # - iterare sui caratteri della parola con for e utilizzare # l'istruzione continue quando si trova una vocale # - attenzione alle vocali maiuscole e minuscole def saltavocali(parola): ##-METTI-QUI-IL-TUO-CODICE-## return # ---------------------- # saltacommento(stringa) # ---------------------- # data una stringa di programma Python # restituisce una stringa in cui si eliminano gli eventuali commenti # (definiti dal carattere # e tutto ciò che segue) # Esempi: # # >>> saltacommento('a=10 # questo è un comm#ento') # 'a=10 ' # >>> saltacommento('## questo è un comm#ento') # '' # suggerimenti: # - iterare sui caratteri della stringa con for e utilizzare # l'istruzione break quando si trova il carattere # def saltacommento(stringa): ##-METTI-QUI-IL-TUO-CODICE-## return # ------------------------ # sommafinoamaxx(num,maxx) # ------------------------ # somma i numeri da 1 a num fino ad un risultato massimo pari a maxx # Esempi: # >>>sommafinoamaxx(5,20) # 15 # >>>sommafinoamaxx(50,10) # 10 def sommafinoamaxx(num,maxx): ##-METTI-QUI-IL-TUO-CODICE-## return # ------------------------ # contauno(num) # ------------------------ # conta il numero di volte che la cifra 1 # compare nei numeri da 1 a num (compreso) # Esempi: # >>> contauno(201) # 141 # >>> contauno(101) # 23 # >>> contauno(13) # 6 def contauno(num): ##-METTI-QUI-IL-TUO-CODICE-## return # ---------------- # numeriprimi(num) # ---------------- # dato un intero positivo num # la funzione restituisce la lista dei numeri primi maggiori o uguali a 2 # e minori o uguali a num # # Esempi: # >>>numeriprimi(5) # [2, 3, 5] # >>>numeriprimi(1) # [] # >>>numeriprimi(50) # [2, 3, 5, 7, 11, 13, 17, 19, 23 , 29, 31 , 37 , 41 , 43, 47 ] # >>>numeriprimi(-1) # [] # suggerimento: # un possibile algoritmo usa due iterazioni: # - una esterna sull'indice i # - una interna sull'indice k che arriva fino a i # nel ciclo interno testo se i è divisibile per k ... def numeriprimi(num): ##-METTI-QUI-IL-TUO-CODICE-## return # -------------------- # fattorizzazione(num) # -------------------- # Dato un numero intero positivo num, scrivere una funzione che calcola # la fattorizzazione in numeri primi di num cioè un sequenza di numeri primi # che moltiplicati danno il numero di partenza # # # suggerimento: # - usare la funzione numeriprimi definita nel precedente esercizio # Esempi # # >>> fattorizzazione(60) # [2, 2, 3, 5] # >>> fattorizzazione(1050) # [2, 3, 5, 5, 7] # >>> fattorizzazione(1) # [] # >>> fattorizzazione(47) # [47] def fattorizzazione(num): ##-METTI-QUI-IL-TUO-CODICE-## return #============== # FINE ESERCIZI #============== # NON MODIFICARE DA QUI IN POI!!!!!!!! # FUNZIONE test() usata in main() per stampare # cosa restituisce ciascuna funzione vs. cosa dovrebbe restituire quella corretta def test(got, expected): if got == expected: prefix = ' OK ' print(' OK') else: prefix = ' KO ' print(' %s restituisce: %s, risultato atteso: %s' % (prefix, repr(got), repr(expected))) def test_float(got,expected,eps=1.e-6): if got == None: print(' KO restituisce: None, risultato atteso: %s' % (repr(expected))) return if abs(got-expected)< eps: prefix = ' OK ' print(' OK') else: #print('KO') prefix = ' KO ' print('%s restituisce: %s, risultato atteso: %s' % (prefix, repr(got), repr(expected))) # chiama le funzioni-soluzione con argomenti fissati e # confronta i risultati con quelli attesi def main(): print('forcompleto') test(forcompleto(5,'fine','xx'),['0','1','2','3','4','5','fine']) test(forcompleto(5,'fine','2'), ['0','1','2']) print('saltavocali') test(saltavocali('Hello'),'Hll') test(saltavocali('MammAluCcO'),'MmmlCc') print('saltacommento') test(saltacommento('a=10 # questo è un comm#ento'),'a=10 ') test(saltacommento('## questo è un comm#ento'),'') print('sommafinoamaxx') test(sommafinoamaxx(5,20),15) test(sommafinoamaxx(50,10),10) test(sommafinoamaxx(5000,20),20) print('contaunoinpagine') test(contauno(201),141) test(contauno(101),23) test(contauno(13) ,6) print('numeriprimi') test(numeriprimi(5), [2, 3, 5]) test(numeriprimi(1), []) test(numeriprimi(50), [2, 3, 5, 7, 11, 13, 17, 19, 23 , 29, 31 , 37 , 41 , 43, 47 ]) test(numeriprimi(-1), []) print('fattorizzazione') test(fattorizzazione(60),[2, 2, 3, 5]) test(fattorizzazione(1050),[2, 3, 5, 5, 7]) test(fattorizzazione(1), []) test(fattorizzazione(47),[47]) test(fattorizzazione(4764),[2, 2, 3, 397]) # Standard boilerplate to call the main() function. if __name__ == '__main__': main()