You are on page 1of 7

Examen inventat 1 Problema 1 [2 punts, tots els apartats el mateix pes] 1.

a) Escriur la traa de la funci suma i el valor que retorna quan es realitzen les dues segents crides: suma(0,0) i suma(1,4) def suma(i,j): k=i s=0 while k <= j: s = s + (-2) k += 1 !etu!n s !uma"#,#) linia $ s % 2 ' ( # & # # # % % %

)etorna % !uma"%,() linia $ s % 2 ' ( * + , . % & % # % &2 2 &2 2 2 ' 2 ' &+ ( %# * %#

)etorna %# 1.b) Escriu tres test, en forma de doctest, per a la funci suma"i#its i quatre per a la funci es/umero0ars1ad, dos per cada cas def suma2igits"n): 333 )etorna la suma dels digits que forman l4enter n 333 def es/umero0ars1ad"n):

Examen inventat 1 333 )etorna 5rue si i nom6s si l4enter n 6s un n7mero de 0ars1ad, 6s a dir, si 6s divisi8le per la suma dels seus digits 333 def suma2igits"n): 333 )etorna la suma dels digits que forman l4enter n 999 suma2igits"(*%2') %* 999 suma2igits"') ' 999 suma2igits"-%) . 333 ef es/umero0ars1ad"n): 333 )etorna 5rue si i nom6s si l4enter n 6s un n7mero de 0ars1ad, 6s a dir, si 6s divisi8le per la suma dels seus digits 999 es/umero0ars1ad"-%) 5rue 999 es/umero0ars1ad"') 5rue 999 es/umero0ars1ad"(*%2') :alse 999 es/umero0ars1ad"%%) :alse 333 1.c) ;nalitza el programa que tens a continuaci i raona que fa en aca8ar l4execucci d4aquest <ue es veura per pantalla= <ue ens permet fer la primera linia de codi= >ustifica les respostes ?&@&coding: utf&-&@& def f"z): lA[] for c in z: if 4B4 in c: l append"c) else: pass return l $A40ola niBo aCer el caBon pequeBo disparo en DaBellas4 print 4Ea paraula es Fs4 F"f"$ split"))[(Flen"f"$ split"))]) ;quest programa consta d4una funci f"z), que donada una llista de cadenes de carGcters 8usca quins elements d4aquesta llista contenen el carGcter 4B4 Els elements que contenen aquest carGcter, 4B4, sn introduHts en una nova llista que 6s el que retorna la funci

Examen inventat 1 <uan cridem aquesta funci am8 la varia8le $ split"), realment estem fent la segent crida: f($%&'la%, %ni('%, %a)e!%,%el%,%*a('n%,%+e,ue('%,%dis+a!'%,%en%,%-a(ellas%.) ;questa funci ens retronarG el segents: $%ni('%,%*a('n%,%+e,ue('%,%-a(ellas%. ;ixI doncs per pantalla veurem: /a +a!aula es ni(' Ea primera linia de codi 6s suna comanda que ens permet tractar am8 carGcters 4especials4 com ara la B 1.d) Escriu el contingut del fitxer h'la0txt0 f='+en(%h'la0txt%,%w%) k=%El #e#ant del +i a!a 1alla a!a 1alla el #e#ant del +i a!a 1alla +el *ami% l=k0s+lit() f'! e in l: if len(e)23: f0w!ite(e+%4n%) else: +ass f0*l'se() 5h'la0txt #e#ant 1alla 1alla #e#ant 1alla *ami

Examen inventat 1 Problema 2 $1,6 +unts *ada a+a!tat. Dal dissenCar un sistema automGtic que sigui capa de corregir textos de manera que su8stituexi paraules considerades polIticament incorrectes per sinJnims accepta8les Knicialment, les paraules polIticament incorrectes estan emmagatzemades en un fitxer de nom sinonims txt de manera que cada lInia del fitxer cont6 com a primera paraula la incorrecta i, tot seguit, un nom8re varia8le de sinJnims correctes separats per 8lancs 2.a) 2issenCa una funci LCt1on tal que a partir del fitxer de sinJnims sigui capa de generar un diccionari en el que les claus sn les paraules incorrectes i cadascuna dMelles t6 associada una llista de sinJnims equivalents accepta8les def 7ene!a"i*(): f='+en(%sin'nims0txt%,%!%) l=f0!eadline() di*=89 while l:=%%: s=l0s+lit() di*$s$0..=s$1:. l=f0!eadline() f0*l'se() !etu!n di* 2.b) El text que cal corregir estG emmagatzemat en un fitxer de text 2issenCa una funci tal que donat el diccionari de sinJnims generat a lMapartat precedent, el nom del fitxer de text que cal corregir i el nom del fitxer que emmagatzemarG el text corregit, generi un altre fitxer am8 el text corregit El fitxer de text am8 el text a corregir estG estructurat en lInies ; cada lInia 1i pot 1aver m6s d4una paraula i les paraules no estan partides Ler tal de triar quin sinJnim polIticament correcte escollim de la llista corresponent, usarem el n7mero de la lInia i calcularem el residu de dividir aquest n7mero pel nom8re d4elements de la llista def *'!!et#i!(di*,n1,n2): f1='+en(n1,%!%) f2='+en(n2,%w%) l=f10!eadline() i=1 while l:=%%: s=l0s+lit() f'! +a!aula in s: if di*0has;ke)(+a!aula): f20w!ite(di*$+a!aula.$i<len(di*$+a!aula.).+% %) else: f20w!ite(+a!aula+% %) f20w!ite(%4n%) i+=1 l=f10!eadline() f10*l'se() f20*l'se()

Examen inventat 1 Problema 3 $3 +unts. Nna famosa cadena de radio, ela8ora setmanalment una llista am8 les 2# canons m6s votades pels seus oients :ins ara feien aquesta llista a mG, perJ 1an decidit contractar un informGtic per quO els aPudi Ells disposen d4una 8ase de dades am8 tota la m7sica que emeten Ler cada cano tenen la segent informaci: /om de la can" string) ;utor"string) Ql8um"string) ;nC"enter) 2uraci"tuple"minuts,segons)) Datalana" 8ooleG" 5rue si la can 6s catalana i :alse en cas contrari)) !uposem que disposes d4una llista "que representa la 8ase de dades), on cada element de la llista 6s una tuple que cont6 tota la informaci de cada cano . 5ots els vots dels oients de rGdio estan en un fitxer de text" vots txt), on 1i 1a un vot per lInia El fitxer 6s com el segent: 5v'ts0txt Edua!d =ui>?@a!*el'na?&ell'?Rartin !olveig A'an ='s?7!an'lle!s?Bnl) #i!l?=ihanna Catalia Bl't?Di*?-'!!en?7'ss's E'l Fi#a?Gm+'sta?&ell'?Ha!tin I'lvei# A'se+ Ians?Hata!'?&ell'?Ha!tin I'lvei# Cu!ia F'nt?Ja!!a#'na?-'!!en?7'ss's 3.a) [% punt] 2issenCa una funci que, donat un fitxer de text vots txt, et retorni una llista on cada element d4aquesta contingui informaci de cada vot f!'m st!in# im+'!t def lle#ui!v't(l): s=l0s+lit(%?%) s$-1.=!e+la*e(s$-1.,%4n%,%%) !etu!n tu+le(s) def v'ts(): x='+en(%v'ts0txt%,%!%) l=x0!eadline() llista=$. while l:=%%: s=lle#ui!v't(l) llista0a++end(s) l=x0!eadline() !etu!n llista 3.b) [2 punts] 2issenCa una funci que donada una llista de vots, tal com la que retorna la funci dissenCada a l4apartat anterior, i una llista am8 totes les canons que emet la rGdio, retorni una llista, on cada element contingui el nom i l4autor de la can"un string separat per un 4&4) i el nom8re de

Examen inventat 1 vots que 1a re8ut la can Dap la possi8ilitat que un oient despistat introdueixi el nom malament o posi una can que no emet l4emisora f!'m st!in# im+'!t d=$(%&ell'%,%Ha!tin I'lvei#%,%Gl1um1%,%200K%,(4,33),False),(%Bnl) #i!l%,%=ihanna%,%Gl1um1%,%200K%, (2,2K),False),(%-'!!en%,%7'ss's%,%Gl1um2%,%200L%,(3,66),J!ue). def lallista(d,v): l=$. i=0 while i<len(v): t!'1at=False j=0 while j < len(d) and n't t!'1at: if v$i.$2.==d$j.$0. and v$i.$3.==d$j.$1.: s=v$i.$2.+%-%+v$i.$3. l0a++end(s) t!'1at = J!ue else: j=j+1 i=i+1 llista=$. w=j'in(l) k=0 while len(w):=0 and k <len(v): s=v$k.$2.+%-%+v$k.$3. if s in w: llista0a++end((s,*'unt(w,s))) w=w0!e+la*e(s,%%) else: +ass k=k+1 !etu!n llista Problema 4 $1 +unt +e! *ada a+a!tat. 2issenCa una funci impura que donada una llista im8rincada que representa una matriu intercanvi les files parells per les files senars !e suposa que la matriu donada t6 un nom8re de files parells 4.a) Kmplementa un parell de doctest per aquesta funci impura def inte!*anviafiles (mat): MMM 222 m= $$1, 2, 3., $4, 6, N., $L, O, K., $10, 11, 12.. 222 inte!*anviafiles (m) 222 +!int m $$4, 6, N., $1, 2, 3., $10, 11, 12., $L, O, K.. 222 += $$N, 6., $3, 4., $1, 1., $L, O., $2, 3., $K, 6.. 222 inte!*anviafiles (+)

Examen inventat 1 222 +!int + $$3, 4., $N, 6., $L, O., $1, 1., $K, 6., $2, 3.. MMM 4.b) 2issenCa la funci def inte!*anviafiles (mat): nf = len (mat) f'! i in !an#e(0,len (mat),2): mat$i., mat$i+1.= mat$i+1., mat$i.

You might also like