From alexxandro.medici a gmail.com Sun May 1 19:30:14 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Sun, 1 May 2016 19:30:14 +0200 Subject: [Corso Python3] Programma del primo incontro: Message-ID: Cose fare prima di venire in sede: tutto quello previsto nel punto zero sottostante Meglio qualche giorno prima e, se avete problemi, ci sentiamo anche qui in lista. PROGRAMMA PER SABATO 7 MAGGIO: Ore 14:30, arriviamo in sede. Portate i portatili :-) se li avete. 0) installazione di python3: su linux: su derivate debian: controllate se avete una 3.5 in repository, altrimenti scaricatevi il deb (è pieno il mondo) su altro (ma che cavolo le usate a fare?): boh, ma ci sono rpm e tgz in abbondanza per tutto. su windows: o vi installiamo linux in dual boot (soluzione migliore, l'ottimale sarebbe pianare windows e tornare al punto precedente) oppure potete installare python3 dal sito ufficiale: www.python.org oppure, e pare che in rete molti la preferiscano, Anaconda: https://www.continuum.io/downloads su mac: https://www.python.org/downloads/mac-osx/ 1) installazione di virtualenv con python3 (ambiente virtuale per sistemi Unix-like come linux e mac osx e dedicato a python, semplifica di molto le cose, su windows (orrore e ribrezzo :-) funziona pyenv.: https://docs.python.org/3/library/venv.html ricordo a tutti: bin/activate e, per uscire, deactivate 2) installazione di eric (5 o 6 è lo stesso) per macintosh: http://alternativeto.net/software/eric/?platform=mac per gli altri: http://eric-ide.python-projects.org/eric-download.html occhio al necessario software di supporto. 3) cominciamo davvero: Lanciare python3. Uscire da pyhon3 (ctrl-d) Rientriamo: gli operatori aritmetici di base. Le operazioni a linea di comando. La variabili: cosa sono e come funzionano: int, float, str. Caratteristiche essenziali. True e False le istruzioni (keyword) in python3.5 sono in tutto e per tutto solo 33 ma sabato ne vedremo solo 10. La funzione print() e la sintassi generale delle funzoni. la programmazione come sequenza di istruzione il controllo del flusso delle istruzioni ed i blocchi di istruzioni. if elif else (vaghi cenni a try) esempi e programmazione di esempi gli operatori di confronto. while for (e 'range' ed 'in') break i tipi composti: liste, dizionari, insiemi Se riusciamo a far tutto siamo bravi! Alex -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 3 13:29:11 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 3 May 2016 13:29:11 +0200 Subject: [Corso Python3] Integrazione.. Message-ID: Un saluto a quanti si sono aggiunti. Ed un'integrazione al programma per sabato: Tratteremo anche lo slicing, fondamentale per i cicli for :-) Un altro avviso: correremo ché da quel che ho visto sabato si può :-) Alex. p.s.: testi consigliabili, per chi ne ha voglia: In Inglese: per questo livello va benissimo anche solo la guida al linguaggio di Guido Van Rossum, liberamente scaricabile da: https://docs.python.org/3/tutorial/ L'ha scritta (e la mantiene aggiornata) il tizio che ha creato Python. Ed è (stranamente?) anche molto chiara. Non tratta argomenti o tecniche avanzate davvero, ma è anche completa per la programmazione di base ed assai divertente. In Italiano: In rete si trova anche una traduzione italiana della guida di Rossum, ma fa riferimento alla guida 2004. E dodici anni in questo campo hanno loro peso. Credo che il libro italiano più aggiornato (ed anche abbastanza approfondito, anche se qui e li va bene solo come spunto per altri approfondimenti) sia: Programmare con Python, guida completa. LSWR Editore, Milano 2014. ISBN 978-88-7895-024-8 € 41,57 sul sito dell'editore e su amazon prime, € 48,90 di copertina la versione cartacea. La digitale costa la metà. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 3 13:49:17 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 3 May 2016 13:49:17 +0200 Subject: [Corso Python3] Prenotazione presenza in sede sabato alle 14:30 Message-ID: Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in lista l'avviso della vostra eventuale presenza questo prossimo sabato. Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata del singolo incontro a due ore fare, come a dire, due classi. Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata poi effettiva ne potremo parlare assieme Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) Alex -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 3 22:17:10 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 3 May 2016 22:17:10 +0200 Subject: [Corso Python3] doppio corso... Message-ID: Pensavo che: Non tutti si ha lo stesso tempo libero per studiare e giocare oltre al lavoro, da qui l'idea di dividerci in due gruppi. Come: partire tutti assieme e poi, in base q quello che riuscite a seguirmi in un percorso con una velocità media variabile. chi si annoia per la lentezza: veloci, Chi non ha il tempo di studiare: lenti. Il risultato sarà lo stesso solo che alcuni ci avranno messo più tempo. E lo avranno forse appreso meglio: ricordo qui che capire è facile, apprendere (nel senso letterale di prendere e render proprio: padroneggiare) cioè saper usare un pieno, non è la stessa cosa. :-) -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Fri May 6 15:23:04 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Fri, 6 May 2016 15:23:04 +0200 Subject: [Corso Python3] non male :-) Message-ID: Sono, + o - la metà degli argomenti che vorrei trattare nel corso successivi. Corso, non incontro. Solo che lui ne parlerà per nove ore. Pochine, secondo me. http://www.oreilly.com/online-courses/python-beyond-basics.html?imm_mid=0e3658&cmp=em-prog-olreg-lp-oltrain_python_beyond_the_basics ps di passaggio: il suo costo è di 299 dollari :-) pps: dalla sua presentazione: He has started offering select online trainings, enabling students to benefit and learn at a fraction of the normal cost. Pura verità. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Thu May 12 23:15:07 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Thu, 12 May 2016 23:15:07 +0200 Subject: [Corso Python3] Come nstallare python3 su mac Message-ID: https://library.oreilly.com/book/0636920042921/the-hitchhikers-guide-to-python/6.xhtml?ref=toc#subsection.virtualenv -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Thu May 12 23:36:21 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Thu, 12 May 2016 23:36:21 +0200 Subject: [Corso Python3] Valgono in pieno il tempo che potrete dedicargli: Message-ID: un attimo datato, ma scritto davvero bene. Basilare, chiaro e con esercizi risolti: http://openbookproject.net/thinkcs/python/english3e/ Simpatico, editor on-line, grafica con python e assai curioso per le librerie che propone (l'argomento librerie lo affronteremo Sabato prossimo :-): http://interactivepython.org/runestone/static/thinkcspy/index.html -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Fri May 20 12:47:27 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Fri, 20 May 2016 12:47:27 +0200 Subject: [Corso Python3] python concurrency made easy... Message-ID: https://www.peterbe.com/plog/deco Vale la pena per Paolo, per gli altri: la posto qui perché, a naso, è una mezza figata. La debbo ancora testare e non credo sia thread-safe, ma ne vale la pena comunque. A. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Fri May 20 13:34:36 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Fri, 20 May 2016 13:34:36 +0200 Subject: [Corso Python3] =?utf-8?q?Fwd=3A_anche_questo_=C3=A8_carino_assai?= =?utf-8?q?_=3A-=29?= In-Reply-To: References: Message-ID: anche questo è assai carino, e di sono un sacco di casi in cui potrebbe essere davvero time-saving e semplificare il codice: http://mathamy.com/python-wats-mutable-default-arguments.html -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Fri May 20 16:00:35 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Fri, 20 May 2016 16:00:35 +0200 Subject: [Corso Python3] programma per sabato: Message-ID: 0) mi stavo domandando se forse sia meglio che vi dia dei compiti per casa? Che ne dite? Proposte? Commenti? Tutto è benvenuto! 1) riepilogo della struttura di una classe 2) i metodi sono funzioni interne ad una classe: prerequisiti e conseguenze 3) dentro alle funzioni: i parametri: posizionali *args e **kwargs defaults e conseguenze (memento sulla riscrittura dei defaults, vedi mail precedente) 5) analisi della struttura di un programma qual'è il problema? come si può risolvere? con un algoritmo? 6) programmazione top-down e down-top, vantaggi e svantaggi. esempi 7) le librerie -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Fri May 20 20:47:45 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Fri, 20 May 2016 20:47:45 +0200 Subject: [Corso Python3] vale la pena di esser letta.... Message-ID: https://docs.python.org/3.5/library/stdtypes.html?highlight=ellipsis -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Sat May 21 00:11:36 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Sat, 21 May 2016 00:11:36 +0200 Subject: [Corso Python3] suggerimento.. Message-ID: Avete un'idea su qualche vostro problema che implichi un calcolo? Soldi? Probabilità? Scelte e decisioni? Misure? Costi attuali a fronte di un prestito? Ok, avete già in mano quel che vi serve. Ingegneria elettromagnetica? Bio ingegneria ed analisi del dna? Mercati finanziari e trend? Semantica del linguaggio? Oroscopi? Grazie al cielo abbiamo le librerie. 60.000 ufficiali. Senza numero le altre. A domani. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From gluca.biondi a gmail.com Tue May 24 13:03:36 2016 From: gluca.biondi a gmail.com (Gianluca Biondi) Date: Tue, 24 May 2016 13:03:36 +0200 Subject: [Corso Python3] =?utf-8?q?Velocit=C3=A0_esecuzione_blocchi_if=2C_?= =?utf-8?q?try?= Message-ID: Buonasera a tutti!! Istruzioni: - creare un ambiente virtuale (prima lezione -> virtualenv --python=python3 env (env è la cartella in cui si sta installando) - source bin/activate (attiva l'ambiente virtuale) - pip install pygal (serve a generare i grafici) - copiare nella cartella virtuale il file allegato (test_execution_speed_class.py) - dare il comando python test_execution_speed_class.py - nella cartella dove avete messo il file verrà creata una cartella con il nome 'grafici' - apriteli con un browser (al visualizzatore di immagini di debian non piacciono tanto) L'uso di questo script è a vostro rischio e pericolo ;) (a me non ha mandato in fumo il pc ma non garantisco per il vostro) Si possono settare i parametri (da->a numero di elementi da testare, da->a probabilità di trovare eccezioni) modificando la riga 156 Saluti, Gianluca P.s.: c'è un bug... ogni tanto non formatta correttamente qualche nome di grafico... -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: -------------- parte successiva -------------- Un allegato non testuale è stato rimosso.... Nome: test_execution_speed_class.py Tipo: text/x-python Dimensione: 6713 bytes Descrizione: non disponibile URL: From alexxandro.medici a gmail.com Tue May 24 23:09:07 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 24 May 2016 23:09:07 +0200 Subject: [Corso Python3] ahi, ahi... Message-ID: Non vedo nessuno postare una soluzione o una domanda sul problema dei numeri romani... Ok. Allora faremo qualcosa di più tosto: Sabato cominceremo a scrivere una web-application. Useremo Django, Sqlite e più avanti un minimo di js e di html. Ormai le conoscenze di base per python le avete: basta solo applicarle. La cosa mi diverte e ve ne spiegherò il perché. A. :-) ps: altra cosa è ottimizzare il codice, ma faremo anche questo. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From riccardo.bernardi a rocketmail.com Wed May 25 12:06:51 2016 From: riccardo.bernardi a rocketmail.com (riccardo.bernardi) Date: Wed, 25 May 2016 12:06:51 +0200 Subject: [Corso Python3] Caricare moduli python Message-ID: Salve lista sono uno dei partecipanti del sabato al corso di python e mi sto provando a dilettare col linguaggio , dovrei installare un modulo aggiuntivo chiamato speech-recognition su python in un sistema Linux ma nonostante sembra che lo carichi poi quando cerco di importarlo mi dà errore . Consigli , commenti e idee? Inviato da Riccardo bernardi. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Wed May 25 22:50:14 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Wed, 25 May 2016 22:50:14 +0200 Subject: [Corso Python3] :-) Message-ID: https://docs.python.org/3.5/glossary.html#term-eafp e la voce immediatamente precedente al link :-) -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Thu May 26 16:24:06 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Thu, 26 May 2016 16:24:06 +0200 Subject: [Corso Python3] =?utf-8?q?Ovvio_che_non_=C3=A8_una_gara=2C_ma_?= =?utf-8?q?=C3=A8_indicativo=3A?= Message-ID: http://pypl.github.io/PYPL.html # nel senso che è, appunto, indicativo. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Thu May 26 16:41:05 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Thu, 26 May 2016 16:41:05 +0200 Subject: [Corso Python3] Carino, per installare python su win: Message-ID: https://sites.google.com/site/pydatalog/python/pip-for-windows -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 16:49:26 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 16:49:26 +0200 Subject: [Corso Python3] Numeri romani... Message-ID: Beh, in effetti non era proprio così semplice come la ricordavo. Nella prossima mail vi mando il programma che ho scritto io. Lo useremo come modello di lavoro per il prossimo incontro che avrà come argomenti: unittest che è (una delle) la libreria per il controllo del corretto funzionamento dei programmi il debugging in pratica. Alex. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 16:51:46 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 16:51:46 +0200 Subject: [Corso Python3] programma per la conversione da a numeri romani. Message-ID: e ricordatemi l'argomento: stili di programmazione, nel programma che vi spedirò nella prossima mail ne ho usato tre diversi, apposta. Alex -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 16:57:15 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 16:57:15 +0200 Subject: [Corso Python3] programma numeri romani Message-ID: ''' traduce numeri romani ,in decimali e viceversa ''' #from copy import copy import unittest num_romani = 'MDCLXVI' # ammessi è un dizio con: # chiave = lettera, valore una tupla con: # ( valore decimale, # num_romani ammessi nel precedente, # num_romani ammessi successivi # ordine importanza scala valori ammessi = { 'alfa' :1001, 'M' :1000, 'D' : 500, 'C' : 100, 'L' : 50, 'X' : 10, 'V' : 5, 'I' : 1} def controllaLegalita(numax): ''' torna None se condizioni di errore il valore decimale se corretto ''' if numax == "": return # caso della stringa vuota global stoppa global num num = numax.upper() # contiene la stringa in caratteri romani # il metodo di stringa .upper() ritorna laicita # la medesima stringa in numeri maiuscoli # scoP = 'alfa' # indica il valore massimo nello sconto # ricorda che quando un valore è usato come sconto # non può più essere usato come valore in aggiunta: # es: se MCM -> non ammesso MCMC # altrimenti sarebbe ammesso anche MCCM # quindi un valore usato come aggiunta non può più # essere usato come sconto. # adjP = 'alfa' # indica il valore massimo in aggiunta # sia con bloP che con adjP impostati così non si # sbaglia altrimenti nel primo passaggio # si esclude tutto e bisognerebbe riscrivere # il codice per gestire tutte le eccezioni relative # adjPP = 'alfa' è il backup per gli sconti # diFila = 0 # mantiene un contatore (counter abbeviato ctr in # gergo) al numero di caratteri inseriti di # fila -> max 3 # valorD = 0 # mantiene il conto del valore decimale complessivo # da tornare per la stampa ed il test_parto_da_qui # qui si sistema scoP: if len(num) > 1 and ammessi[num[0]] < ammessi[num[1]]: scoP = num[1] if stoppa == num: zz = stoppa else: scoP = 'alfa' scoP = 'alfa' adjPP = adjP = 'alfa' diFila = valorD = 0 for pos, car in enumerate(num): ''' fa la scansione di tutta la stringe in num per sottoporla ad esame di correttezza ''' # for pos, car in enumerate(num): # abbiamo avuto sia posizione che carattere, # -> enumerate un iterabile torna # la posizione e l'elemento # in quella posizione if car not in num_romani: # non esiste in romano: if stoppa == num: zz = stoppa return if ammessi[adjP] >= ammessi[car]: # adjP => car. Ok. Caso semplice: # sono ammessi IN AGGIUNTA solo valori minori/eguali dell'ultimo # qui si gestisce il caso del minore # valore inserito IN AGGIUNTA: ok MMCC e MMCM no MMCCM # Per ovviare al primo inserimento nel primo giro è # adjP = 'alfa', valore fittizio massimo ''' a0 = ammessi[car] a1 = ammessi[scoP] a2 = ammessi[adjPP] a3 = ammessi[adjP] a4 = ammessi[car] if stoppa == num: zz = stoppa a0 = scoP a1 = ammessi[scoP] a2 = ammessi[scoP] a3 = ammessi[scoP] a4 = ammessi[car] ''' if ammessi[scoP] <= ammessi[car]: # ma sono ammessi IN AGGIUNTA solo valori minori dell'ultimo # valore inserito COME SCONTO: ok MCML e CXCV no CXCX # Per ovviare al primo inserimento nel primo giro è # adjP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return # ok, tutto bene, aggiorno i valori di adjP a quello inserito: # if ammessi[adjP] == ammessi[car]: if adjP == car: # caso inserimento eguale all'ultimo # controllo la fila: if car in 'DLV': # fanculo perché non si possono duplicare DLV: if stoppa == num: zz = stoppa return if diFila == 2: # non vi possono essere più di tre num_romani eguali di fila # ricorda che il conteggio parte da 0 if stoppa == num: zz = stoppa return # ed incremento il contatore diFila +=1 else: # spezzo la fila per ricominciare da zero: diFila = 0 adjPP = adjP # se dopo avrò uno sconto dovrò riaggiornare adjP! adjP = car if stoppa == num: zz = stoppa valorD += ammessi[car] continue # resta adjP < car e l'if sotto non è necessario: # if ammessi[adjP][1] > ammessi[car][1]: # ovvio che siamo di fronte ad una richiesta di sconto. # che fa riferimento al valore precedente ''' ATTENZIONE QUI SOTTO ALLA DIFFERENZA TRA adjP e adjPP sostanzialmente: adjP -> aggiunto precedente adjPP -> aggiunto prima del precedente ''' if stoppa == num: zz = stoppa if ammessi[adjPP] < ammessi[car]: # sono ammessi SCONTABILI solo valori minori o eguali # dell'ultimo valore inserito IN AGGIUNTA, in questo caso: # ammessi[adjPP][1] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return if not(ammessi[car]//10 <= ammessi[adjP] < ammessi[car]//2): # sono ammessi sconti solo eguali o superiori # ad un decimo del valore da scontare # e minori della metà dello stesso if stoppa == num: zz = stoppa return # sono ammessi IN SCONTO solo valori minori dell'ultimo # valore inserito IN AGGIUNTA, in questo caso: ammessi[adjPP][1] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if ammessi[adjPP] < ammessi[adjP]: # sono ammessi SCONTI solo valori minori # dell'ultimo valore inserito IN AGGIUNTA, in questo caso: # ammessi[adjPP] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return # aggiorno i valori: valorD += ammessi[car] -2 * ammessi[adjP] # adjP due volte perché una era stata caricata prima di sapere che # era da scontare. scoP = adjP adjP = car # ignoriamo adjPP: qui non interessati al valore dello sconto diFila = 2 # non si può inserire un MCM continue return valorD def parto_da_qui(nome): global stoppa a = '' #while True: #a = input("un numero romano or 'fine' ?") #if a == 'fine': # break a = controllaLegalita(nome) print(a) return a def parto_da_qui(nome): global stoppa a = '' #while True: #a = input("un numero romano or 'fine' ?") #if a == 'fine': # break a = controllaLegalita(nome) print(a) return a def int_to_roman(input): """ Convert an integer to a Roman numeral. """ # questa funzione l'ho trovata in rete qui l'ho solo adattata: # https://www.safaribooksonline.com/library/view/python-cookbook/0596001673/ch03s24.html ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') result = [] for i in range(len(ints)): count = int(input / ints[i]) result.append(nums[i] * count) input -= ints[i] * count return ''.join(result) class perTest(unittest.TestCase): global stoppa stoppa = 'i' stoppa = stoppa.upper() def test_parto_da_qui(self): for j in range(1, 4000): rom = (int_to_roman(j)) print(j, rom) self.assertEqual(j, parto_da_qui(rom)) if __name__ == '__main__': unittest.main() -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 17:53:11 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 17:53:11 +0200 Subject: [Corso Python3] Qualche commento? Message-ID: Se date un'occhiata al programma, in coda vi è un link ad un sito web. Il programma li usato è eccellente: scritto in puro stile python.. Purtroppo però non adatto al tipo di cose che di cui vi vorrò parlare sabato prossimo. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From gluca.biondi a gmail.com Tue May 31 17:58:48 2016 From: gluca.biondi a gmail.com (Gianluca Biondi) Date: Tue, 31 May 2016 17:58:48 +0200 Subject: [Corso Python3] Caricare moduli python Message-ID: > >Il 25 maggio 2016 12:06, riccardo.bernardi ha scritto: > Salve lista sono uno dei partecipanti del sabato al corso di python e mi sto > provando a dilettare col linguaggio , dovrei installare un modulo aggiuntivo > chiamato speech-recognition su python in un sistema Linux ma nonostante > sembra che lo carichi poi quando cerco di importarlo mi dà errore . Consigli > , commenti e idee? > > Inviato da Riccardo bernardi. > In virtualenv con 'pip install speech_recognition' lo installa senza problemi..... Se entri in python e fai '>>>import speech_recognition' ti da errore?? (occhio che se cerchi di usare una delle funzionalità aggiuntive tipo il microfono hai bisogno di altre librerie che in virtualenv non è così semplice installare) Gian From alexxandro.medici a gmail.com Tue May 31 18:23:13 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 18:23:13 +0200 Subject: [Corso Python3] =?utf-8?b?RWNjbywgY29zw6wgZnVuemlvbmEuLi4gKMOo?= =?utf-8?q?_quello_del_sito=2C_molto_bello=2E_Il_programma_intendo?= =?utf-8?q?=29?= Message-ID: def int_to_roman(input): """ Convert an integer to a Roman numeral. """ #if not isinstance(input, type(1)): #raise TypeError, "expected integer, got %s" % type(input) #if not 0 < input < 4000: #raise ValueError, "Argument must be between 1 and 3999" ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') result = [] for i in range(len(ints)): count = int(input / ints[i]) result.append(nums[i] * count) input -= ints[i] * count return ''.join(result) def roman_to_int(input): """ Convert a Roman numeral to an integer. """ #if not isinstance(input, type("")): #raise TypeError, "expected string, got %s" % type(input) input = input.upper( ) nums = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1} sum = 0 for i in range(len(input)): try: value = nums[input[i]] # If the next place holds a larger number, this value is negative if i+1 < len(input) and nums[input[i+1]] > value: sum -= value else: sum += value except KeyError: pass # easiest test for validity... print('vado a romano con ', sum) if int_to_roman(sum) == input: print(sum) else: print('errore') while True: a = input('Romano:') if a == 'e': break roman_to_int(a) -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 18:25:35 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 18:25:35 +0200 Subject: [Corso Python3] =?utf-8?b?cGVyw7IuLi4u?= Message-ID: Mi accordo ora che ha imbrogliato non poco: ha strutturato tutte le possibili combinazioni di lettere romane ed il loro valore: ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') :-( -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 18:42:40 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 18:42:40 +0200 Subject: [Corso Python3] =?utf-8?q?per=C3=B2_quel_che_scrive_qui_=C3=A8_as?= =?utf-8?q?sai_corretto=3A?= Message-ID: This leads to a general idea that you should keep in mind whenever you are coding bidirectional transformation functions between two formats, where the functions are inverses of each other. When one of the directions has a more clearly specified transformation algorithm, you can verify the function that implements the more loosely specified transformation by checking that the other function does indeed result in the original input value when applied to the candidate result. If only the canonical form is to be accepted, this pattern lets you easily reject plausible but noncanonical inputs that it might otherwise be difficult to detect. -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From gluca.biondi a gmail.com Tue May 31 18:55:21 2016 From: gluca.biondi a gmail.com (Gianluca Biondi) Date: Tue, 31 May 2016 18:55:21 +0200 Subject: [Corso Python3] Lezione del 28-05-2016 Message-ID: Ciao, mi stavo chiedendo se sabato scorso avete fatto lezione e che argomenti avete affrontato in modo da rimettermi in pari. if (avete_fatto_lezione) and (ci_sono_argomenti_nuovi): return APPUNTI!! Grazie Gian From alexxandro.medici a gmail.com Tue May 31 19:23:48 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 19:23:48 +0200 Subject: [Corso Python3] programma riletto con commenti aggiuntivi: Message-ID: ''' traduce numeri romani ,in decimali e viceversa ''' #from copy import copy import unittest num_romani = 'MDCLXVI' # ammessi è un dizio con: # chiave = lettera, valore una tupla con: # ( valore decimale, # num_romani ammessi nel precedente, # num_romani ammessi successivi # ordine importanza scala valori ammessi = { 'alfa' :1001, 'M' :1000, 'D' : 500, 'C' : 100, 'L' : 50, 'X' : 10, 'V' : 5, 'I' : 1} def controllaLegalita(numax): ''' torna None se condizioni di errore il valore decimale se corretto ''' if numax == "": return # caso della stringa vuota global stoppa global num num = numax.upper() # contiene la stringa in caratteri romani # il metodo di stringa .upper() ritorna laicita # la medesima stringa in numeri maiuscoli # scoP = 'alfa' # indica il valore massimo nello sconto # ricorda che quando un valore è usato come sconto # non può più essere usato come valore in aggiunta: # es: se MCM -> non ammesso MCMC # altrimenti sarebbe ammesso anche MCCM # quindi un valore usato come aggiunta non può più # essere usato come sconto. # adjP = 'alfa' # indica il valore massimo in aggiunta # sia con bloP che con adjP impostati così non si # sbaglia altrimenti nel primo passaggio # si esclude tutto e bisognerebbe riscrivere # il codice per gestire tutte le eccezioni relative # adjPP = 'alfa' è il backup per gli sconti # diFila = 0 # mantiene un contatore (counter abbeviato ctr in # gergo) al numero di caratteri inseriti di # fila -> max 3 # valorD = 0 # mantiene il conto del valore decimale complessivo # da tornare per la stampa ed il test_parto_da_qui # qui si sistema scoP: # INUTILE: if len(num) > 1 and ammessi[num[0]] < ammessi[num[1]]: scoP = num[1] if stoppa == num: zz = stoppa else: scoP = 'alfa' # VISTO CHE QUI SOTTO RISCRIVO scoP: scoP = 'alfa' adjPP = adjP = 'alfa' diFila = valorD = 0 for pos, car in enumerate(num): ''' fa la scansione di tutta la stringe in num per sottoporla ad esame di correttezza ''' # for pos, car in enumerate(num): # abbiamo avuto sia posizione che carattere, # -> enumerate un iterabile torna # la posizione e l'elemento # in quella posizione if car not in num_romani: # non esiste in romano: if stoppa == num: zz = stoppa return if ammessi[adjP] >= ammessi[car]: # adjP => car. Ok. Caso semplice: # sono ammessi IN AGGIUNTA solo valori minori/eguali dell'ultimo # qui si gestisce il caso del minore # valore inserito IN AGGIUNTA: ok MMCC e MMCM no MMCCM # Per ovviare al primo inserimento nel primo giro è # adjP = 'alfa', valore fittizio massimo ''' a0 = ammessi[car] a1 = ammessi[scoP] a2 = ammessi[adjPP] a3 = ammessi[adjP] a4 = ammessi[car] if stoppa == num: zz = stoppa a0 = scoP a1 = ammessi[scoP] a2 = ammessi[scoP] a3 = ammessi[scoP] a4 = ammessi[car] ''' if ammessi[scoP] <= ammessi[car]: # ma sono ammessi IN AGGIUNTA solo valori minori dell'ultimo # valore inserito COME SCONTO: ok MCML e CXCV no CXCX # Per ovviare al primo inserimento nel primo giro è # adjP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return # ok, tutto bene, aggiorno i valori di adjP a quello inserito: # if ammessi[adjP] == ammessi[car]: if adjP == car: # caso inserimento eguale all'ultimo # controllo la fila: if car in 'DLV': # fanculo perché non si possono duplicare DLV: if stoppa == num: zz = stoppa return if diFila == 2: # non vi possono essere più di tre num_romani eguali di fila # ricorda che il conteggio parte da 0 if stoppa == num: zz = stoppa return # ed incremento il contatore diFila +=1 else: # spezzo la fila per ricominciare da zero: diFila = 0 adjPP = adjP # se dopo avrò uno sconto dovrò riaggiornare adjP! adjP = car if stoppa == num: zz = stoppa valorD += ammessi[car] continue # resta adjP < car e l'if sotto non è necessario: # if ammessi[adjP][1] > ammessi[car][1]: # ovvio che siamo di fronte ad una richiesta di sconto. # che fa riferimento al valore precedente ''' ATTENZIONE QUI SOTTO ALLA DIFFERENZA TRA adjP e adjPP sostanzialmente: adjP -> aggiunto precedente adjPP -> aggiunto prima del precedente ''' if stoppa == num: zz = stoppa if ammessi[adjPP] < ammessi[car]: # sono ammessi SCONTABILI solo valori minori o eguali # dell'ultimo valore inserito IN AGGIUNTA, in questo caso: # ammessi[adjPP][1] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return if not(ammessi[car]//10 <= ammessi[adjP] < ammessi[car]//2): # sono ammessi sconti solo eguali o superiori # ad un decimo del valore da scontare # e minori della metà dello stesso if stoppa == num: zz = stoppa return # sono ammessi IN SCONTO solo valori minori dell'ultimo # valore inserito IN AGGIUNTA, in questo caso: ammessi[adjPP][1] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if ammessi[adjPP] < ammessi[adjP]: # sono ammessi SCONTI solo valori minori # dell'ultimo valore inserito IN AGGIUNTA, in questo caso: # ammessi[adjPP] # quindi: ok MCM e CXC no CXCM # Per ovviare al primo inserimento nel primo giro è # adjPP = 'alfa', valore fittizio massimo if stoppa == num: zz = stoppa return # aggiorno i valori: valorD += ammessi[car] -2 * ammessi[adjP] # adjP due volte perché una era stata caricata prima di sapere che # era da scontare. scoP = adjP adjP = car # ignoriamo adjPP: qui non interessati al valore dello sconto diFila = 2 # non si può inserire un MCM continue return valorD def parto_da_qui(nome): global stoppa a = '' #while True: #a = input("un numero romano or 'fine' ?") #if a == 'fine': # break a = controllaLegalita(nome) print(a) return a def int_to_roman(input): """ Convert an integer to a Roman numeral. """ # questa funzione l'ho trovata in rete qui l'ho solo adattata: # https://www.safaribooksonline.com/library/view/python-cookbook/0596001673/ch03s24.html ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') result = [] for i in range(len(ints)): count = int(input / ints[i]) result.append(nums[i] * count) input -= ints[i] * count return ''.join(result) class perTest(unittest.TestCase): global stoppa stoppa = 'i' stoppa = stoppa.upper() def test_parto_da_qui(self): for j in range(1, 4000): rom = (int_to_roman(j)) print(j, rom) self.assertEqual(j, parto_da_qui(rom)) if __name__ == '__main__': unittest.main() -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 19:24:40 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 19:24:40 +0200 Subject: [Corso Python3] e qui in versione compatta (ed illeggibile) Message-ID: ''' traduce numeri romani ,in decimali e viceversa ''' import unittest num_romani = 'MDCLXVI' ammessi = {'alfa':1001,'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I': 1} def controllaLegalita(numax): ''' torna None se condizioni di errore il valore decimale se corretto ''' if numax == "": return # caso della stringa vuota num = numax.upper() scoP = adjPP = adjP = 'alfa' diFila = valorD = 0 for pos, car in enumerate(num): if car not in num_romani:return if ammessi[adjP] >= ammessi[car]: if ammessi[scoP] <= ammessi[car]:return if adjP == car: if car in 'DLV' or diFila == 2:return diFila +=1 else: diFila = 0 adjPP = adjP # se dopo avrò uno sconto dovrò riaggiornare adjP! adjP = car valorD += ammessi[car] continue if ammessi[adjPP] < ammessi[car] or not(ammessi[car]//10 <= ammessi[adjP] < ammessi[car]//2):return if ammessi[adjPP] < ammessi[adjP]:return valorD += ammessi[car] -2 * ammessi[adjP] scoP = adjP adjP = car diFila = 2 # non si può inserire un MCM continue return valorD def parto_da_qui(nome): while True: a = input("un numero romano or 'fine' ?") if a == 'fine':break a = controllaLegalita(nome) print(a) if __name__ == '__main__': unittest.main() -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 31 19:37:47 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 31 May 2016 19:37:47 +0200 Subject: [Corso Python3] =?utf-8?q?dimenticavo=3A_il_link_al_libro_citato_?= =?utf-8?q?=C3=A8_questo=3A?= Message-ID: http://www.diveintopython3.net/ -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From xxxx.xxxxxxxxx a xxxxx.xxx Tue May 3 13:53:14 2016 From: xxxx.xxxxxxxxx a xxxxx.xxx (Xxxx Xxxxxxxxx) Date: Tue, 3 May 2016 13:53:14 +0200 Subject: [Corso Python3] Prenotazione presenza in sede sabato alle 14:30 In-Reply-To: References: Message-ID: Ciao, l'idea non è affatto male. Nel mio caso specifico però vorrei capire meglio quanto intendi correre con la classe 'advanced', perché al momento ci sono cose 'banali' ma mi aspetto che poi le cose si facciano più difficili. Poi se gentilmente mi dai conferma che questo sabato si farà esclusivamente un replay di sabato scorso, io sto volentieri a casa. Ciao Omar. Il 03/mag/2016 13:49, "alessandro medici" ha scritto: > Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in lista > l'avviso della vostra eventuale presenza questo prossimo sabato. > > Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata > del singolo incontro a due ore fare, come a dire, due classi. > > Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. > L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata > poi effettiva ne potremo parlare assieme > > Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) > > > Alex > > _______________________________________________ > fsug-corso-python3 mailing list > fsug-corso-python3 a lists.fsugpadova.org > Per cancellarti o modificare i tuoi dati visita: > http://lists.fsugpadova.org/listinfo/fsug-corso-python3 > > > -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From alexxandro.medici a gmail.com Tue May 3 14:05:04 2016 From: alexxandro.medici a gmail.com (alessandro medici) Date: Tue, 3 May 2016 14:05:04 +0200 Subject: [Corso Python3] Prenotazione presenza in sede sabato alle 14:30 In-Reply-To: References: Message-ID: Oddio, il solito problema del top-quoting dai cellulari. Ricostruisco: Il 03/mag/2016 13:49, "alessandro medici" ha scritto: > Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in lista > l'avviso della vostra eventuale presenza questo prossimo sabato. > > Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata > del singolo incontro a due ore fare, come a dire, due classi. > > Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. > L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata > poi effettiva ne potremo parlare assieme > > Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) > > Il giorno 3 maggio 2016 13:53, Xxxx Xxxxxxxxx ha scritto: > Ciao, l'idea non è affatto male. Nel mio caso specifico però vorrei capire > meglio quanto intendi correre con la classe 'advanced', perché al momento > ci sono cose 'banali' ma mi aspetto che poi le cose si facciano più > difficili. > Correrò quanto si potrà correre: sostanzialmente corro se non mi fermate con le domande e le necessarie risposte da parte mia. Non è che le cose siano più difficili. In questo corso siamo al minimo. Per altri corsi dipende. Poi se gentilmente mi dai conferma che questo sabato si farà esclusivamente > un replay di sabato scorso, io sto volentieri a casa. > Ciao > Omar. > Buon W.E. !! :-) sostanzialmente si, solo che sarà più ordinato. E se saremo davvero così tanti probabilmente si farà forse meno di sabato scorso. Le novità per voi a partire dal prossimo sabato :-) Alex. Il giorno 3 maggio 2016 14:04, alessandro medici < alexxandro.medici a gmail.com> ha scritto: > Oddio, il solito problema del top-quoting dai cellulari. > > Ricostruisco: > > > Il 03/mag/2016 13:49, "alessandro medici" > ha scritto: > >> Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in lista >> l'avviso della vostra eventuale presenza questo prossimo sabato. >> >> Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata >> del singolo incontro a due ore fare, come a dire, due classi. >> >> Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. >> L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata >> poi effettiva ne potremo parlare assieme >> >> Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) >> >> Il giorno 3 maggio 2016 13:53, Xxxx Xxxxxxxxx > ha scritto: > >> Ciao, l'idea non è affatto male. Nel mio caso specifico però vorrei >> capire meglio quanto intendi correre con la classe 'advanced', perché al >> momento ci sono cose 'banali' ma mi aspetto che poi le cose si facciano più >> difficili. >> > > Correrò quanto si potrà correre: sostanzialmente corro se non mi fermate > con le domande e le necessarie risposte da parte mia. > Non è che le cose siano più difficili. In questo corso siamo al minimo. > Per altri corsi dipende. > > Poi se gentilmente mi dai conferma che questo sabato si farà >> esclusivamente un replay di sabato scorso, io sto volentieri a casa. >> Ciao >> Omar. >> > Buon W.E. !! :-) > sostanzialmente si, solo che sarà più ordinato. E se saremo davvero così > tanti probabilmente si farà forse meno di sabato scorso. Le novità per voi > a partire dal prossimo sabato :-) > > > Alex. > -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From gluca.biondi a gmail.com Tue May 3 20:42:49 2016 From: gluca.biondi a gmail.com (Gianluca Biondi) Date: Tue, 3 May 2016 20:42:49 +0200 Subject: [Corso Python3] Prenotazione presenza in sede sabato alle 14:30 In-Reply-To: References: Message-ID: ​Grazie per avermi aggiunto. Questo sabato ci sarò sicuramente! Faremo qualche lezione prima di dividere i gruppi o l'idea era quella di partire già da questo sabato? P.s.: sapreste consigliarmi un buon manuale di Python3? Il giorno 3 maggio 2016 14:05, alessandro medici < alexxandro.medici a gmail.com> ha scritto: > Oddio, il solito problema del top-quoting dai cellulari. > > Ricostruisco: > > > Il 03/mag/2016 13:49, "alessandro medici" > ha scritto: > >> Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in lista >> l'avviso della vostra eventuale presenza questo prossimo sabato. >> >> Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata >> del singolo incontro a due ore fare, come a dire, due classi. >> >> Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. >> L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata >> poi effettiva ne potremo parlare assieme >> >> Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) >> >> Il giorno 3 maggio 2016 13:53, Xxxx Xxxxxxxxx ha > scritto: > >> Ciao, l'idea non è affatto male. Nel mio caso specifico però vorrei >> capire meglio quanto intendi correre con la classe 'advanced', perché al >> momento ci sono cose 'banali' ma mi aspetto che poi le cose si facciano più >> difficili. >> > > Correrò quanto si potrà correre: sostanzialmente corro se non mi fermate > con le domande e le necessarie risposte da parte mia. > Non è che le cose siano più difficili. In questo corso siamo al minimo. > Per altri corsi dipende. > > Poi se gentilmente mi dai conferma che questo sabato si farà >> esclusivamente un replay di sabato scorso, io sto volentieri a casa. >> Ciao >> Omar. >> > Buon W.E. !! :-) > sostanzialmente si, solo che sarà più ordinato. E se saremo davvero così > tanti probabilmente si farà forse meno di sabato scorso. Le novità per voi > a partire dal prossimo sabato :-) > > > Alex. > > Il giorno 3 maggio 2016 14:04, alessandro medici < > alexxandro.medici a gmail.com> ha scritto: > >> Oddio, il solito problema del top-quoting dai cellulari. >> >> Ricostruisco: >> >> >> Il 03/mag/2016 13:49, "alessandro medici" >> ha scritto: >> >>> Per motivi logistici sarebbe cosa buona e giusta se mandaste qui in >>> lista l'avviso della vostra eventuale presenza questo prossimo sabato. >>> >>> Se saremo davvero così tanti penso che si potrebbe, diminuendo la durata >>> del singolo incontro a due ore fare, come a dire, due classi. >>> >>> Una di chi ha competenze nel ramo, in cui potremmo 'correre' di più. >>> L'altra con chi ne ha meno o meno tempo per 'studiare' a casa. Sulla durata >>> poi effettiva ne potremo parlare assieme >>> >>> Le idee nuove sono sempre benvenute. E le migliori saranno premiate :-) >>> >>> Il giorno 3 maggio 2016 13:53, Xxxx Xxxxxxxxx >> ha scritto: >> >>> Ciao, l'idea non è affatto male. Nel mio caso specifico però vorrei >>> capire meglio quanto intendi correre con la classe 'advanced', perché al >>> momento ci sono cose 'banali' ma mi aspetto che poi le cose si facciano più >>> difficili. >>> >> >> Correrò quanto si potrà correre: sostanzialmente corro se non mi fermate >> con le domande e le necessarie risposte da parte mia. >> Non è che le cose siano più difficili. In questo corso siamo al minimo. >> Per altri corsi dipende. >> >> Poi se gentilmente mi dai conferma che questo sabato si farà >>> esclusivamente un replay di sabato scorso, io sto volentieri a casa. >>> Ciao >>> Omar. >>> >> Buon W.E. !! :-) >> sostanzialmente si, solo che sarà più ordinato. E se saremo davvero così >> tanti probabilmente si farà forse meno di sabato scorso. Le novità per voi >> a partire dal prossimo sabato :-) >> >> >> Alex. >> > > > _______________________________________________ > fsug-corso-python3 mailing list > fsug-corso-python3 a lists.fsugpadova.org > Per cancellarti o modificare i tuoi dati visita: > http://lists.fsugpadova.org/listinfo/fsug-corso-python3 > > > -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: From xxxx.xxxxxxxxx a xxxxx.xxx Sat May 14 13:33:03 2016 From: xxxx.xxxxxxxxx a xxxxx.xxx (Xxxx Xxxxxxxxx) Date: Sat, 14 May 2016 13:33:03 +0200 Subject: [Corso Python3] assenza In-Reply-To: References: Message-ID: Ciao, oggi purtroppo non posso partecipare al corso. Ci vediamo sabato prossimo. Buona lezione. Omar Il 12/mag/2016 23:36, "alessandro medici" ha scritto: un attimo datato, ma scritto davvero bene. Basilare, chiaro e con esercizi risolti: http://openbookproject.net/thinkcs/python/english3e/ Simpatico, editor on-line, grafica con python e assai curioso per le librerie che propone (l'argomento librerie lo affronteremo Sabato prossimo :-): http://interactivepython.org/runestone/static/thinkcspy/index.html _______________________________________________ fsug-corso-python3 mailing list fsug-corso-python3 a lists.fsugpadova.org Per cancellarti o modificare i tuoi dati visita: http://lists.fsugpadova.org/listinfo/fsug-corso-python3 -------------- parte successiva -------------- Un allegato HTML è stato rimosso... URL: