.dsy:it. Pages (4): « 1 [2] 3 4 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Programmazione avanzata (http://www.dsy.it/forum/forumdisplay.php?forumid=437)
-- esercizi (http://www.dsy.it/forum/showthread.php?threadid=40010)


Posted by Vikyg13 on 21-02-2011 10:11:

Gli altri esercizi sono praticamente uguali a parte il 4 che ha qualche differenza nella moltiplicazione delle matrici (gli altri mi sembrano molto simili):

code:
import functools def print_matrix(m): s = '' for i in range(0,len(m)): s += "| {0} |\n".format(m[i]) return s def id_matrix(): try: size = int(input("Inserisci la dimensione della matrice: ")) m = [[1 if(x==y) else 0 for x in range(size)] for y in range(size)] return "Matrice identita'\n{0}".format(print_matrix(m)) except: return "Errore. Devi inserire un numero intero" def square_matrix(): try: size = int(input("Inserisci la dimensione della matrice: ")) n = 1 m = [[(n*(x+1))+(y*size) for x in range(size)] for y in range(size)] return "Matrice n*n\n{0}".format(print_matrix(m)) except: return "Errore. Devi inserire un numero intero" def trasposta_matrix(m): mt = [[m[j][i] for j in range(len(m))] for i in range(len(m[0]))] return "Matrice\n{0}\nMatrice trasposta\n{1}".format(print_matrix(m),print_matrix(mt)) #definisco la funzione da usare con reduce() def sum(x,y): return x+y def moltiplicazione_matrici(m1,m2): try: if len(m1[0]) == len(m2): mf = [] #con le comprehension faccio la moltiplicazione fra righe e colonne mf = [ [ [m1[i][j]*m2[j][x] for j in range(len(m1[0]))] for x in range(len(m2[0])) ] for i in range(len(m1)) ] #con programmaz. funzionale sommo i risultati dei prodotto ottenendo il risultato finale prodotto = [ [functools.reduce(sum, mf[i][j]) for j in range(len(mf[0]))] for i in range(len(mf)) ] return "Prodotto fra {0} * {1}\n{2}".format(m1,m2,prodotto) else: return "Prodotto non eseguibile" except: return "Le matrici da moltiplicare sono errate"


L'esercizio 5 manca pure a me
Poi posto gli esercizi del lab 2


Posted by kirka85 on 21-02-2011 11:04:

ecco l'ese 1.5, cmq per me sti esercizietti nn sono per niente banali o facili, e rispetto ai temi d'esame dell'anno scorso sembrano uno scherzo...
Vikyg13 hai frequentato le lezioni? io sono studentessa lavoratrice e davvero mi sembra un esame tostissimo...

code:
##Similarly to the ls-l example please implement: ## ## 1. The cat command, i.e., a command that given a list of files prints their content on the terminal (man cat to get more info). ## 2. The chmod command, i.e., a command that permits to change the access mode of a given group of files (man chmod to get more info) ## 3. The more command, i.e., a command that given a file prints its content 30 rows at a time and way a keystroke after every 30 rows to print the next 30. ## import os, stat def cat(filename): #1 '''Print a file to the standard output.''' f = open(filename, "r") flag=True while flag: line = f.readline() if len(line) == 0: flag=False print (line) f.close() def more(filename): #3 f = open(filename, "r") cont=1 flag=True while cont<31 and flag: line = f.readline() cont=cont+1 if len(line) == 0: flag=False if cont == 31: k=input('[more]') cont=1 print (line) f.close() if __name__=='__main__': cat('Matrix.py') os.chmod('hello.py', stat.S_ISUID) #2 more('Matrix.py')

__________________
:bubble:


Posted by maXmo on 21-02-2011 11:09:

Qualcuno di voi sa perché va in overflow questo es :? a livello di logica l'ho riguardato mille volte ma non capisco perché dopo un po' che gira a cercare il numero divisibile per tutti i numeri da 1 a 20 sembra non trovarlo mai :?

code:
numerocorrente = 1 def controlladivisione(): global numerocorrente divisibile = True for numero in [y for y in range(1,21)]: if numerocorrente % numero !=0: divisibile = False numerocorrente+=1 break if divisibile == True: print(numerocorrente) return True check = lambda: controlladivisione()==True or check() if __name__ == "__main__": check()


Posted by Vikyg13 on 21-02-2011 11:56:

@kirka: Ho frequentato poco. Comunque sì i temi d'esame non sono per nulla facili e anche io ho trovato ostici questi esercizi qui di laboratorio.
L'esame è tostissimo, l'anno scorso lo hanno passato veramente in pochi (mi pare soltanto in 5 in tutto l'anno). Speriamo di riuscire a passarlo prima o poi :D

@max: io quell'esercizio l'ho interpretato come il numero più piccolo divisibile per entrambi i numeri 1 e 20, anche perchè non so se esiste un numero divisibile per tutti i numeri da 1 a 20, credo proprio di no...
per come l'ho interpretato io la soluzione è:

code:
def es02(): return min(filter(lambda n: n%1==0 and n%20==0, range(1,100)))


Anche perchè per come lo imposti tu, a parte che

code:
for numero in range(1,21)


non c'è bisogno della list comprhension.
Il tuo programma esegue 1%1 che è 0 quindi non incrementa numero corrente, quindi 1%2 che è != 0, quindi 2%3 ecc...
la variabile non sarà mai True in sostanza e quindi la ricorsione check() va all'infinito, ecco perchè.

Spero di aver detto giusto.


Posted by maXmo on 21-02-2011 12:39:

Innanzitutto grazie per la risposta...mi ha fulminato un'idea, come ho fatto a non pensarci prima grrrr...si tratta di trovare il Minimo Comune Multiplo!!! Quindi si tratta di scrivere solo una funzione che trovi tutti i fattori, comuni o non comuni, e moltiplicarli tra di loro ciascuno preso una sola volta con l’esponente più piccolo!


Posted by kirka85 on 21-02-2011 12:53:

ecco , ma perchè quindi gli esercizi e le slide sono in inglese? per facilitarci :)
Io ho inteso che bisogna trovare il numero più piccolo divisibile per tutti i numeri tra 1 e 20(Calculate the smallest number divisible by each of the numbers 1 to 20)

ecco la mia soluzione all'esercizio 2.1, ho preso spunto da quihttp://www.geekality.net/garage-sale/project-euler-c/

code:
##Write the solutions for the following quizzes by using functional programming: ## ## 1. Sum all the natural numbers below one thousand that are multiples of 3 or 5. ## 2. Calculate the smallest number divisible by each of the numbers 1 to 20. ## 3. Calculate the sum of the number 2^1000 ## 4. Calculate the first term in the Fibonacci sequence to contain 1000 digits. import functools, fractions, math somma=functools.reduce(lambda x, y: x+y, filter(lambda x: ((x % 5 == 0) or (x % 3 == 0) ), range(1,1000))) #1 print (somma) SmallestNumberDivisible=functools.reduce(lambda x, y: x*y/fractions.gcd(x,y), range(1,21)) #2 print (SmallestNumberDivisible) s=functools.reduce(lambda x,y:x+y, list(str(2**1000))) #3 print (s) aureo=1.6180339887 #4 fibc=lambda n: (aureo**n)/(5**(1/2)) #formula compatta e approssimativa fib=lambda n: n if n < 2 else fib(n-1) + fib(n-2) lunghezza=len(str(fibc(1000))) #dopo 1000 overflow e cmq dovrei andare avanti usando un ciclo trovando quello di lunghezza mille digit=1000 n=( digit+ ((math.log(5)/2)-1) )/math.log(aureo) #formula inversa,in input la lunghezza,output digit print (n) #2077

__________________
:bubble:


Posted by maXmo on 21-02-2011 13:12:

Direi perfette ;) durante l'esame abbiamo a disposizione slides, documentazione e internet? perché a volte mi ritrovo a dovermi documentare su ciò che riguarda l'esercizio (es. Fibonacci) per poterlo risolvere..

Ne approfitto per aggiungere la mia visione dell'esercizio pa-es2_2 quello della frequenza delle parole nel testo:

code:
wordsandcounters = {} def leggituttoiltesto(nomefile): data_file = open(nomefile, 'r') for line in data_file: words = line.rsplit(' ') for word in words: word.upper() if not word in wordsandcounters: wordsandcounters[word] = 1 else: contatore = wordsandcounters.get(word) wordsandcounters[word] = contatore+1 print(wordsandcounters.items()) if __name__ == '__main__': leggituttoiltesto('README.TXT')


L'unica cosa che non fa questo programma è contare la punteggiatura come se stante..qualche dritta? non vorrei dover usare le regex x_x


Posted by Vikyg13 on 21-02-2011 14:53:

La mia versione dell'es2.2
Separa la punteggiatura, mi dà qualche problema ma per le parole con l'accento, non ho trovato codifica più adatta

code:
import string, re, codecs def split_word(input_file): return reduce(lambda x,y: x+y, [ [l.strip() for l in re.split('(\W+)', line) if l.strip() ] for line in input_file ] ) def to_lower(lst): return [elem.lower() for elem in lst] def count_elem(lst): return dict([ (word,lst.count(word)) for word in lst ] ) def diz_tostring(d): s = '' for elem in d: s += '{0}= {1}\n'.format(elem,d[elem]) return s def read_count_file(f): input_file = codecs.open(f,'r') return diz_tostring( count_elem(to_lower(split_word(input_file))) ) input_file.close()


Posted by maXmo on 21-02-2011 15:53:

Ecco la mia interpretazione della funzione di Taylor per il calcolo di sinx...non ne sono sicuro al 100% ma ho seguito la regola di wikipedia e trasposta così com'era la sommatoria tramite un for...

code:
import math from functools import reduce import operator def sinxtaylor(x,n): senx = 0 for numero in range(1,n+2,2): print(numero) senx += pow(x,n)/reduce(operator.mul,[i for i in range(n,0,-1)]) print(senx) if __name__ == '__main__': sinxtaylor(1,3)


Posted by maXmo on 22-02-2011 10:59:

Ecco la mia interpretazione dell'es1.3 degli esercizi pa-es4.html
Non mi è chiaro cosa debba modificare di questo codice per soddisfare anche la richiesta "the target should be a name containing an instance of the child class"..il file va salvato con nome pa_es4_1.py

code:
import re '''mi basta controllare la metà della parola''' import operator class stringheestese: __metaclass__=str def controllapalindroma(word): #1 p = re.compile(r'(\W)', re.IGNORECASE) word = p.sub('',word) print(word) if (len(word)%2!=0): '''halunghezzadispari''' primameta = word[0:int(len(word)/2)+1] secondameta= word[int(len(word)/2):int(len(word))] else: primameta = word[0:int(len(word)/2)] secondameta= word[int(len(word)/2):int(len(word))] secondareverse = "" for i in range(len(secondameta),0,-1): secondareverse+=secondameta[i-1:i] if secondareverse == primameta: print("la parola è palindroma") else: print("non è palindroma") def subtractletters(command): #2 print(command.index("-")) word = command[1: command.index("-")-1] letters = command[command.index("-")+2:len(command)-1] p = re.compile("(["+letters+"])+") print("originale: "+word) word = p.sub('',word) print("rimosse le lettere "+ letters + ": " + word) def dalistatrovaanagrammireciproci(dizionariodistringh e): #3 for current_key in dizionariodistringhe: '''preparo il dizionario della parola che sto analizzando con lettere e contatori''' tempdict1 = {} for letter in dizionariodistringhe[current_key]: '''se ce già aggiorno il contatore''' if letter in tempdict1: tempcounter = tempdict1[letter] tempdict1.pop(letter) tempdict1[letter] = tempcounter+1 else: tempdict1[letter] = dizionariodistringhe[current_key].count(letter) '''preparo il dizionario di ogni nuova parola e lo confronto con quello che ho gia''' tempdict2 = {} for key in dizionariodistringhe: if key != current_key: for letter in dizionariodistringhe[key]: if letter in tempdict2: tempcounter = tempdict2[letter] tempdict2.pop(letter) tempdict2[letter] = tempcounter+1 else: tempdict2[letter] = dizionariodistringhe[key].count(letter) if tempdict1 == tempdict2: print(dizionariodistringhe[current_key] + " è l'anagramma di " + dizionariodistringhe[key]) tempdict2 = {} if __name__ == '__main__': import pa_es4_1 pa_es4_1.stringheestese.controllapalindroma("gor.,... r rog") pa_es4_1.stringheestese.subtractletters('"Walter Cazzola"-"abcwxyz"') pa_es4_1.stringheestese. dalistatrovaanagrammireciproci({'test1':'ciao','te st2':'addio','test3':'caio','test4':'oiac','test5' :'oddai'})


Posted by fra78mi on 23-02-2011 13:41:

Ciao ragazzi, anche io studente lavoratore e vorrei dare programmazione avanzata di Cazzola il 9/3 ... cominciando oggi a studiare secondo voi è fattibile?

Grazie

ciao
Francesco


Posted by Vikyg13 on 23-02-2011 14:00:

Dipende a che livello stai tu di Python e di programmazione in generale.

Diciamo che partendo da 0 con Python e da un livello medio-basso di competenze generali di programmazione secondo me ci vogliono almeno due mesi di studio. Poi dipende dalle capacità personali ovviamente, ma è un esame che richiede una conoscenza e una praticità con il linguaggio particolarmente elevata.
Per farsi un'idea ci sono i temi d'esame dell'anno scorso


Posted by tooler on 23-02-2011 18:16:

ma in quello sulle matrici usi numpy?? ragazzi ma all'esame non c'è numpy.

comunque bello il reduce sulla sum nella moltiplicazione di matrici! non ci avevo pensato

e in quelli sul funzionale.. ma itertools?!? è IL MODULO per la programmazione funzionale..

ma perchè nell'ultimo usi come metaclasse string?!?!?!?!?

io ho provato a rifare gli esercizi dei compiti in maniera un po' più KISS dei metodi del prof.. se a qualcuno interessa li posto..


Posted by kirka85 on 24-02-2011 09:48:

@tooler: ok quindi niente numpy all'esame... ma possiamo usare slide e internet?
posta tuttto quello che hai, ci sarebbe di grande aiuto...grazie

__________________
:bubble:


Posted by tooler on 24-02-2011 14:20:

internet??
scusa prima provi a usare numpy che è per il calcolo numerico e poi pensi a internet? vabeh..

no niente internet, le slide non lo so io non le ho mai usate, però c 'è il reference.. ragazzi imparate a usarlo, tutta la roba sui decoratori metaclassi e molte cose "idiomatiche" di sintassi ci sono sulle reference, bisogna guardarsele per capire dove sono!
e comunque a parte generatori metaclassi e decoratori di "python" c'è poco.. il più è risucire a fare gli esercizi.. se l'esame fosse in java non penso cambierebbe molto a livello di difficoltà..


All times are GMT. The time now is 02:59. Pages (4): « 1 [2] 3 4 »
Show all 46 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.