|
|
|
|
| |
|
Vikyg13 |
Gli altri esercizi sono praticamente uguali a part ... |
21-02-2011 10:11 |
|
|
Vikyg13 |
.arcimaestro.
Registered: Feb 2006
Posts: 290 (0.04 al dì)
Location:
Corso: Comunicazione Digitale
Anno: Primo
Time Online: 3 Days, 1:12:06: [...]
Status: Offline
Edit | Report | IP: Logged |
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
|
21-02-2011 10:11 |
|
|
| |
|
kirka85 |
ecco l'ese 1.5, cmq per me sti esercizietti nn son ... |
21-02-2011 11:04 |
|
|
kirka85 |
.illuminato.
Registered: Jun 2005
Posts: 174 (0.02 al dì)
Location: Milano
Corso: Informatica per la Comunicazione
Anno: 2
Time Online: 6 Days, 19:03:17 [...]
Status: Offline
Edit | Report | IP: Logged |
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')
__________________
|
21-02-2011 11:04 |
|
|
| |
|
maXmo |
Qualcuno di voi sa perché va in overflow questo e ... |
21-02-2011 11:09 |
|
|
maXmo |
.fedelissimo.
Registered: Nov 2006
Posts: 49 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 8:22:23 [...]
Status: Offline
Edit | Report | IP: Logged |
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()
|
21-02-2011 11:09 |
|
|
| |
|
Vikyg13 |
@kirka: Ho frequentato poco. Comunque sì i temi d ... |
21-02-2011 11:56 |
|
|
Vikyg13 |
.arcimaestro.
Registered: Feb 2006
Posts: 290 (0.04 al dì)
Location:
Corso: Comunicazione Digitale
Anno: Primo
Time Online: 3 Days, 1:12:06: [...]
Status: Offline
Edit | Report | IP: Logged |
@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
@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.
|
21-02-2011 11:56 |
|
|
| |
|
maXmo |
Innanzitutto grazie per la risposta...mi ha fulmin ... |
21-02-2011 12:39 |
|
|
maXmo |
.fedelissimo.
Registered: Nov 2006
Posts: 49 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 8:22:23 [...]
Status: Offline
Edit | Report | IP: Logged |
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!
|
21-02-2011 12:39 |
|
|
| |
|
kirka85 |
ecco , ma perchè quindi gli esercizi e le slide s ... |
21-02-2011 12:53 |
|
|
kirka85 |
.illuminato.
Registered: Jun 2005
Posts: 174 (0.02 al dì)
Location: Milano
Corso: Informatica per la Comunicazione
Anno: 2
Time Online: 6 Days, 19:03:17 [...]
Status: Offline
Edit | Report | IP: Logged |
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+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
__________________
|
21-02-2011 12:53 |
|
|
| |
|
maXmo |
Direi perfette ;) durante l'esame abbiamo a dispos ... |
21-02-2011 13:12 |
|
|
maXmo |
.fedelissimo.
Registered: Nov 2006
Posts: 49 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 8:22:23 [...]
Status: Offline
Edit | Report | IP: Logged |
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
Last edited by maXmo on 21-02-2011 at 14:16
|
21-02-2011 13:12 |
|
|
| |
|
Vikyg13 |
La mia versione dell'es2.2
... |
21-02-2011 14:53 |
|
|
Vikyg13 |
.arcimaestro.
Registered: Feb 2006
Posts: 290 (0.04 al dì)
Location:
Corso: Comunicazione Digitale
Anno: Primo
Time Online: 3 Days, 1:12:06: [...]
Status: Offline
Edit | Report | IP: Logged |
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()
|
21-02-2011 14:53 |
|
|
| |
|
maXmo |
Ecco la mia interpretazione della funzione di Tayl ... |
21-02-2011 15:53 |
|
|
maXmo |
.fedelissimo.
Registered: Nov 2006
Posts: 49 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 8:22:23 [...]
Status: Offline
Edit | Report | IP: Logged |
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)
|
21-02-2011 15:53 |
|
|
| |
|
maXmo |
Ecco la mia interpretazione dell'es1.3 degli eserc ... |
22-02-2011 10:59 |
|
|
maXmo |
.fedelissimo.
Registered: Nov 2006
Posts: 49 (0.01 al dì)
Location:
Corso:
Anno:
Time Online: 8:22:23 [...]
Status: Offline
Edit | Report | IP: Logged |
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'})
|
22-02-2011 10:59 |
|
|
| |
|
fra78mi |
Ciao ragazzi, anche io studente lavoratore e vorre ... |
23-02-2011 13:41 |
|
|
fra78mi |
.amico.
Registered: Sep 2002
Posts: 35 (0.00 al dì)
Location: Milano
Corso: informatica per la comunicazione
Anno: 1
Time Online: 13:14:59 [...]
Status: Offline
Edit | Report | IP: Logged |
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
|
23-02-2011 13:41 |
|
|
| |
|
Vikyg13 |
Dipende a che livello stai tu di Python e di progr ... |
23-02-2011 14:00 |
|
|
Vikyg13 |
.arcimaestro.
Registered: Feb 2006
Posts: 290 (0.04 al dì)
Location:
Corso: Comunicazione Digitale
Anno: Primo
Time Online: 3 Days, 1:12:06: [...]
Status: Offline
Edit | Report | IP: Logged |
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
|
23-02-2011 14:00 |
|
|
| |
|
tooler |
ma in quello sulle matrici usi numpy?? ragazzi ma ... |
23-02-2011 18:16 |
|
|
tooler |
.fedelissimo.
Registered: Feb 2005
Posts: 46 (0.01 al dì)
Location:
Corso: comunicazione digitale
Anno:
Time Online: 9:48:45 [...]
Status: Offline
Edit | Report | IP: Logged |
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..
Last edited by tooler on 23-02-2011 at 18:18
|
23-02-2011 18:16 |
|
|
| |
|
kirka85 |
@tooler: ok quindi niente numpy all'esame... ma po ... |
24-02-2011 09:48 |
|
|
kirka85 |
.illuminato.
Registered: Jun 2005
Posts: 174 (0.02 al dì)
Location: Milano
Corso: Informatica per la Comunicazione
Anno: 2
Time Online: 6 Days, 19:03:17 [...]
Status: Offline
Edit | Report | IP: Logged |
@tooler: ok quindi niente numpy all'esame... ma possiamo usare slide e internet?
posta tuttto quello che hai, ci sarebbe di grande aiuto...grazie
__________________
|
24-02-2011 09:48 |
|
|
| |
|
tooler |
internet??
... |
24-02-2011 14:20 |
|
|
tooler |
.fedelissimo.
Registered: Feb 2005
Posts: 46 (0.01 al dì)
Location:
Corso: comunicazione digitale
Anno:
Time Online: 9:48:45 [...]
Status: Offline
Edit | Report | IP: Logged |
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à..
|
24-02-2011 14:20 |
|
|
| |
|
All times are GMT. The time now is 06:36. |
|
|
|
|
|
|
|
| |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|