Il mio nome è Giuseppe Santucci, sono il docente incaricato di eseguire il modulo relativo a Python e adesso vi darò un po'di informazioni di base sul corso e farò un'introduzione su Python. La prima notizia che vi tolgo è che oggi faremo soltanto due ore per rimanere allineati con l'altro canale e che nella settimana prossima ci saranno dei cambiamenti. Allora.
La mia politica è di non dare informazioni logistiche in aula. Perché? Non perché non vi voglia dare informazioni, semplicemente perché c'è un sito che fatichiamo a mantenere in azione, è un sito ufficiale. è in sperimentazione ed è la verità se io dico una cosa e il sito le dice un'altra il sito ha ragione ok? per questo motivo tendo anche perché magari mentre io parlo il mio collega ha modificato qualche cosa io vi dico una cosa e compro un'altra cosa lì sopra quindi il sito è la verità su questo sito avremo l'orario del corso, i libri di testo le esercitazioni i programmi che farò vedere in aula c'è anche un forum per partecipare al forum dovete registrarvi ma potete scrivere dei messaggi anonimi ovvero se non volete a vostra discrezione, se non volete farvi vedere nel forum col vostro nome potete mandare mandarlo in modo anonimo.
E'una novità, questo è un sito americano, Piazza, usato da Stanford, Howard e via dicendo, è usato da tantissime università americane, è molto comodo sia per i docenti che per gli studenti. Allora, la prima cosa che non vi dico, ma vi dico dandovi un puntatore, avete avuto notizie che stiamo per cambiare qualche cosa, perché? Perché in quest'aula ci si entra a stento e si sta scomodi, e ci sono studenti del secondo anno che arriveranno a riempire i posti e quindi stiamo facendo un cambiamento piuttosto complesso di aule e di canali.
Perché canali? Perché abbiamo due aule sbilanciate come carico e quindi ci sarà un canale più... più grande e un canale più piccolo. Questo non cambierà assolutamente l'esame, in quanto l'esame è uno solo per tutti e due i canali identici.
Quindi se siete nel canale A, ora sarà così, o meno, è indifferente. Queste informazioni saranno tutte quante sul sito. Sarà un po'seccante per tutti.
Io dovrò fare le lezioni in una nuova, voi dovrete andare in una città universitaria. Però il vantaggio che dovremmo avere più spesso spazio, dovremmo garantire un sedile a ogni studente, questo è il nostro obiettivo perché in aula 1, che è quello ufficiale, non ci senta e questa aula non la avremo tutti i giorni e quindi diventa impossibile, in questo modo con un piccolo cambiamento in corso iniziale riusciamo a risolvere questo problema ok come è fatto questo sito? beh, non potete vedere molto da lontano Quello è l'indirizzo a cui dovete collegarvi, c'è una parte di descrizione, informazioni generali con i docenti, il rario di ricevimento, obiettivi del corso e via dicendo, e poi ci sono degli annunci. duplicati perché ancora non lo sappiamo usare bene abbiamo preferito abbondare dell'informazione gli annunci dicono guardate il sito che qualcosa sta cambiando e mentre io sto parlando gli orari si sono definiti quindi è probabile che fin da stasera le informazioni saranno aggiornate ok? Libro di testo, non dico nulla, è tutto scritto sul sito, è un libro in italiano, piuttosto voluminoso, molto dettagliato, a volte permettetevi un po'troppo, però sicuramente...
Sicuramente meglio qualcosa in più che qualcosa in meno. Faremo in modo di organizzarci e di fornirvi un diario delle lezioni in cui indicheremo le pagine del libro, gli argomenti del libro che abbiamo coperto a lezione. Quindi sicuramente qualcosa che potrà aiutare. L'unica cosa che dovete scrivervi è l'indirizzo del sito.
Dopodiché, di cosa parliamo in questo corso? Parliamo di Python, che è un linguaggio di programmazione che fra un istante chiarirò, versione L'unica dolente nota di Python è questa. E il gruppo di persone che...
gestisce Python, è molto attivo, fa frequentemente delle modifiche. E'facile che l'anno prossimo ci sarà un'altra versione, la 3.5, 3.6. I cambiamenti a volte sono piccoli, a volte sono grandi, però voi preferite Per questo anno accademico siete tranquilli, la versione ufficiale è la anche se domani cambia qualche cosa, noi cominciamo con questa e rimaniamo agganciati a questa. C'è un sito da cui scaricarlo, c'è il link sempre su piazza ma attenzione, per accedere a piazza non occorre essere registrati. Se voi mettete nel vostro browser Questo indirizzo web, quello in cima, accendete direttamente alla home page del sito web.
Registrarsi serve solo per fare dei post sul forum, fondamentalmente. E quindi sul sito c'è un link a Python, da cui potete scaricare il software, e poi c'è un altro link, altri link che verranno aggiunti, ed altro materiale didattico. I programmi che facciamo in aula e via dicendo. Potete, dovete scrivere sul forum, ovviamente, siete 200 più 200 studenti, 400 persone, quindi forse le risposte non saranno immediate, non pensate che sia una cosa... veloce diciamo, però teoricamente un paio di volte a settimana dopo le lezioni uno controlla il sito e quindi è in grado di darvi delle risposte, non dico in tempo reale, ma in tempo ragionevole.
E questa è una cosa comoda. Oppure organizzatevi fra di voi. Una delle cose migliori di questi forum è che uno studente ha un problema, lo posta sul forum, qualche altro che vuole fare il perino dice guarda che si fa così e mi risparmia un lavoro.
Veniamo a Python. Python è un linguaggio di programmazione che è stato inventato da una persona, un olandese, Guido Van Rossum, che un giorno ha deciso, mi sono stufato di usare quello che c'è, mi serve una cosa per i miei scopi. E in una settimana ha messo le bolle. basi di questo linguaggio. A distanza di tempo la cosa continua a essere sotto il suo totale controllo.
Lui si definisce un benevolo dittatore a vita. Lui cura la cosa, fa le nuove edizioni ed è stato accompagnato da un'azienda di completamente inventato da lui. È un linguaggio di programmazione che, a mio adesso parere, non ha nulla a che vedere con nessun altro linguaggio.
È un linguaggio di scripting, però orientato agli oggetti. Ha delle caratteristiche uniche, che lo rendono estremamente interessante. questo è il motivo per cui lo stiamo insegnando ai primi anni dell'università stiamo un po'seguendo quello che succede negli Stati Uniti e con un ritardo di un anno abbiamo cominciato a insegnare Python anche noi Java lo vedrete più in là Perché si chiama Python? La cosa è molto divertente, perché il signore Van Rossum era un fanatico, un appassionato del gruppo comico inglese Monty Python.
che negli anni 70 hanno fatto uno spettacolo sulla BBC inglese, c'è la regina, completamente fuori dagli schemi, qualcosa che non ha nulla a che vedere una comunità surreale da altri tempi, futuri ovviamente. E lui era talmente appassionato di questo gruppo che gli ha dato questo nome, perché voleva dire anche che il suo linguaggio fosse qualcosa di controcorrente, se vogliamo. Da questo link potete scaricare il programma.
È un eseguibile, si installa facilmente. Però fatemi un secondo parlare dei Monty Python. Per una serie di coincidenze, anch'io sono appassionato dei Monty Python.
Ho l'intera collezione della loro produzione. Allora, dunque, sono i comici inglesi dell'anni 69-74, hanno fatto tre anni, quattro anni di spettacoli. Questa è una locandina del loro fine circus, Marco Volante. Tra le altre cose hanno inventato...
la parola spam, lo spam della mail viene da loro. In realtà lo spam era una carne in scatola di dubbia qualità che veniva venduta in Inghilterra con una campagna pubblicitaria veramente ossessiva e allora hanno fatto uno sketch. in cui c'era un ristorante, in cui qualunque cosa aveva ordinate c'era lo spam.
Uova è spam, carne è spam, pane è spam, spam è spam. E alla fine la parola spam è passata all'informatica, non l'hanno inventata loro, è diventata dell'informatica in modo da indicare essere bombardati da qualcosa che non volete. Questi sono i nomi delle persone e questo è in bold per un motivo che chiederò fra un istante. Mi accorgo che c'è qualcuno che è seduto nell'ultimissime file, anche se in realtà qualche posto davanti c'è.
Forse ha bisogno di qualche informazione, vi proporrei 30 secondi di uno sketch del Monty Python che si intitola L'arte di non farsi vedere. Per capire, è la prima lezione ovviamente. In questa età ci sono ben 47 persone, nessuna di loro è visibile.
In questo privato vogliamo mostrarti come si fa ad essere visti. Quello è il signor E.R. Bresciol, in Evercourt, Black Lion Road, Londra, S.I.
14. Non può essere visto. Ora ve lo chiederò di venire fuori. Signor Bresciol, vuole venire fuori per favore? Questo dimostra l'importanza del non essere visti. In questa immagine noi non vediamo la signora BJ Smythe-Mis di Bermond, The Christian 13. Signor Smythe-Mis, le dispiace venire fuori, grazie.
Questo invece è il signor Nesbitt di Harlow Newtown. Signor Nesbitt, vuole mostrarsi per cortesia? Il signor Nesbitt ha imparato la prima regola per non essere visti, malmostrarsi a nessuno. Tuttavia, egli ha scelto un rivaro antropologico. Ok. spero di aver stimolato la vostra curiosità andate in giro su internet sono veramente molto divertenti soprattutto calcolando che questi erano gli anni 69 in Inghilterra ok torniamo a qualcosa di vagamente più serio perché python?
cosa ha di speciale python? è difficile spiegarlo quanti di voi sanno programmare? alzate una mano chi sa programmare in python? ok è un linguaggio molto potente punto interrogativo scoprirete a brevissimo che tutti quanti i linguaggi di programmazione hanno tutti lo stesso esatto potere espressivo Non c'è nulla che non si possa fare in Python che non si possa fare in Ascender, o in Java, o in Pascal. Allora che vuol dire che è molto potente?
Vuol dire che alcune cose si fanno più facilmente. Questo è il senso della cosa. In Python è possibile fare alcune cose con una velocità straordinaria, con pochissimo sforzo da parte dell'utente. E quindi si dice che è un linguaggio orientato alla problem solving.
Con 5 righe di codice, 10, mi collego a un sito Amazon. tiro giù la pagina, raccolgo i prezzi di alcuni oggetti, ne faccio la media, faccio un report. Cinque righe di codice, sette righe di codice. Però non si può dire che sia più potente degli altri linguaggi. È orientato a fare alcune cose.
E'orientato agli oggetti, operate oriented, ci sono classi, metodi e altro, ma voi in questo corso non ve ne accorgerete perché è un corso semestrale, mezzo corso annuale e non vi farò vedere quasi nulla delle classi di Python avrete modo studiando Java negli anni successivi perché vi è meglio questo concetto È un linguaggio interpretato. E qui la cosa diventa appena più complessa perché non sa di cosa sto parlando. Allora, voi sapete che dentro un computer c'è un microprocessore.
Un microprocessore ha un suo linguaggio interno, detto linguaggio macchina. E voi scrivete un linguaggio di programmazione che ha istruzioni ad alto livello, che sono comprensibili dall'essere umano, poi vengono compilate e tradotte. I linguaggi tipo Java vengono compilati preventivamente, cioè devo scrivere tutto il programma, lo compilo tutto per intero e poi lo invio al calcolatore. Un linguaggio interpretato viene eseguito...
Comando per comando. E quindi è possibile dare un singolo comando di Python e vederne il risultato immediatamente. E sarà spesso il mio modo di fare lezione.
La cosa è molto utile, molto interessante e molto veloce. È un po'più lento, ma non è un grosso problema. A questo punto cominciano le cose più complicate. Python può essere usato in due modi.
Ci sono due ambienti, una shell e un editor. Ma prima di andare avanti, ho bisogno di fare un passo indietro. Passo indietro nel tempo per due motivi. Questo lucido che usavo quando insegnavo calcolatore elettronici, direi 15 anni fa. Un passo indietro per voi che avete sentito parlare di von Neumann, dell'architettura a bus, nelle prime lezioni, assumendo che...
Se non abbiate capito quello che vi è stato raccontato, riassumo l'idea di base o vi do la mia versione che forse è leggermente differente. Questa è un'architettura concettuale, c'è un bus. Cos'è un bus?
Un insieme di fili in parallelo. 8, 16, 32, 64, 128, dipende dall'architettura. Un tempo erano 8 fili, ora si diventa tipo 16, 32, 64. Un insieme di fili. Su questo insieme di fili si affacciano il microprocessore, la CPU, Central Processing Unit, il cuore del calcolatore.
Sempre sullo stesso bus è collegata la memoria principale, la RAM. Poi ci saranno dei dischi, poi ci saranno delle stampanti, dei monitor e quant'altro. E questi sono detti dispositivi di input output, I.O., perché permettono di inserire dati nel computer e prelevarli. La cosa sorprendente è che questa scrittura è stata ideata da Van Neumann 40 anni fa e oltre. E concettualmente è ancora perfettamente valida.
In un calcolatore moderno voi avete decine di bus, più veloci, meno veloci, collegati per la RAM, per il video, ma concettualmente l'architettura è rimasta esattamente la stessa. Il bus è il modo in cui si scambiano informazioni. E quindi possiamo pensare in prima approssimazione che quando noi programmiamo in Python, sotto, dentro la macchina, c'è qualcosa del genere. Come facciamo noi a dare le informazioni alla macchina?
Come possiamo scrivere un programma in Python? Beh, voi digitate qualcosa sulla tastiera e questi dati devono arrivare dentro il calcolatore. ci sono vari percorsi potete mandare sul disco fate un file in cui il programma viene memorizzato oppure li caricate nella memoria principale perché non ne ho parlato perchè sarà oggetto di altri corsi ma il microprocessore ha come compito di accedere in memoria principale prendere un'istruzione, eseguirla passare a quella dopo e via dicendo ha dei registri per fare questa cosa ma non voglio entrare su questo anche se il mio passato di docente di calcolatori elettronici mi spinge a fare queste cose perché avere un po'di chiarezza su quello che succede sotto è importante E quindi il programma e anche i dati, e questo è uno dei punti centrali di architettura di von Neumann, un tempo programmi e dati erano in posti separati, adesso sono tutti quanti nella memoria, memoria centrale, l'unico processore può andare in memoria, prendere un dato o prendere un'istruzione. Ma tipicamente i programmi vanno sul disco, io ho fatto un programma di esempio per oggi, l'ho salvato sul disco, quindi sta qui. Dal disco lo caricherò in memoria centrale e poi il microprofessore comincerà a eseguirlo.
Tutte queste cose un tempo si facevano in modo... sempre a prima lezione. Sapete qual è il modo più antico di programmare? con otto interruttori.
Il programmatore aveva un comando in linguaggio macchina a otto bit, aveva otto interruttori, diceva così, il comando è, somma questi due registri. Il codice era 52, lo metteva in binario, abbassava gli interruttori 1, 0, 1, 0, 1, 0 in binario, e caricava la singola cella di memoria con un pulsante. Poi passava alla cella successiva. Questo ambiente di programmazione, che ho chiamato così perché non voglio parlare troppo di questo, fa esattamente la stessa cosa, in modo più furbo, più veloce, più amichevole.
Da qualche parte c'è un editor che vi permette di scrivere il vostro programma. ma le istruzioni di Python non sono in linguaggio macchina, vanno trasformate. E quindi c'è un compilatore. In ogni caso, anche se un linguaggio è interpretato, un'istruzione per essere eseguita deve essere tradotta nel linguaggio macchina.
E poi volete vedere il risultato delle cose? Insomma, c'è un ambiente di programmazione. Dovete fare debugging, trovare gli errori e via dicendo.
Salvare su disco, riprendere un vecchio programma da disco. Ogni lingua... ha uno o più ambienti di programmazione dedicati a quel linguaggio. Per quanto riguarda Python, quando scaricherete il programma da web, scaricherete sia il modulo che traduce il linguaggio per mettere in memoria e lo fa capire il microprocessore, ma anche un semplice ambiente per programmare in Python.
E questo ambiente, come vi ho già detto, è fatto di due oggetti una shell e un editor di file e questa cosa è sorgente di confusione vi farò capire la differenza fra le due allora la shell di python si chiama idle Se vi ricordate il nome di un dei bonti Python, c'era il signor Idol. Il nome di questa shell è perché evidentemente il nostro olandese era appassionato in particolare di questo attore. Ed è quello in alto. Purtroppo i colori non si vedono, non vale la pena di combattere.
Questa roba è rosso, credetemi. Nella scelta di Python l'idea è che voi possiate scrivere un'istruzione e vederla eseguire. Scrivete qualcosa e viene eseguita, scrivete qualcosa e viene eseguita.
Un comando alla volta. Ogni volta che voi date Enter il comando viene eseguito. Il blu si vede.
Print, abberta parentesi, 3 più 5. Ora vi spiegherò meglio questa cosa. Date invio e sotto compare 8. Spiegare alle mie figlie che insegno cose complesse all'università è difficile con questi esempi, ma migliorerò. E quindi è un ambiente eccezionale dal mio punto di vista per prendere la misura con Python.
In Java, in altri linguaggi, voi prima di vedere il risultato di una vostra programmazione dovete scrivere tante linee di codice, compilarle e lanciarle insieme. Qui basta scrivere qualche cosa e osservarne il risultato. Ovviamente non si può ottenere un risultato complesso un'istruzione alla volta. Dovete fare un programma.
Cos'è un programma? È un insieme di istruzioni. E quindi esiste un editor di Python, che si può richiamare dalla shell, in cui voi potete scrivere i comandi, ma i comandi non verranno eseguiti.
Verranno eseguiti soltanto quando voi lanciate il programma, con F5 o RAM. Poi questa cosa verrà dimostrata praticamente. In entrambi i casi, una riga che comincia col cancelletto viene completamente ignorata dal compilatore. Quindi si presta a fare dei commenti.
Io qui ho scritto questa è la shell di Python, posso scrivere quello che voglio. Viene completamente ignorato. La sintassi richiede un cancelletto in prima posizione. Dopodiché c'è una differenza, eppure questa crea dei problemi, ne parlerò meglio quando parliamo di espressioni, ma oggi stesso provo qualche cosa. La shell, guardate questa sequenza di operazioni, io qui ho fatto print 3 più 5, io ho detto stampa il contenuto di quello che c'è fra le parentesi, e ho fatto 8. In realtà non era assolutamente necessario.
La shell, dato che è un ambiente esplorativo, vi fa vedere sempre il risultato di quello che fate, anche se non chiedete il print. Se voi fate un'operazione nella shell, il risultato vi viene mostrato in ogni caso. Invece nell'ambiente di editing in cui faccio un programma, a parte il fatto che io qui scrivo 3 volte print ciao, print ciao, print 5 più 3, non succede nulla.
Fino a quando non premo F5. oppure vado su run e faccio eseguire il comando non il comando, l'intero insieme di comandi e allora questo è il risultato la shell, la stessa, è utilizzata per ospitare il risultato di un'operazione Python. Il vostro programma Python fa qualche cosa, produce dei risultati, questi risultati vengono mostrati in una shell.
Questo è un programma Python di tre linee, in cui c'è il comando print. Vedete che in blu viene, in realtà sarebbe viola, abbiamo un problema di colori con questo schermo. Sia l'editor che la shell riconoscono le parole riservate ai Python. Print è un comando Python nativo.
Quando vi scrivete print si accorge che il print lo fa diventare viola. Questo giallo dovrebbe essere un verde? È una stringa.
Le stringhe in Python vengono fatte in verde. Le costanze sono le stesse. e qui ci siamo, sono in nero.
Quindi i colori che Python utilizza sia nell'editor di file sia nella shell hanno un significato. Fate attenzione perché vi posso aiutare a capire come vanno le cose. lo farete e vi succederà Python permette di fare degli errori devastanti potete facilmente rovinare un programma in modo che non riuscite a capire cosa è successo i colori vi possono aiutare e ora vi farò vedere perché ultima considerazione Python distingue fra maiuscole e minuscole, come Java, e case sensitive, il che vuol dire che print, tutto minuscolo, è il comando giusto.
Print con la P maiuscola è un'altra cosa e non viene riconosciuto. Ok, a questo punto purtroppo mi devo spostare qui perché il cavo VGA è molto corto. Allora, io ho installato Python sulla mia macchina. Dovete fare lo stesso, è il vostro compito per il weekend. Scaricate Python dal sito, andate su piazza, prendete il link, scaricate Python, lo installate.
Purtroppo io... gestirò essenzialmente Windows qualcuno avrà Linux qualcuno avrà Macintosh e via dicendo non sono in grado di mostrare tutte quante le differenze di fatto il pacchetto Python esiste per qualunque ambiente per qualunque sistema operativo e nello stesso modo funziona, grosso modo io parlerò di Windows perché è il più diffuso, semplicemente se voi andate dentro PIDOL e vedete il comando IDOL che fa partire la vostra shell allora così leggete? se no posso fare... ok allora Qual è il comando più complicato che si può dare in un linguaggio di programmazione?
Niente. Ok? Non sto dando comandi.
Lui cosa fa? Lo segue, ovvero non fa niente. In realtà, i linguaggi di programmazione hanno sempre una parola chiave per questa cosa, è in Python, è in pass.
Vedete che viene riconosciuta? e di un colore, adesso non so bene come viene sullo schermo notate il cambiamento, sulla vostra macchina sarà molto più evidente cos'è pass? non far nulla ok?
corrisponde all'istruzione nulla dopodichè abbiamo visto la print bene, cominciamo a vedere cosa si può fare con la print Sprint, guardate, quando pioggio la T cambia colore. Perché? Perché l'ha riconosciuta. Allora, la sin... Una piccola parentesi, provo a espandere un po'il discorso.
Io quello che cerco di fare è parlarvi di Python, ma generalizzare. Voi siete molto delusi. Quando incominciate a studiare Java o C, la prima domanda che farete è ma non si può fare come si fa in Python? E'questa l'idea. Python fa delle cose in modo molto semplice.
Al di là di questo esiste un concetto di sintassi. Tutti i linguaggi hanno un'istruzione per stampare sullo schermo. Può essere print, può essere system.auto.println in Java. Può avere mille varianti, ma è un'istruzione chiave che tutti i linguaggi possedono.
Python nelle prime versioni non aveva le parentesi. Poi il nostro olandese ci ha ripensato, ha detto no, vogliamo le parentesi. E adesso l'istruzione print python prevede le parentesi.
Quindi metto una parentesi. Allora questo è un elemento... Molto importante della scelta di Python, appena voi cominciate a scrivere qualche cosa, lui si accorge che ha un senso e vi suggerisce la struttura di quello che state facendo. Io moltissime volte a lezioni non mi ricordo tutti i dettagli. La print è complicatissima, ha un sacco di parametri.
Posso stampare su un file, posso diventare a capo. Adesso stamperemo ciao, semplicemente. Bene, qui c'è tutto quanto spiegato. Quindi se non vi ricordate qualche cosa, basta semplicemente iniziare la funzione, aperta la prima parentesi, vi compare automaticamente l'elenco dei parametri della funzione stessa. Noi ci fermeremo qui.
Stampiamo un valore. Qual è la cosa più semplice che possiamo fare? Ci mettiamo una costante Cosa potrà mai fare questa istruzione?
Stamperà 3 sullo schermo Per quanto sia molto semplice la cosa ci sono alcuni punti da capire bene Intanto questo è un esempio molto semplice di un'espressione, di qualcosa che va calcolato. Tutti i linguaggi di programmazione hanno il concetto di calcolare. Poi vi farò degli esempi quegli interi. Calcolatore, il nome dato, inizialmente.
Pascal è il primo che ha pensato a questa cosa. E perché Pascal si è dato da fare per automatizzare qualche cosa? Perché suo padre era un contabile. Lui l'ha visto anno dopo anno fare bigliaia di cose.
di addizioni e sottrazioni a mano e ha inventato la Pascalina che era una macchina meccanica per fare praticamente le addizioni e sottrazioni. Il calcolatore nasce con questa idea. I videogiochi e YouTube vengono pericchio dopo.
E alla base di un qualunque linguaggio c'è il concetto di espressione, qualcosa che va calcolato. In questo caso è un calcolo molto semplice perché 3 non ci vuole molto. Posso fare un'espressione più complessa? non tanto più complessa solo i miei figli si preoccupano bene il procedimento è lo stesso si apre parentesi all'interno della parentesi c'è un'espressione la devo calcolare In questo caso è una costante, un intero 3. In questo caso è una semplice espressione aritmetica.
Ma ci può essere qualcosa di complesso a piacere, che va calcolato e valutato. Il valore di questa espressione viene stampato sullo schermo. Attenzione! Python è gentile?
Se stiamo con la shell vuol dire che siamo dei principianti, stiamo cercando di capire. Questo print è noioso, è faticoso. Allora che faccio?
Cosa fa la shell? Questa è un'espressione senza print. Lui ve la fa vedere lo stesso.
Vi aiuta. Ogni volta che nella shell, solo nella shell, voi scrivete un'espressione, la calcola e vi fa vedere il risultato. la stessa cosa non avverrà nell'editor di file se avete un programma sarebbe un inferno un programma fa dei calcoli intermedi che non vanno mostrati in un programma bisogna stampare in modo esplicito quindi forse questo torno un secondo indietro il senso di di questo slide qui print 5 più 3 mi fa stampare 8 ma se scrivessi qui 5 più 3 non verrebbe fuori non verrebbe mostrato sullo schermo perché siamo nell'editor di file mentre invece print 3 più 5 o scrivere 3 più 5 è esattamente la stessa cosa.
Capite bene questa faccenda? Perché uno fa le prove qui, nella scella. Quando ha capito come vanno le cose, torna nell'editor di file e non vede sullo schermo il risultato. È richiesta necessariamente una print.
Non valuta l'espressione. Ok? Allora, vediamo che cos'è una stringa. Una stringa, in un colunque linguaggio di programmazione, è una sequenza di caratteri. ma io scrivo scritta che speciali via dicendo poi parlerò della in quello che c'è sotto payton 6 unico quindi potete gestire anche caratteri di altri linguaggi giapponese cinese via dicendo poi rimaniamo in europa pensiamo al nostro alfabeto una stringa la sequenza di caratteri separati da virgolette.
Di nuovo il funzionamento della print è lo stesso. Valuta questa espressione? Come un'espressione sulle stringhe? Assolutamente sì.
Cos'è un algebra? So che è andato via, ma il concetto di algebra dovreste saperlo. Un algebra che cos'è? Un dominio su cui posso fare le operazioni, quindi un insieme di operandi, eventualmente anche in fine. e degli operatori.
L'algebra può essere più o meno chiusa rispetto al dominio. Per esempio, questa è un'algebra molto semplice, sugli interi, gli operandi sono infiniti, gli operatori sono quelli che conoscete più o meno per diviso, a meno che non sia una battuta. E quindi io posso prendere due elementi del dominio, applicare un operatore e calcolare un nuovo elemento che può essere dentro o fuori il dominio. La divisione frontali non è un intero in generale.
Si dice che l'algebra è chiusa. Smetto di parlare di questo. Esiste in Python anche un algebra sullo string.
In questo caso questa è una costante, esattamente come questo 3, e quindi print ciao, non fare nient'altro che stampare la stringa. Oh, attenzione! Se faccio così, print con la P in maiuscola, vedete che rimane nera?
Non è la stessa print di prima. E adesso vedrete il primo, ma non l'ultimo messaggio di errore di Python. Allora, invece di avere una reazione compulsiva, fermatevi e cercate di leggere quello che c'è scritto. Spesso è vero che si capisce qualche cosa.
In particolare, qui ti da delle informazioni di base e poi... la parte finale è più interessante name print is not defined il nome print non è definito se non vi ricordate che print deve essere minuscolo ci si può anche incaponire parecchio con questa cosa ma come print per forza che è definito il colore vi aiuta ok Dunque, ho parlato di algebra sulle stringhe, sugli interi è chiaro, no? Posso fare 5 per 3, moltiplicazioni, divisioni e via dicendo.
Adesso faccio una piccola deviazione. In Python l'elevamento a potenza si fa asterisco asterisco. Questo, scusate, ve lo porto in modo che sia visibile anche dall'ultima file, quelli nascosti intendo.
Allora, questo è 2 elevato alla terza. Quanto fa? 8. 2 elevato alla 6, chi lo sa? 64 2 elevato alla 10 nel 1024 poi farò un giorno una lezione su come passare da base 2 a base 10 fino a qui nulla di strano chi è che conosce la storia della della scacchiera del vecchio che una persona chiede come ricompenso a voglio del riso un chicco sulla prima casella, due sulla seconda, quattro sulla terza e il venticendo e due alla 64 Ogni volta si raddoppia.
Come se c'essero un numero abbastanza interessante. Qualcuno ha notato qualcosa di strano? 2 elevato alla 1024. Chi è che mi sa dire cosa c'è di strano?
Il risultato non è normalmente rappresentabile nel suo linguaggio di programmazione. Guardate, se invece di fare 2 alla 64 faccio 2.0 elevato alla 64, cosa cambia? Esatto, questo è un reale. e quindi sto facendo 2, qualche cosa, quindi tratto come un reale e questo ce la fa. Il risultato è cambiato, vedete?
Invece di scrivermi 101, 844 e via dicendo, sono 19 cifre, mi dice 1.8 elevato per 10, 19. Ok? E 2.0? elevato al 1024 cosa succede secondo voi?
non ha nessuna speranza di riuscirci il risultato errore overflow error questo è il codice dell'errore il risultato è troppo grande ricordatevi questa cosa in un qualunque linguaggio di programmazione il numero di bit associato a una variabile a un intero, a un carattere è finito può essere grande a piacere 16 bit, 32 bit, 64 bit ma è finito quindi c'è un numero massimo rappresentabile, sempre tranne che per gli interi in Python Il nostro olandese ha deciso che gli interi in Python potessero essere grandi a piacere e quindi in Python non c'è nessun limite alla grandezza dell'intero. Quello che succede è che se esagerate, la nostra povera shell si siede. Finite la memoria perché fa una lista di cifre una dopo l'altra. Quindi, e adesso sperimentiamo... Non c'è nessun problema, è 2 elevato a 19 cifre, è un numero difficilmente immaginabile, perfettamente calcolabile da Python, però vi dobbiamo aspettare un po'.
E c'è anche la possibilità che si bruci completamente la memoria che ho sulla macchina, ok? Ma concettualmente Python è in grado di farlo. Se avete memoria a sufficienza e tempo a sufficienza, lui calcolerà questo numero.
non credo funzioni in questo caso non ho fatto dei test qualsiasi numero più grande che mette in difficoltà la macchina di certo è che l'oggetto not responding si è bloccato tutto e allora era previsto la cosa che potete fare è ucciderla e ricominciare. Però, ribadisco... Non c'è nessun limite agli interi in Python. Attenzione! Negli altri linguaggi c'è e può dare conseguenze piuttosto fastidiose.
Quindi ogni volta che è passato un programma da Python a un altro linguaggio di programmazione, occhio al fatto che gli interi gestiti dal programma Python sono sufficientemente piccoli da essere gestiti dall'altro linguaggio, C, Java o quant'altro. Dunque, stiamo parlando di espressioni. Ovviamente queste stampe che ho fatto si comportano allo stesso modo. E quindi stiamo intuendo il tipo di espressione che possiamo fare sugli interi.
C'è poco da dire. Ovviamente gli operatori Python sono pensati per essere polimorfi, si adattano al tipo di dati e al risultato che devono produrre. La divisione fra reali è differente dalla divisione fra interi e ovviamente lui ci converte.
Questi sono due interi divisi tra di loro. Questo modo di dividere in Python e in molti altri linguaggi di programmazione ci dà un numero reale. E le stringhe?
Che si può fare con le stringhe? Il più è un operatore che si può essere applicato alle stringhe. Prendere due stringhe le concatena, le attacca fra di loro.
E ovviamente questa cosa è presente in molti altri linguaggi di programmazione. La somma fra due stringhe è la semplice concatenazione delle due stringhe fra di loro. sulle stringhe aggiungo qualche cosa come può essere fatta una stringa in python? o con i doppi apici o con i singoli apici è la stessa cosa per brevità non metto il print è tanto la stessa cosa questa è una stringa con i singoli apici Questa è con doppi apici.
Guardate, una piccola differenza. Se l'espressione la facciamo calcolare a Python, senza print, ci dà gli apici, perché ci dà il tipo. Stampare è una cosa differente. Guardate.
Print. Questo cosa stampa sullo schermo? Scusate. Cosa farà? Esattamente la stessa cosa.
Una volta che un'espressione viene stampata sullo schermo, io ne perdo il tipo. Questo è il carattere 3, questo è l'intero 3, ma tanto quanto lo stampo, la stessa cosa viene fuori. Se invece chiedo a Python di valutare un'espressione, questo è l'intero, e questa è una stringa e ci stiamo accorgendo che il default per Python è il singolo atice la cosa è molto comoda che c'è un problema senza fine e se dentro la stringa voglio stampare una doppia stringa se io voglio stampare Cosa fare?
Ciao! E poi dopo, scusate, voglio scrivere Marco fra virgolette, voglio far compiere le virgolette sullo schermo. Che succede qua? Era un errore.
Poi cosa fa? Prende il primo doppio apice, valga l'espressione fino al secondo doppio apice, che è questa. Questa è la stringa Xiaogonggong, uno spazio bianco dopo.
Quello dopo per lui è rumore. E quindi mi dà un errore. Mi dice la sintassi non è valida.
Come posso fare? Posso sfruttare... il fatto che python prevede l'uso di apici singoli o doppi alternativamente e mescolare a mio piacimento Scusate... ok allora cosa ho fatto? sto usando l'apice singolo per indicare la stringa quindi la stringa comincia con un apice singolo e finisce con un apice singolo dopodiché a quel punto posso mettere il doppio apice senza problemi il problema non si confonde e quindi la stampa Sarà fatta in questa maniera.
Posso fare il contrario? E con questo voi gestite i casi più comuni. Avete una stringa in italiano? Potete fare Marco è bello?
Usate l'apice al posto dell'accento? Dovete mettere... Vi faccio un esempio.
Questo è il contrario di prima. Mi permette di stampare il singolo apice. Ok?
Penso che vi avete capito. Non ci perdo più tempo di tanto perché è una cosa abbastanza semplice. Però a volte uno si perde in questa faccenda. Esiste un meccanismo più...
più generale per fare questa cosa con carattere di escape, ma ne parleremo in altre lezioni. Ci accontentiamo di questo. Tu lo vedi un po'di disappunto, dice ma come?
Abbiamo parlato di algebra e sulle stringhe facevamo soltanto la moltiplicazione, facevamo soltanto l'addizione. E io vi ho salutato entrando, però ho fatto un saluto generico. Mi piacerebbe salutarvi personalmente. Beh, posso fare così, no?
E poi lo rifaccio. Però siete... 200? Grosso modo? Facciamo, stigliamo 200. Questa cosa diventa faticosa.
Cosa vuol dire ciao per 200? Scrivi due volte 100 ciao 200 volte ciao Ok? Questo è molto comodo Quindi l'algebra sulle stringhe non si limita al semplice più, ma lo generalizza.
Potete concatenare un numero arbitrario della stessa stringa, di volte la stessa stringa, semplicemente per doper qualche cosa. Allora ogni tanto io faccio qualcosa che non so. Questo sicuramente funziona. A per 5 mi fa 5AA. Mi domando...
No, non può funzionare. È un'idea peregrina che abbandono subito. Allora, ha senso o non ha senso?
Allora, ogni tanto qualcuno mi arriva alla cattra e mi dice professore ma si può fare questa cosa? Io dico prova, è gratis. Asterisco asterisco è un operatore il cui campo di azione sono gli interi e reali l'elevazione a potenza non può essere fatta sulle stringhe non ha senso perchè sarebbe A per A per A anche questa cosa non si può fare che vuol dire A per A?
assolutamente nulla ok? Quindi abbiamo un algebra che ci permette di gestire gli interi del modo classico. più il fatto che la loro precisione è infinita, quante stringhe vogliamo. Abbiamo un algebra per le stringhe che è più semplice, essenzialmente possiamo usare in più, scusate, dove gli operandi sono stringhe, posso fare a più a, oppure posso fare in per, ma in cui uno dei due operandi deve essere un interno.
È commutativo? direi di sì ok allora faccio una questo dovrebbe essere sufficiente per cominciare a capire questa lezione così in java è impossibile io mi sto facendo vedere una cosa alla volta l'istruzione alla volta però abbiamo capito facciamo il nostro primo programma Attenzione, questo è l'editor di testo di Python, non è la shell. Lo scopo è di metterci più istruzioni. Ovviamente posso anche metterci una sola. Complichiamo le cose.
Beh, se do invio, non accade nulla. L'idea è che io, in questo file, vado a collezionare un certo insieme di istruzioni. E poi le eseguo tutte quante insieme. E posso continuare.
Questo è il vostro primo programma Python. È un programma composto da due istruzioni. Ok?
Come faccio a eseguirlo? Run, run module, oppure F5, che faccio prima. Mi dice che devo salvarlo.
Che vuol dire? Tutto quello che abbiamo fatto prima era in memoria. Se vi ricordate questo disegno. Adesso il nostro elaborato va a finire sul disco.
Creiamo un file che si chiamerà in qualche modo.py, Python. E quindi, ok to save, io darò un nome. Lo chiamo prova 1, con pochissima fantasia.
Il programma è andato in esecuzione e ha stampato 14 e ciao. Ha eseguito due istruzioni. Questo è il risultato e questo è il programma di partenza. Questo è il vostro programma e questa è la scelta su cui siete risultato. Il modo tipico con cui vi affrontate un problema in Python o anche un compito d'esame è usare l'editor perché dovete fare una cosa complessa.
Però quando una cosa non la capite, avete un dubbio su una cosa, ma si può fare questo? Andate sulla shell e fate una prova e poi tornate indietro. Se io cambio il mio programma e faccio così Che succede?
Stampo soltanto Xiaogong. Faccio F5. Vedete, ogni volta fa un restart della shell. E quel 5 e più 9, quel 14, che fine ha fatto? È stato calcolato.
ma lui per default non ve lo fa vedere. Questo è il senso della cosa che dicevo prima. Se sto lavorando con l'editor di file di Python, le espressioni per essere mostrate devono essere all'interno di una print, altrimenti non vengono fatte vedere. Dubbi? Ok.
Voglio far vedere altri due sorgenti di errore. e questo va bene ok? e se mi capita per sbaglio di mettermi col cursore qui?
allora vedete non mi fa andare avanti python fa una cosa che è molto strana è l'unico linguaggio che fa questa cosa spesso in un linguaggio di programmazione occorre eseguire un blocco di istruzioni poi vedremo meglio questo concetto quindi come dire questo blocco di istruzioni ho eseguito tutto o nessuna ho cinque cose da fare, o le faccio tutte e cinque o non ne faccio nessuna Per raggrupparle, i linguaggi di programmazione, tutti gli altri linguaggi di programmazione, utilizzano delle parentesi, graffe, tonde o quant'altro. Python utilizza l'indentazione. In Python questo programma è differente da questo, mentre invece in Java sarebbe esattamente la stessa cosa. Guardate cosa succede se lo eseguo. Questo errore vi tormenterà.
Unexpected indent. Vuol dire che l'indentazione delle istruzioni è sbagliata. In un programma Python, tutte le istruzioni devono essere alineate.
Vedete che non lo mette in rosso? Vuol dire che quel print è sintaticamente corretto, farebbe anche una cosa giusta, ma è messo male sullo schermo. Questa cosa la faceva il Cobble. Il nostro olandese non voleva perdere tempo con le parentesi e lo capisco perché sono noiosissime le parentesi e allora ha detto, va bene, per organizzare il mio programma utilizzo l'indentazione, mi sposto.
Molto comodo sicuramente, però da luogo ad errori di questo genere nella shell voglio testare uno spazio vedete che c'è uno spazio in mezzo? Dopo il prompt, qui c'è uno spazio. Se andate più a sinistra, non esegue il comando, suona. E in un programma Python, per quello che ne sapete adesso, tutte le istruzioni che stiamo facendo devono essere allineate fuori loro, a partire dalla prima colonna.
Allora, io vorrei farvi vedere un'ultima cosa abbiamo visto una print abbiamo visto il concetto di espressione abbiamo capito che python e che sensitive quindi print con la P maiuscola è una cosa differente vorrei introdurre ma velocemente il concetto di variabile e di valore sinistro e valore destro quando io faccio un calcolo in un qualunque Qualcuno vi ha introdotto il concetto di algoritmo, forse, la lezione scorsa. Un programma che cosa è? Una sequenza di passi.
A parte l'esempio molto semplice che si limita a stampare due stringhe. Devo calcolare un prodotto di matrici. Calcolare un integrale. Parlo di calcolo. Fare cose anche più complesse.
Sicuramente ho bisogno di risultati intermedi. Ho bisogno di posti in cui memorizzare i risultati intermedi. Bene, l'idea è che esiste l'istruzione di assegnazione. Allora, che vuol dire x uguale 5? Allora, ve lo spiego in modo un po'ampolloso.
L'operatore di assegnazione o assegnamento, come a volte viene trotto in italiano, sono entrambi brutti, vuol dire questo estensionemente. Intanto parto da destra, guardo il lato destro dell'uguale. Qui ci deve essere un'espressione di qualunque tipo. Abbiamo visto più di una. 5 più 9, 5 elevato alla 20, a più b, come due stringhe, a per 9. Ci deve essere un'espressione che si chiama valore destro.
Right value. È un'espressione che deve essere calcolata. Vuol dire, l'abbiamo visto fino adesso.
Questa è un'espressione, 3 più 9 è un'espressione, da 12. Ciao è una costante, è un'espressione. Vedremo come farne di complesse. Il valore destro è un'espressione.
che ha un valore, che può essere un intero, un reale, una stringa o anche altre cose che vedremo. È il tipo dell'espressione. E cos'è questo signore qui, questo x?
Beh, che ci faccio con l'espressione? Torniamo un attimo al nostro programma di prima. Questo 5 e più 9, mi rendo conto, non è un'espressione fantastica. Anche se la perdo non ci rimetto nulla.
Però io l'ho persa. Questo 5 e più 9 me lo perdo per strada. Lo calcolo e poi me lo perdo.
Non viene neanche stampato. Allora cosa posso fare? Posso assegnarlo a una variabile. ci stanco anch'io ok, senza...
la stessa cosa di prima ho un valore destro che è un'espressione da calcolare 5 più 9 5, quello che sia cos'è il valore sinistro? è una locazione in cui memorizzare quel valore il concetto di variabile è uno spazio in cui memorizzo quell'informazione per poterla riutilizzare questo nome è un nome che invento io x, pippo, pluto, risultato finale dei calcoli, somma. Vi do un nome simbolico che mi aiuta a ricordare cosa significa.
Lo invento io. È un nome che invento io. Ho messo x ma potrebbe essere qualunque altra cosa. Se io seguo questa espressione, questa assignazione, guardate cosa è successo. La scena è diventata pigra.
Ha calcolato questa espressione, che non è un brancheo, ma non ce l'ha fatta vedere. L'ha assegnata a x, l'ha memorizzata dentro x. In presenza di un'assegnazione, il risultato delle espressioni viene memorizzato da qualche parte e non viene mostrato. Ma non è perso. Finché non resetto la shell, la variabile x conterrà il valore che gli ho segnato.
E questo vale anche in un programma. Prendiamo questo programma di prima, appena più complessa. Faccio 2 elevato a 1024, il mio valore destro è un'espressione da valutare, la calcolo, l'assegno al mio valore sinistro, che cos'è il valore sinistro?
Per un istante lo dico meglio e vado avanti. Se eseguo questo programma, stampo soltanto ciao, va dentro x, sopravvive. il conto che ho fatto quindi una variabile, ma ci tornerò sopra è un luogo dove memorizzare qualche cosa se ci ricordiamo l'architettura di Van Neumann Io vi ho fatto vedere questo schema e vi ho detto che nella memoria principale cosa c'è?
Sia il programma sia i dati del programma, ovvero le variabili. Quando io scrivo questo programma in Python, dentro la mia RAM Sto semplificando, ma di fatto le cose stanno così. C'è la traduzione in linguaggio macchina di PrintShout, assolutamente sì. E c'è anche la X, da qualche altra parte, che contiene il risultato dell'operazione. Di fatto, e mi fermo qui perché vedo che faccia stanca, quando voi scrivete...
mando l'esecuzione così, ok, arrivo all'ascello casa uguale ho cambiato completamente l'opinio questa è una stringa valore destro, espressione quanto vale? pippo attenzione, quando mi chiedo quanto vale una cosa mi chiedo quanto vale come tipo, è una stringa Che cos'è casa? È un valore sinistro.
Left value è un indirizzo di memoria. È la locazione di memoria in cui verrà memorizzata quella variabile. Sto semplificando parecchio, ma l'idea è che ogni volta che ho un uguale, il valore destro è una cosa che va calcolata.
avrà un valore che va memorizzato da qualche parte dove nell'indirizzo che rappresenta il valore sinistro io chiamo questa variabile casa ma l'ambiente di Python si cercherà una zona nella RAM libera la cella 55 la cella 20.000 la cella 200.000 assegna a casa quel valore numerico e ogni volta è come dire memorizza nella memoria centrale all'indirizzo 200.000 questa stringa. Vorrei a sinistra l'indirizzo, vorrei a destra il risultato di un'espressione. Ovviamente questo livello di dettaglio è del tutto irrilevante.
Voi siete degli ingegneri informatici e quindi non c'è magia in questo. La X non esiste, la casa non esiste. Sotto c'è un RAM, un bus, un microprocessore. E sia le istruzioni che i dati sono memorizzati in memoria centrale.
In modi più o meno complicati, più o meno sofisticati. Ma di questo non voglio parlarvi. Voglio farvi capire che ogni volta che vi scrivete un programma, dati e operazioni sui dati finiscono nella RAM, nella memoria, e il modo formale di gestire un dato è il concetto di variabile, che corrisponde all'indirizzo.
Io credo mi fermerei qui. Allora, chiudiamo qui per oggi.