#!/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 #=============== # pari(numero) # ------------ # restituisce True se il numero è pari # restituisce False se numero è dispari # numero è un intero # Esempi: # # >>> pari(0) # True # >>> pari(1) # False # >>> pari(-2) # True def pari(numero): ##-METTI-QUI-IL-TUO-CODICE-## return # somma(a,b) # ---------- # restituire la somma di due variabili come numero in virgola mobile # indipendentemente dal tipo della variabile in ingresso # Esempi: # >>> somma(-1,2) # 1.0 # >>> somma(5.3,2.1) # 7.4 # >>> somma('-1','2.1') # 1.1 def somma(a,b): ##-METTI-QUI-IL-TUO-CODICE-## return # ilmaggiore(a,b) # --------------- # restituire il maggiore dei due elementi passati come argomento # se sono uguali uno qualsiasi # Esempi: # >>> ilmaggiore(-1,2) # 2 # >>> ilmaggiore(5.3,2.1) # 5.3 # >>> ilmaggiore('-1','-2.1') # -2.1 #NB: ordinamento di stringhe!!! def ilmaggiore(a,b): ##-METTI-QUI-IL-TUO-CODICE-## return # usomath() # --------------- # Python fornisce molti moduli built-in con molte funzioni utili. # Uno di questi è il modulo per la matematica 'math'. # Il modulo matematico fornisce molte funzioni utili # come sqrt(x), pow(x, y), ceil(x), floor(x) ecc# # è necessario importare il modulo math prima di utilizzarlo # - Calcolare la radice quadrata di 4 e immagazzinarla in una variabile di nome a # - Calcolare 3 elevato alla 5 e immagazzinarla in una variabile di nome b # - Calcolare l'area del cerchio con raggio 3, usando la costante # math.pi e immagazzinarla in una variabile di nome c # - terminare la funzione con l'istruzione # return a,b,c def usomath(): ##-METTI-QUI-IL-TUO-CODICE-## return 0,0,0 # bmi(m,h): # --------- # restituire il body-mass-index # cioé la massa in kg (m) diviso l'altezza in m (h) al quadrato # NB: la funzione deve gestire eventuali argomenti passati come stringa # Esempio: # >>>bmi('100','1.80') # 30.864 def bmi(m,h): ##-METTI-QUI-IL-TUO-CODICE-## return # divisionieresti(a,b): # --------------------- # restituire la parte intera del numero che si ottiene sommando: # - 9 volte la parte intera del quoziente tra a e b # - 123.7 volte il resto del quoziente tra a e b def divisionieresti(a,b): ##-METTI-QUI-IL-TUO-CODICE-## return # numerocifre(num) # ---------------- # restituisce il numero di cifre (segno escluso) # con le quali si rappresenta un numero intero # (o la sua parte intera nel caso sia un float) in base 16 # suggerimento: # - tenere presente la funzione predefinita hex def numerocifre(num): ##-METTI-QUI-IL-TUO-CODICE-## return # rappresentazioni(num) # --------------------- # fare in modo che le variabili inizializzate con delle stringhe vuote # contengano le seguenti stringhe: # - rbin: rappresentazione binaria di num # - roct: rappresentazione ottale di num # - rdec: rappresentazione decimale di num # - rhex: rappresentazione esadecimale di num # # concludere la funzione con # return rbin,roct,rdec,rhex def rappresentazioni(num): rbin = '' roct = '' rdec = '' rhex = '' ##-METTI-QUI-IL-TUO-CODICE-## return # distanza # ---------- # date le coordinate sul piano di due punti # - (x1,y1) # - (x2,y2) # restituire la distanza tra i due punti # suggerimento: # - usare la funzione sqrt del modulo math import math def distanza(x1,y1,x2,y2): ##-METTI-QUI-IL-TUO-CODICE-## return # isoscele(x, y, z) # ----------------- # # x,y,z sono i lati di un triangolo # scrivere una funzione che restituisce # - True se il triangolo è isoscele o equilatero # - False se il triangolo è scaleno o se è un triangolo degenere # (con uno o più lati minori o uguali a zero) # Esempi: # >>> isoscele(2, 4, 3) # False # >>> isoscele(3, 3, 3) # True # >>> isoscele(2, 3, 2) # True # >>> isoscele(-2, 3, -2) # False # >>> isoscele(0, 0, 2) # False def isoscele(x, y, z): ##-METTI-QUI-IL-TUO-CODICE-## return # scaleno(x, y, z) # ----------------- # # x,y,z sono i lati di un triangolo # scrivere una funzione che restituisce # - True se il triangolo è scaleno # - False se il triangolo è isoscele o equilatero o se è un triangolo degenere # (con uno o più lati minori o uguali a zero) # Esempi: # >>> scaleno(2, 4, 3) # True # >>> scaleno(3, 3, 3) # False # >>> scaleno(2, 3, 2) # False # >>> scaleno(-2, 3, -2) # False # >>> scaleno(0, 0, 2) # False def scaleno(x, y, z): ##-METTI-QUI-IL-TUO-CODICE-## return # def quadrante(num): # ------------------- # restituire il numero del quadrante al quale appartiene un numero complesso (1, 2, 3 o 4) # - il semiasse x positivo appartiene al quadrante 1 # - il semiasse y positivo appartiene al quadrante 2 # - il semiasse x negativo appartiene al quadrante 3 # - il semiasse y negativo appartiene al quadrante 4 # - l'origine appartiene al quadrante 1 # nota: la funzione cmath.phase restituisce un float compreso tra -pigreco e pigreco, estremi compresi import cmath def quadrante(num): ##-METTI-QUI-IL-TUO-CODICE-## return # def sommadecimali(a,b,c,d): # ------------------- # supposto che a, b, c, d siano dei numeri (con segno) # restituire True se a+b+c+d e' uguale a 1 , false altrimenti # # Esempi: # >>> sommadecimali(0.1 , 0.1 , 0.1 , 0.7) # True # >>> sommadecimali(1.0 , 0.1 , 0.1 , -0.2) # True # >>> sommadecimali(1.0 , 0.3 , 0.3 , -0.2) # False def sommadecimali(a,b,c,d): ##-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('pari') test(pari(0),True) test(pari(1),False) test(pari(-2),True) print() print('somma') test_float(somma(-1,2),1.0) test_float(somma(5.3,2.1), 7.4) test_float(somma('-1','2.1'),1.1) print() print('ilmaggiore') test(ilmaggiore(-1,2), 2) test(ilmaggiore(5,2), 5) test(ilmaggiore(2,2), 2) test(ilmaggiore('-1','-2.1'),'-2.1') print() print('usomath') a,b,c = usomath() test_float(a, math.sqrt(4)) test_float(b, 3.**5.) test_float(c, math.pi*3**2) print() print('bmi') test_float(bmi(74,1.78),23.3556,eps=1e-2) test_float(bmi(70,1.77),22.343,eps=1e-2) test_float(bmi(100,1.80),30.864,eps=1e-2) test_float(bmi('100','1.80'),30.864,eps=1e-2) print() print('divisionieresti') test(divisionieresti(2,2),9) test(divisionieresti(51,2),348) test(divisionieresti(34.2,2),177) test(divisionieresti(1,2.2),123) print() print('numerocifre') test(numerocifre(129),2) test(numerocifre(289834),5) test(numerocifre(0),1) test(numerocifre(-289834),5) print() print('rappresentazioni') test(rappresentazioni(129),('0b10000001', '0o201', '129', '0x81')) test(rappresentazioni(-289834),('-0b1000110110000101010', '-0o1066052', '-289834', '-0x46c2a')) print() print('distanza') test_float(distanza(1,1,5,5),5.656854249492381) test_float(distanza(0,0,0,0),0.0) test_float(distanza(-1,-21,145,15),150.37286989347513) test_float(distanza(11,-21,-5,+5),30.528675044947494) print() print('isoscele') test(isoscele(2, 4, 3), False) test(isoscele(3, 3, 3), True) test(isoscele(2, 3, 2), True) test(isoscele(-2, 3, -2),False) test(isoscele(0, 0, 2), False) print() print('scaleno') test(scaleno(2, 4, 3), True) test(scaleno(3, 3, 3), False) test(scaleno(2, 3, 2), False) test(scaleno(-2, 3, -2),False) test(scaleno(0, 0, 2), False) print() print('quadrante') test(quadrante(2), 1) test(quadrante(0), 1) test(quadrante(2.+0j), 1) test(quadrante(2.+1j), 1) test(quadrante(+1j), 2) test(quadrante(-1+1j), 2) test(quadrante(-1), 3) test(quadrante(-1-1j), 3) test(quadrante(-1j), 4) test(quadrante(1-1j), 4) print() print('sommadecimal') test(sommadecimali(0.1 , 0.1 , 0.1 , 0.7),True) test(sommadecimali(1.0 , 0.1 , 0.1 , -0.2),True) test(sommadecimali(1.0 , 0.3 , 0.3 , -0.2),False) # Standard boilerplate to call the main() function. if __name__ == '__main__': main()