PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO...

182
PYTHON PER RAGAZZI UN’INTRODUZIONE GIOCOSA ALLA PROGRAMMAZIONE JASON R. BRIGGS

Transcript of PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO...

Page 1: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

PYTHONPERRAGAZZI

UN’INTRODUZIONEGIOCOSAALLAPROGRAMMAZIONE

JASONR.BRIGGS

Page 2: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

INDICEINBREVEL’autore,l’illustratore,irevisoritecniciRingraziamentiIntroduzione

PARTEI:IMPARAREAPROGRAMMARE1:Nontuttiiserpentistrisciano2:Calcolievariabili3:Stringhe,liste,tupleemappe4:Disegnareconletartarughe5:PorredomandeconIfeElse6:Girareintondo7:Riciclareilcodiceconfunzioniemoduli8:Comesiusanoclassieoggetti9:LefunzioniinternediPython10:ModuliutilidiPython11:Ancoragraficadellatartaruga12:Graficamigliorecontkinter

PARTEII:BOUNCE!13:Iniziamoilprimogioco:Bounce!14:Completiamoilprimogioco:Bounce!

PARTEIII:L’AVVENTUROSAFUGADIMR.STICKMAN15:CrearelagraficaperilgiocodiMr.StickMan16:SviluppareilgiocodiMr.StickMan17:CreareMr.StickMan18:CompletareilgiocodiMr.StickMan

Postfazione:Daquidovesiva?Appendice:LeparolechiavediPythonGlossario

Page 3: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

INTRODUZIONE

Perchéimparareaprogrammare?Laprogrammazionefavoriscelacreatività,ilragionamentoela

capacitàdirisolvereproblemi.Chiprogrammahalapossibilitàdicrearequalcosadalnulla,diusarelalogicapertrasformareicostruttidellaprogrammazioneinunaformacheuncomputerpuòeseguiree,quandolecosenonvannopropriocomeavrebberodovuto,diusarelacapacitàdirisolvereproblemiperstabilirechecosasiaandatostorto.

Page 4: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 5: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Programmareèun’attivitàdivertente,avolteimpegnativa(eognitantoancheunpo’frustrante)elecapacitàchesiapprendonoprogrammandopossonoessereutilisiaascuolasianellavoro…anchesequelchefatenonhanullaachevedereconicomputer.

Infine,senonaltro,laprogrammazioneèunmodoeccellenteperpassareunpomeriggioquandofuorifabruttotempo.

PERCHÉPYTHON?Pythonèunlinguaggiodiprogrammazionefaciledaimparare,maconalcunecaratteristichedavveromoltoutiliperchièalleprimearmi.Ilcodiceèmoltofaciledaleggere,rispettoaquellodialtrilinguaggidiprogrammazione,ehaunainterfacciainterattiva(la“shell”)incuisipossonoscrivereiprogrammievederligirare.Oltreallasemplicitàdellastrutturadellinguaggioeallashellinterattivaconcuisipuòsperimentare,Pythonhaalcunealtrecaratteristichecherafforzanodimoltoilprocessodiapprendimentoepermettedicrearesemplicianimazionipercreareiproprigiochi.Unodiquestielementièilmoduloturtle,ispiratoallagraficadellatartaruga(utilizzatodallinguaggiodiprogrammazioneLogogiàneglianniSessanta)epensatoperleapplicazioniincampoeducativo.Unaltroèilmodulotkinter,un’interfacciaperTk,un“toolkit”,cioèuninsiemedistrumenti,perleinterfaccegrafiche,chemetteadisposizioneunmetodosemplicepercreareprogrammicongraficaeanimazioniunpo’piùavanzate.

COMEIMPARAREASCRIVERECODICEComesempre,quandosiprovaafarequalcosaperlaprimavolta,èmeglioiniziaredallebasi,perciòcominciateconiprimicapitolienonfateviprenderedallatentazionedisaltarefinoaicapitolipiùavanzati.Nessunoèingradodisuonareunasinfonialaprimavoltacheprendeinmanounostrumentomusicale.Gliaspirantipilotinonfannovolareunaereoprimadiavercapitoicontrollifondamentalieiginnasti(disolito)nonsonocapacidifareunsaltomortalealprimotentativo.Seandateavantitropporapidamente,nonsolononviresterannointestaleideefondamentali,maicontenutideicapitolisuccessivivisembrerannopiùcomplicatidiquelchesonoinrealtà.

Nelprocedere,provatetuttigliesempi:cosìpotretevederecomefunzionano.Allafinedellamaggiorpartedeicapitolicisonoanchedeirompicapodiprogrammazionechepotetecercaredirisolvere:viaiuterannoamigliorarelevostreabilitàdiprogrammazione.Ricordate:quantomeglioassimileretelebasi,tantopiùfacilevirisulteràcapireideepiùcomplicateinseguito.

Quandoincontratequalcosadifrustranteoditroppoimpegnativo,eccoalcunecosecheiotrovoutili:

Page 6: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.

Suddivideteunproblemainpartipiùpiccole.Cercatedicapirechecosafaunpiccoloframmentodicodice,oppureragionatesolosuunapiccolapartediun’ideadifficile(concentratevisuunpiccoloframmentodicodiceinvecedicercaredicapireiltuttoinunavoltasola).Sequestoancoranonvièd’aiuto,avoltelacosamiglioreèsemplicementenonpensarciperunpo’.Dormitecisopraeriprendeteilproblemailgiornodopo.Èunbuonmodoperrisolveremoltiproblemiepuòessereparticolarmenteutileperlaprogrammazione.

CHIDOVREBBELEGGEREQUESTOLIBROQuestolibroèperchiunquesiainteressatoallaprogrammazione,bambinooadultocheaquestocamposiavviciniperlaprimavolta.Sevoleteimparareascrivereilvostrosoftwareanzichéusaresolamenteiprogrammiscrittidaaltri,questolibroèunottimopuntodipartenza.

Neicapitoliseguenti,trovereteleinformazioniperinstallarePython,eseguirelashellesvolgerequalchecalcolo,stampareiltestocheapparesulloschermo,crearelisteesvolgerealcunesemplicioperazionidicontrollodelflussoutilizzandoglienunciatiifeiciclifor(escopriretechecosasonoglienunciatiifeiciclifor!).Vedretecomeriutilizzareilcodiceconlefunzioni,glielementifondamentalidiclassieoggettieladescrizionedialcunefunzioniealcunimoduli,fraimoltichefannopartediPython.

Troveretecapitolisullagraficadellatartaruga,alivellopiùsempliceepiùavanzato,eanchesull’usodelmodulotkinterperdisegnaresulloschermo.Allafinedimolticapitolivisonorompicapodiprogrammazionedivariacomplessità,cheviaiuterannoaconsolidareleconoscenzeappenaacquisite,conlapossibilitàdiscriverevoistessipiccoliprogrammi.

Unavoltaacquisitalaconoscenzadeifondamentidellaprogrammazione,impareretecomescrivereivostrigiochi.Svilupperemoduegiochigraficiescopriremoilrilevamentodellecollisioni,glieventievarietecnichedianimazione.

LamaggiorpartedegliesempinellibrousalashellIDLE(IntegratedDeveLopmentEnvironment,ambienteintegratodisviluppo)diPython.IDLEevidenzialastrutturasintattica,offrefunzionidicopiaeincolla(analogheaquellecheuseresteinaltreapplicazioni)eunafinestradieditorincuipotetesalvareilvostrocodiceperpoterlousareancorainseguito,ilchesignificacheIDLEfunzionasiacomeunambienteinterattivoperlasperimentazioneeancheunpo’comeuneditorditesto.Gliesempifunzionerannoaltrettantobeneconlaconsolestandardeunnormaleeditorditesto,mal’evidenziazionedellasintassieunambienteunpo’piùamichevolecomequellodiIDLEpossonoesserediaiutopercapiremeglio,perciònelprimocapitolovedremocomeimpostarlo.

CHECOSAC’ÈINQUESTOLIBROEccounabrevepanoramicadiquellochetrovereteinciascuncapitolo.

Page 7: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

IlCapitolo1èun’introduzioneallaprogrammazione,conleistruzioniperinstallarePython.

IlCapitolo2introduceicalcolifondamentalielevariabili,eilCapitolo3descrivealcunideitipifondamentalidiPython,comelestringhe,lelisteeleennuple.

ConilCapitolo4arrivailprimoassaggiodelmoduloturtle.Passeremodaglielementibasedellaprogrammazioneacomefarmuovereunatartaruga(sottoformadiunafreccia)ingiroperloschermo.

IlCapitolo5trattadellevariazionidellecondizioniedeglienunciatiif(condizionali);ilCapitolo6procedeconicicliforewhile.

NelCapitolo7inizieremoausareecrearefunzioni,poinelCapitolo8parleremodiclassieoggetti.Esamineremoleideebaseabbastanzaafondoperpoterpoiutilizzarequalcunadelletecnichediprogrammazionenecessarie,neicapitolipiùavanti,perlosviluppodigiochi.Aquestopuntoilmaterialecominciaadiventareunpo’piùcomplicato.

IlCapitolo9trattalamaggiorpartedellefunzioniinterneaPythoneilCapitolo10continuaaffrontandoalcunimoduli(fondamentalmente,blocchidifunzionalitàutili),installatiperimpostazionepredefinitainsiemeaPython.

IlCapitolo11ritornaalmoduloturtlepersperimentarequalcheformapiùcomplicata.IlCapitolo12passaall’usodelmodulotkinterpercrearequalcheoggettograficopiùavanzato.

NeiCapitoli13e14creeremoilnostroprimogioco,“Bounce!”,chesifondasulleconoscenzeacquisiteneicapitoliprecedenti;neiCapitoli15-18creeremounaltrogioco,“L’avventurosafugadiMr.StickMan”.Icapitolidedicatiallosviluppodeigiochisonoquelliincuilecosepossonofarsidavveroserie.Seincontrateproblemichenonriuscitearisolverealtrimenti,scaricateilcodicedalsitowebcheaccompagnaillibro(http://python-for-kids.com/)econfrontateilvostrocodiceconquestiesempi,chesicuramentefunzionano.

NellaPostfazione,concludiamodandounosguardoaPyGameeadalcunialtrilinguaggidiprogrammazionemoltodiffusi.

Infine,nell’Appendice,potretetrovareleparolechiavediPythontrattateindettaglioe,nelGlossario,trovereteledefinizionideiterminidellaprogrammazioneutilizzatiintuttoillibro.

ILSITOWEBDIACCOMPAGNAMENTOSevitrovatenellecondizionidiaverbisognodiaiutomentreleggete,provateaconsultareilsitodiaccompagnamento,http://python-for-kids.com/(ininglese),dovepotretetrovaretuttigliesempidellibroealtrirompicapodiprogrammazione.Trovereteanchelesoluzionidituttiirompicaponellibro,nelcasovitroviateindifficoltàovogliatecontrollareilvostrolavoro.

BUONDIVERTIMENTO!

Page 8: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ricordate,mentreprocedete,chelaprogrammazionepuòesseredivertente.Nonprendetelacomeunlavoro.Pensatelaprogrammazionecomeunmodopercrearegiochioapplicazionidivertentichepotetecondividerecongliamicioconaltri.

Imparareaprogrammareèunmeravigliosoeserciziomentaleeirisultatipossonoesseremoltogratificanti.Masoprattutto,qualsiasicosafacciate,divertitevi!

Page 9: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

PARTEIIMPARAREAPROGRAMMARE

Page 10: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1NONTUTTIISERPENTISTRISCIANO

Unprogrammapercomputerèuninsiemediistruzionigrazieallequaliuncomputersvolgequalcheattività.Nonsitrattadellepartifisichediunamacchina(comeifili,imicrochip,leschede,ildiscofissoealtrecosesimili)madiquellamateriaimpalpabileenascostache“gira”suquell’hardware.Unprogrammapercomputer,chechiameròingeneresemplicementeprogramma,èl’insiemedeicomandichediconoaquell’hardware“stupido”checosafare.Softwareèuninsiemediprogrammi.

Page 11: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 12: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Senzaprogrammi,quasiognidispositivocheusatequotidianamentesmetterebbedifunzionareosarebbemoltomenoutilediquelcheè.Iprogrammi,inunaformaoinun’altra,controllanononsoloilvostropersonalcomputermaancheisistemiperivideogiochi,itelefonicellularieilnavigatoresatellitarenell’automobile.Ilsoftwarecontrollaancheapparecchimenoovvi,comeitelevisoriaLCDeilorotelecomandi,radio,lettoridiDVD,fornieanchequalchefrigoriferodeipiùrecenti.Ancheimotoridelleautomobili,isemafori,ilampioni,isegnalideitreni,itabellonielettroniciegliascensorisonocontrollatidaprogrammi.

Iprogrammisonounpo’comepensieri.Senonavestepensieri,probabilmentevenestarestesedutisulpavimento,conlosguardopersonelvuotoelasalivachevigocciolasullamaglietta.Ilpensiero“alzatidalpavimento”èun’istruzione,ouncomando,chedicealvostrocorpodialzarsi.Allostessomodo,iprogrammidiconoaicomputerchecosafare.

Sesapetescrivereprogrammipercomputer,potetefareognigeneredicoseutili.Certo,magarinonsareteingradodiscrivereprogrammichecontrollanoauto,semaforioilfrigorifero(oalmeno,noninizialmente),mapotretecrearepagineweb,scrivereivostrigiochioaddiritturaunprogrammachevisiad’aiutoneicompitiacasa.

QUALCHEPAROLASULLINGUAGGIOComegliesseriumani,icomputerpossonousaremoltelinguepercomunicare–inquestocaso,linguaggidiprogrammazione.Unlinguaggiodiprogrammazioneèsolounmodoparticolarediparlareauncomputer–unmodoperusareistruzionichesiagliesseriumanisiaicomputersonoingradodicomprendere.

Esistonolinguaggidiprogrammazionecheprendonoilnomedapersone(comeAdaePascal),quellichehannocomenomesempliciacronimi(comeBASICeFORTRAN)eanchequalcunocheprendeilnomedatrasmissionitelevisive,comePython.Sì,illinguaggiodiprogrammazionePythonhapresoilnomedallatrasmissionetelevisivaingleseMontyPython’sFlyingCircus,nondalserpente(pythonèlaparolainglesechesignifica“pitone”,senonl’avevateancoracapito).

ParecchiecaratteristichefannodiPythonunlinguaggiodiprogrammazioneestremamenteutileperchièalleprimearmi.PoteteutilizzarePythonperscriveremoltorapidamenteprogrammisemplicimamoltoefficaci.Nonusamoltisimbolicomplicati,adifferenzadialtrilinguaggidiprogrammazione,edèperciòpiùfaciledaleggereemoltopiù“amichevole”perchièagliinizi.(QuestononvuoldirechePythonnonusisimboli–semplicementeillorousononècosìestesocomeinmoltialtrilinguaggi.)

INSTALLAREPYTHONL’installazionediPythonèmoltosemplice.Quivedremocomelosiinstallain

Page 13: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.

3.

Windows10,MacOSXeUbuntu.InstallandoPython,trovereteancheuncollegamentoalprogrammaIDLE(chesignificaIntegratedDeveLopmentEnvironment,ambientedisviluppointegrato),chepermettediscrivereprogrammiperPython.SePythonègiàinstallatosulvostrocomputer,potetepassaresubitoalparagrafo“DopoaverinstallatoPython”apagina10.

INSTALLAREPYTHONINWINDOWS10PerinstallarePythonperMicrosoftWindows10,usateilbrowserweb,andateall’indirizzohttp://www.python.org/escaricateilprogrammadiinstallazionepiùrecenteperPython3.NelmenudelsitotrovereteunasezioneintitolataDownloads.Unclicsulnomediquestasezioneviporteràaunafinestracomequesta:

NOTAQualesiaesattamentelaversionediPythonchescaricatenonèimportante,bastacheilsuonumeroiniziconil3.Gliaggiornamentisonofrequenti:quivedeteleindicazioniperlaversione3.5.1,maèprobabilechequandoleggeretequestepaginelaversionepiùrecenteabbiaunnumeropiùalto.

UnavoltascaricatoilprogrammadiinstallazioneperWindows,fateundoppioclicsullasuaicona,poiseguiteleistruzioniperinstallarePythonnellaposizionepredefinita.

SelezionatelacaselladicontrolloInstalllauncherforallusers(senonègiàselezionata).Noncambiateladirectorydidestinazionepredefinita,maannotateviilnomedelladirectory(potrebbeessereC:\Python32,peresempio).IgnoratelasezioneCustomizeinstallationefateclicsuInstallnow.

Allafinedelprocedimento,nelmenuStarttroverete,tralenuoveapp,ofrale

Page 14: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.

3.4.

appinstallatedirecente,alcunevocirelativeaPython.

Poi,seguitequestipassiperaggiungereuncollegamentoaPython3alvostrodesktop:

Fateclicdestroinunpuntovuotodeldesktop,poiselezionateNuovo,Collegamentodalmenudisceltarapida.NellacasellasottolascrittaImmettereilpercorsoperilcollegamento,scrivete(assicurandovicheilnomedelladirectorysiaquellochevisieteannotatiinprecedenza):

FateclicsuAvantiperpassareallafinestradidialogosuccessiva.InseriteilnomecomeIDLEefateclicsuFinepercreareilcollegamento.

Orapotetepassarea“DopoavereinstallatoPython”apagina10periniziare.

Page 15: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.

INSTALLAREPYTHONSUMACOSXSeusateunMac,dovresteavereunaversionediPythongiàpreinstallata,maprobabilmentesitrattadiunaversionepiùvecchia.Peresseresicuridiaverelapiùrecente,apriteilbrowsereandateall’indirizzohttp://www.python.org/getit/perscaricareilprogrammadiinstallazionepiùrecenteperilMac.

Iprogrammidiinstallazionesonodiversi:quellochedovetescaricaredipendedallaversionediMacOSXcheavete.(Seavetedubbi,potetescoprireilnumerodiversionedelsistemaoperativofacendoclicsullaMelanellabarradeimenuinaltoescegliereInformazionisuquestoMac.)

SeilvostrocomputerhaunaversionediMacOSXcompresafrala10.3ela10.6,scaricatelaversionea32bitdiPython3peri386/PPC.

SeilvostrocomputerhaunaversionediMacOSX10.6osuperiore,scaricatelaversione64-bit/32-bitdiPython3perx86-64.

Unavoltascaricatoilfile(avràunnomeconestensione.pkgelotroveretenellacartellaDownload),fateundoppioclicsudiessoepartiràilprocessoguidatodiinstallazione.

Inquestafinestra,fatedoppioclicsuPythonmpkg,poiseguiteleistruzioniperinstallareilsoftware.ViverràchiestalapassworddiamministratoredelvostroMac.(Nonconoscetelapassworddiamministratore?Probabilmentedovretechiedereaivostrigenitoridiinserirla.)

Poi,doveteaggiungerealdesktopunoscriptperlanciarel’applicazioneIDLEdiPython,inquestomodo:

Fateclicsull’iconaSpotlight,lalentediingrandimentonell’angolosuperioredestrodellaschermata.Nellafinestrachecompare,scriveteAutomator.

Page 16: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

3.4.

5.6.

7.

Fateclicsull’applicazionechehal’aspettodiunrobot,quandocomparenelmenu.SarànellasezioneintitolataPiùutilizzatioinApplicazioni.AvviatoAutomator,selezionateilmodelloApplicazione:

FateclicsuSceglipercontinuare.Nell’elencodelleazioni,trovateEseguiscriptshelletrascinatelonelriquadrovuotoadestra.Vedretequalcosadisimileaquesto:

Nellacaselladitesto,vedretelaparolacat.Selezionatequestaparolae

Page 17: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

8.9.

1.

2.3.

4.5.

sostituitelaconiltestoseguente(tutto,daopena-n):

Puòdarsichedobbiatecambiareladirectory,asecondadellaversionediPythoncheaveteinstallato.SelezionateFile,SalvaeinseritecomenomeIDLE.SelezionateDesktopdallafinestradidialogoSituatoin,poifateclicsuSalva.

Orapotetepassarea“DopoavereinstallatoPython”apagina10periniziare.

INSTALLAREPYTHONSUUBUNTUPythonègiàpreinstallatonelladistribuzioneUbuntudiLinux,mapuòdarsichenonsialaversionepiùrecente.PerinstallarePython3suUbuntuprocedetecosì:

Fateclicsulpulsantedell’UbuntuSoftwareCenternellaSidebar(èl’iconachehal’aspettodiunaborsaarancione–senonlavedete,potetesemprefareclicsull’iconaDashHomeeinserireSoftwarenellafinestradidialogo).InseritePythonnellacaselladiricerca(inaltoalcentro)delSoftwareCenter.Nell’elencodelsoftwarechesipresenta,selezionatelaversionepiùrecentediIDLE,cheè,almomentoincuiscrivo,IDLE(usingPython3.5).FateclicsuInstalla.Inseritelapassworddiamministratorequandovivienerichiestaeprocedeteall’autenticazione.(Nonconoscetelapassworddiamministratore?Dovretechiedereaivostrigenitoridiinserirlapervoi.)

NOTAInqualcheversionediUbuntu,puòdarsichevediatesoloPython(v3.5)nelmenuprincipale(anzichéIDLE):poteteinstallarequello.

ConalcuneversionidiUbuntularicercadiPythonattraversoilSoftwareCentersembranondarefrutto.Intalcaso,apriteunafinestradiTerminaleealpromptinseriteilcomandoseguente:

L’installazioneèpoicompletamenteautomatica,tranneunarichiestadiconferma(acuidoveterispondereconunSì).AlterminepotretetrovareIDLE(usingPython3.5)nell’elencodelsoftwareinstallatonelSoftwareCenter,nellasezioneApplicazioni.Seavetedifficoltàatrovarlo,utilizzatelacaselladiricercadiCercasulcomputer(èlaprimaiconainaltonellabarralaterale).

DOPOAVERINSTALLATOPYTHON

Page 18: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Orasuldesktopdelvostrocomputer(seaveteunamacchinaWindowsounMacOSX)dovresteavereun’iconaIDLE.SeusateUbuntu,asecondadellaversionedelsistemaoperativo,troveretel’iconanelmenuApplicazionioppurenelSoftwareCenter.

Fateundoppioclicsull’iconaosceglietel’opzionedamenuevicompariràunafinestracomequesta:

QuestaèlashelldiPython,chefapartedell’ambientedisviluppointegrato.Itresimboli“maggioredi”(>>>)sonoilcosiddettoprompt.

Inseriamoqualchecomandoalprompt,cominciandoconquesto:

Fateattenzioneanondimenticareidoppiapici("").PremeteInviosullatastiera,quandoavetefinitodiscriverequestariga.

Seaveteinseritocorrettamenteilcomando,vedretequalcosadianalogoaquesto:

Page 19: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Saràricomparsoilprompt,perfarvisaperechelashelldiPythonèprontaadaccettarealtricomandi.

Congratulazioni!AveteappenacreatoilvostroprimoprogrammainPython.LaparolaprintfapartediqueltipodicomandiPythonchesonochiamatifunzioni,e“stampa”qualsiasicosasitroviall’internodelleparentesi.

Insostanza,avetedatoalcomputerl’istruzionedivisualizzareleparole“Ciaomondo”–unaistruzionecomprensibilesiaavoichealcomputer.

SALVAREIPROGRAMMIPYTHONIprogrammiPythonnonsarebberomoltoutilisefossenecessarioriscriverliognivoltachelisivuoleusare,oppurevisualizzareinmododapoterliconsultare.Certo,unprogrammamoltobrevesipotrebbeancheriscrivere,maunprogrammadigrandidimensioni,comeunelaboratoreditesto,puòesserecostituitodamilionidirighedicodice.Stampateletutteeviritroveretemagariconunmalloppodaoltre100.000pagine.Difficileportarloacasasottobraccio–sperandochenonarriviunafolatadivento.

Perfortuna,èpossibilesalvareiprogrammiperpoterliriusareinfuturo.Persalvareunnuovoprogramma,inIDLEsceglieteFile,NewFile.Siapriràunanuovafinestra,conilnomeUntitlednellabarradeltitolo.Nellanuovafinestradellashellscrivetequestocodice:

OrasceglieteFile,Save.Quandovienechiestoilnomedelfile,scriveteciao.pyesalvateilfilesuldesktop.PoisceglieteRun,RunModule.Senonavetecommessoerrori,ilprogrammaverràeseguito,conquestorisultato:

Page 20: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ora,sechiudetelafinestradellashellmalasciateapertalafinestraciao.pyesceglietedinuovoRun,RunModule,ricompariràlashelldiPythoneilvostroprogrammaverrànuovamenteeseguito.(PerriaprirelashelldiPythonsenzaeseguireilprogramma,sceglieteRun,PythonShell.

Dopoavereseguitoilcodice,suldesktoptrovereteunanuovaicona,conilnomehello.py.Sefateundoppioclicsuquell’icona,appariràbrevementeunafinestraconlosfondonero,esubitodoposvanirà.Checosaèsuccesso?

AvetevistolaconsoledarigadicomandodiPython(analogaallashell)chesiavviava,stampava“Ciaomondo”epoisichiudeva.Eccoquellocheviapparirebbe,seavesteunavistaultrarapidadasupereroeeriuscisteavederelafinestraprimachesichiuda:

Page 21: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Oltreaimenu,poteteusareitastidisceltarapidapercreareunanuovafinestradellashell,salvareunfileedeseguireunprogramma:

InWindowseUbuntu,usateCtrl-Npercreareunanuovafinestradellashell,Ctrl-Spersalvareilfiledopocheavetefinitodiscriverlo,F5pereseguireilprogramma.InMacOSX,usateOpzione-Npercreareunanuovafinestradellashell,Opzione-Spersalvareilfile,mentrepereseguireilprogrammapremeteetenutopremutoiltastofunzione(FN)epremeteF5.

CHECOSAAVETEIMPARATOAbbiamoiniziatoinquestocapitoloconun’applicazioneCiaomondo,ilprogrammaconcuipraticamentetuttiinizianoquandocomincianoastudiarelaprogrammazione.Nelprossimocapitolo,faremoqualchealtracosautileconlashelldiPython.

Page 22: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

2CALCOLIEVARIABILI

OracheaveteinstallatoPythonesapetecomeavviarelashell,sieteprontiperfarequalcosa.Inizieremoconqualchesemplicecalcoloepoipasseremoallevariabili.Levariabilisonounmodoperconservarelecoseinunprogrammaepermettonodiscrivereprogrammiutili.

Page 23: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 24: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

CALCOLARECONPYTHONNormalmente,sevichiedesserodicalcolareilprodottodiduenumeri,peresempio8×3.57(useremoilpuntoalpostodellavirgola,neinumeridecimali,comenell’usoanglosassone:ècosìchelivuolescrittiPython),useresteunacalcolatriceocartaepenna.Beh,cheneditediusarelashelldiPythonperfarequestocalcolo?Proviamo.

AvviatelashelldiPythonconundoppioclicsull’iconaIDLEsuldesktopo,seusateUbuntu,facendoclicsull’iconaIDLEnelSoftwareCenter.Alprompt,inseritel’espressione:

Notateche,perchiedereaPythondieffettuareunamoltiplicazione,siusailsimbolodell’asterisco(*),invecedeltradizionalesegno“per”(×).

Eseprovassimoconuncalcolounpo’piùutile?Supponiamoche,scavandoingiardino,troviateunsacchettocon20monete

d’oro.Ilgiornodopo,viintrufolateincantinaeinfilatelemonetenellamacchinareplicatriceavaporedelnonno(perfortuna,riuscitegiustoainfilarcitutteleventimonete).Sentiteunrisucchioeunoschioccoe,dopoqualcheora,eccocheneesconoaltre10moneteluccicanti.

Quantemoneteavrestenellacassadelvostrotesorosefacestelastessacosaognigiornoperunanno?Sullacarta,leespressionipotrebberoesserequeste:10×365=365020+3650=3670

Certo,èfacilefarequesticalcoliconlacalcolatriceosucarta,mapossiamofarliancheconlashelldiPython.Prima,moltiplichiamole10moneteperi365giorniinunanno,poialrisultatosommiamole20moneteoriginali.

Uncorvovedelebellemoneted’oronellavostracameradalettoeognisettimanaentraeriesceaportarseneviatre.Quantemonetevirimarrannoallafinedell’anno?Eccocomesipresenterebbeilcalcolonellashell:

Page 25: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Prima,moltiplichiamo3moneteper52settimane.Ilrisultatoè156.Sottraiamoquestonumerodalnostrototale(3670)escopriamocheafineannovirimarranno3514monete.

Questoèunprogrammamoltosemplice.Nelcorsodellibro,vedretecomesvilupparequesteideeperscrivereprogrammimoltopiùutili.

GLIOPERATORIDIPYTHONNellashelldiPythonpoteteeseguirelequattrooperazioniaritmetichefondamentali(somma,sottrazione,moltiplicazioneedivisione),oltreamoltealtrecheperilmomentononaffrontiamo.IsimbolifondamentaliutilizzatidaPythonperleoperazionimatematichesonochiamatioperatoriesonoelencatinellaTabella2.1.

Tabella2.1.GlioperatorifondamentalidiPython.

Simbolo Operazione+ Somma- Sottrazione* Moltiplicazione/ Divisione

Siusalabarraperladivisioneperchéèsimileallalineachesiscriveperindicarelefrazioni.Peresempio,seavete100piratie10grandibottievoletecalcolarequantipiratidovetesistemareinciascunabotte,potetedividere100piratiper20botti(100:20)scrivendo100/20nellashelldiPython.

L’ORDINEDELLEOPERAZIONIInunlinguaggiodiprogrammazionesiusanoleparentesipercontrollarel’ordinediesecuzionedelleoperazioni.Unaoperazioneèun’istruzionecheusaunoperatore.Lamoltiplicazioneeladivisionehannolaprecedenzasusommaesottrazione,cioèvengonoeseguiteperprime.Inaltreparole,seinserite

Page 26: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

•••

un’espressioneinPython,lemoltiplicazionieledivisionivengonoeseguiteprimadellesommeedellesottrazioni.Peresempio,inquestocaso,primavengonomoltiplicati30e20,poialprodottovienesommato5.

Questaespressioneèilnostromododidire“moltiplica30per20,poisomma5alrisultato”.Iltotaleè605.Possiamomodificarel’ordineincuivengonoeseguiteleoperazioniinserendoleparentesi,peresempiocosì,persommare5e30primachevengaeseguitalamoltiplicazioneper20:

Ilrisultatodiquestocalcoloè700(non605)perchéleparentesidiconoaPythondicalcolareprimalasommafraparentesiesolodopoeseguirel’operazioneindicatafuoridalleparentesi.L’esempiodice“somma5a30,poimoltiplicailrisultatoper20”.

Leparentesipossonoessereannidate,cioèpossonoesserciparentesidentroparentesi,comeinquestocaso:

Inquestocaso,Pythonsvolgeprimal’operazioneindicatadalleparentesipiùinterne,poiquelladentroleparentesiesterne,infinequellafuoridalleparentesi(ladivisione).

Inaltreparole,questaespressionedice“somma5a30,poimoltiplicailrisultatoper20edividiilnuovorisultatoper10”.Eccochecosasuccede:

Sommando5e30siottiene35.Moltiplicando35per20siottiene700.Dividendo700per10siottieneilrisultatofinale,70.

Senonavessimousatoleparentesi,ilrisultatosarebbestatoleggermente

Page 27: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

diverso:

Inquestocaso,prima30vienemoltiplicatoper20(risultato:600),poi600vienedivisoper10(risultato:60)einfinevienesommato5,ilchedàcomerisultatofinale65.

ATTENTIRicordatechemoltiplicazioneedivisionevengonoeseguiteprimadisommaesottrazione,amenochevenganousateleparentesipercontrollarel’ordinediesecuzionedelleoperazioni.

LEVARIABILISONOCOMEETICHETTELaparolavariabilenellaprogrammazionedescriveunluogoincuiconservareinformazionicomenumeri,testo,elenchidinumerietestiecosìvia.Sipuòconsiderareunavariabileanchecomeun’etichettacheindicaqualcosa.

Peresempio,percreareunavariabilechesichiamafred,possiamousareunsegnodiuguale(=)epoidireaPythonperchetipodiinformazionequellavariabiledebbaesserel’etichetta.QuicreiamolavariabilefredediciamoaPythoncheèl’etichettadelnumero100(notatechequestononescludecheancheun’altravariabilepossaaverelostessovalore):

Perscoprirediqualevaloreunavariabilesial’etichetta,nellashellscriveteprint,seguitodalnomedellavariabilefraparentesi,inquestomodo:

PossiamoanchedireaPythondimodificarelavariabilefredinmodocheindichiqualcos’altro.Peresempio,eccocomecambiareilvaloredifredin200:

Nellaprimariga,diciamochefredèun’etichettadelnumero200.Nellaseconda,chiediamochecosaetichettafred,tantoperesseresicuridellavariazione.Pythonstampailrisultatosull’ultimariga.

Possiamousareanchepiùdiun’etichetta(piùdiunavariabile)perindicarelastessacosa:

Page 28: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestoesempio,diciamoaPythonchevogliamocheilnome(lavariabile)johnetichettilastessacosadifredutilizzandoilsegnodiugualefrajohnefred.

Ovviamente,fredprobabilmentenonèunnomemoltoutileperunavariabile,perchénoncidicenulladiquellopercuiquellavariabilevieneutilizzata.Chiamiamoalloralanostravariabilenumero_di_moneteanzichéfred,così:

Inquestomodoèchiarocheparliamodi200monete.Inomidellevariabilipossonoesserecostituitidalettere,numeriedalcarattere

underscore(_),manonpossonoiniziareconunnumero.Poteteusareancheunasingolalettera(peresempioa),cosìcomeunalungafrase,comenomedivariabile.(Unavariabilenonpuòcontenerespazi,perciòusatel’underscoreperseparareleparole.)Avolte,sedovetefarequalcosarapidamente,nomibreviperlevariabilisonolasoluzionemigliore.Ilnomechesceglietedipendedaquantovoletechesiasignificativo.

Orachesapetecomecrearevariabili,vediamoinchemodousarle.

USARELEVARIABILIRicordatelanostraespressionepercalcolarequantemoneteavresteavutoallafinedell’anno,potendomagicamentecrearenuovemoneteconlafolleinvenzionedelnonnoincantina?Abbiamoquesteespressioni:

Possiamotrasformarleinun’unicarigadicodice:

Ora,chenediteditrasformareinumeriinvariabili?Provate:

Page 29: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.

Questerighecreanolevariabilimonete_trovate,monete_magicheemonete_rubate.Orapossiamoriscriverelanostraespressioneinquestomodo:

Comesipuòvedere,siottienesemprelastessarisposta.Eallora,perchédarsitantodafare?Ah,maquistalamagiadellevariabili.Checosasuccedesemetteteunospaventapasseriallafinestraeilcorvorubasoloduemoneteinveceditre?Seusiamounavariabile,possiamosemplicementemodificarlainmodochecontengailnuovonumero,ecosìilcambiamentosicomunicheràintuttiipuntiincuiquelnumeroerausatonell’espressione.Possiamocambiarelavariabilemonete_rubateinquestomodo:

Poipossiamocopiareeincollarel’espressione,percalcolarenuovamenteiltotale,inquestomodo:

Selezionateiltestodacopiarefacendoclicconilmouseepoitrascinandodall’inizioallafinedellariga:

TenetepremutoiltastoCtrl(oiltastoOpzione,seusateunMac)epremeteCpercopiareiltestoselezionato.(D’orainpoi,scriveremosemplicementeCtrl-C.)

Page 30: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

3.4.

5.

Fateclicsull’ultimarigadiprompt(dopomonete_rubate=2).TenetepremutoiltastoCtrlepremeteVperincollareiltestoselezionato.(D’orainpoiscriveremosemplicementeCtrl-V).PremeteInviopervedereilnuovorisultato.

Nonèmoltopiùfacilecheriscriveretuttal’espressione?Poteteprovareamodificarelealtrevariabili,poicopiate(Ctrl-C)eincollate

(Ctrl-V)l’espressionepervederel’effettodeicambiamenti.Peresempio,seassestandouncolpoalmomentoopportunosulfiancodell’invenzionedelnonnoquestaemetteognivolta3moneteinpiù,viritrovereteallafinedell’annocon4661monete:

Ovviamente,usarelevariabiliperun’espressionesemplicecomequestanonèdigrandeutilità:nonsiamoancoraarrivatiaqualcosadiveramenteutile.Perilmomento,ricordatesolochelevariabilisonounmodoperetichettarecose,inmododapoterleriutilizzareinseguito.

CHECOSAAVETEIMPARATOInquestocapitoloaveteimparatocomecalcolaresempliciespressionimatematicheconglioperatoridiPythonecomeusareleparentesipercontrollarel’ordinediesecuzionedelleoperazioni(cioèl’ordineincuiPythoncalcolalediversepartidiun’espressione).Poiabbiamocreatodellevariabiliperetichettaredeivalorieabbiamousatoquellevariabilineinostricalcoli.

Page 31: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

3STRINGHE,LISTE,TUPLEEMAPPE

NelCapitolo2,abbiamoeseguitoqualchesemplicecalcoloconPython,eavetescopertochecosasonolevariabili.Inquestocapitolo,lavoreremoconalcunideglialtrielementineiprogrammiPython:stringhe,liste,tupleemappe.Useretelestringheperpresentaredeimessaggineivostriprogrammi(peresempio“Preparatevi”o“Gameover”inungioco).Scoprireteanchecomeliste,tupleemappevenganoutilizzateperconservareinsiemidicose.

Page 32: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 33: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

STRINGHENellaprogrammazione,sidicestringaunasuccessionedicaratteri.Unastringapuòconteneretuttelelettere,inumerieisimbolidiquestolibro,oppureilvostronomeeindirizzo.Ineffetti,ilprimoprogrammaPythoncreatonelCapitolo1usavaunastringa:“Ciaomondo”.

CREARESTRINGHEInPython,sicreaunastringamettendodoppiapiciall’inizioeallafinediuntesto,perchéilinguaggidiprogrammazionedevonodistingueretipidivaloridiversi.(Dobbiamodireseunvaloreèunnumero,unastringaoaltro.)Peresempio,prendiamolavariabilefreddelCapitolo2eusiamolaperetichettareunastringa:

Poi,pervederechecosac’èdentrofred,possiamoscrivere:

Sipossonousareancheapicisingoli,percreareunastringa,inquestomodo:

Però,secercatediinserirepiùrigheditestoperunastringausandosolounapicesingolo(')odoppio(")oseiniziateconuntipodiapiceefiniteconl’altro,lashelldiPythonvimosteràunmessaggiodierrore.Peresempio,provateainserirequestariga:

Page 34: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Vedretequestorisultato:

Lascrittaèunmessaggiodierrorechelamentaunerroredisintassi,perchénonaveteosservatolaregola,cheprescrivelachiusuradiunastringaconunapicesingoloodoppio.[Lascrittasignifica:Erroredisintassi:raggiuntalafinedellariganell’analizzarelastringa.]Sintassisignificailmodoincuisonodisposteeordinateleparoleinunafraseo,

inquestocaso,ilmodoincuisonodispostieordinatiparoleesimboliinunprogramma.SyntaxErrorquindisignificacheavetefattoqualcosainunordinechePythonnonsiaspettava,ochePythonsiaspettavaqualcosacheinvecemancava.EOLsignificaend-of-line(fineriga),perciòilrestodelmessaggiodierroredicechePythonharaggiuntolafinedellarigaenonhatrovatoundoppioapicedichiusuradellastringa.

Perusarepiùdiunarigaditestonellastringa(chesichiamaallorastringamultilinea),iniziatelastringacontreapicisingoli(''')epremeteInviofraunarigael’altra,così:

Proviamooraastampareicontenutidifredpervedereseèandatotuttobene:

TRATTAREPROBLEMICONLESTRINGHEPrendiamoquestoesempiodistringa,cheprovocaunmessaggiodierroreinPython:

Nellaprimariga,abbiamocercatodicreareunastringa(definitaconilnomemoltofantasiosodistringa),racchiusafraapicisingoli,macontenenteunacombinazionediapicieanchedidoppiapici.Unbelpasticcio!

RicordatechePythonnonèintelligentequantounessereumano,perciòtuttoquellochevedeèunastringacontenenteHadettol’,seguitodaunaseriedialtricaratterichenonsiaspettava.QuandoPythonvedeunapice(singoloodoppio)siaspettaunastringacheiniziaconilprimoapice(singoloodoppio)echesiconcludeconilsuccessivoapicecorrispondente.Qui,l’iniziodellastringaèindicatodalprimoapicesingoloprimadiHa,elafinedellastringa,perquelcheconstaaPython,èl’apicesingolodopolaldil'altrasera.IDLEevidenziadovele

Page 35: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

coseinizianoanonquadrare:

L’ultimarigadiIDLEcidicechetipodierroresièverificato:inquestocasounerroredisintassinonvalida.

L’usodiapicidoppialpostodiquellisingoliproduceancoraunerrore:

Qui,Pythonvedeunastringadelimitatadaapicidoppieinterpretacorrettamentegliapicisingolicomecaratteri(enoncomedelimitatori),mapoi,doposera,incontraundoppioapicecheinterpretacomefinedellastringa–seguitodaaltricaratterichenonsapiùcomeinterpretare:

Tuttoquestoperché,dalpuntodivistadiPython,tuttiqueicaratteriulteriorisemplicementenondovrebberoesserci.Pythoncercailtipodiapicecorrispondenteaquellodiaperturae,quandoloincontra,pensachelastringasiafinitaenonsachecosafarsenediquellocheseguesullastessariga.

Lasoluzioneèunastringamultilinea,comeabbiamovisto,conl’usoditreapicisingoli('''),chepermettonodicombinareapicisingoliedoppinellastringasenzaprovocareerrori.Ineffetti,sesiusanocomedelimitatoriitreapicisingoli,nella

Page 36: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

stringasipuòmetterequalsiasicombinazionediapicisingoliedoppi(bastanontentarediinseriretreapicisingoliinfila).Questaèlaversioneprivadierroridellanostrastringa:

Maaspettate,nonèfinita.SevoletepropriousareunapicesingoloodoppioperdelimitareunastringainPython,invecediusareitreapicisingoli,poteteaggiungereunabarrarovesciata(\)davantiaciascunapiceall’internodellastringa.Questatecnicasichiamaescapingelabarrarovesciataèchiamatacaratterediescape.ÈunmodoperdireaPython“Sì,loso,hodegliapicidentrolamiastringa,evogliochetuliignorifinchénonvedil’apicefinale”.

Lestringheconicaratteridiescapepossonoesserepiùdifficilidaleggere,perciòèmeglio,ingenerale,usarelestringhemultilinea.Puòcapitareperòdiimbattersiinqualcheframmentodicodicecheusaicaratteridiescape,perciòèbenesaperechecosasonoquellebarrerovesciate.

Eccoqualcheesempiodellatecnicadell’escaping:

Prima,in 1 ,abbiamocreatounastringaconl’apicesingolocomedelimitatore,mettendolabarrarovesciatadifronteagliapicisingoliall’internodellastringa.In2 ,abbiamocreatounastringaconildoppioapiceeusatolabarrarovesciatadavantiaidoppiapicidentrolastringa.Nellerighesuccessive,abbiamostampatolevariabiliappenacreate.Notatecheilcaratteredellabarrarovesciatanoncomparenellestringhe,quandovengonostampate.

INCORPORAREVALORINELLESTRINGHESevoletevisualizzareunmessaggiocheusiicontenutidiunavariabile,poteteincorporareivaloriinunastringacon%s,cheèunasortadiindicatorediunvaloredaaggiungereinseguito(siparladiincorporarevaloriodisostituzionedistringa,nelgergodeiprogrammatori).Peresempio,perchéPythoncalcolioricordiilnumerodipuntifattiinungiocoepoiliinseriscainunafrasecome“Hototalizzato___punti”,usate%snellafrasealpostodiquelvalore,poiditeaPythonilvalore,peresempiocosì:

Page 37: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Abbiamocreatolavariabilemiopunteggioconvalore1000elavariabilemessaggioconunastringachecontieneleparole“Hototalizzato%punti”,dove%sèun“segnaposto”perilnumerodipunti,Nellarigasuccessiva,chiamiamoprint(messaggio)conilsimbolo%perdireaPythondisostituire%sconilvaloredellavariabilemiopunteggio.IlrisultatoèlavisualizzazionedelmessaggioHototalizzato1000punti.Nonènecessariousareunavariabileperilvalore:avremmoottenutolostessorisultatoutilizzando(messaggio%1000).

Possiamoanchepassarevaloridiversiperilsegnaposto%s,utilizzandovariabilidiverse,comeinquestoesempio:

Quiabbiamocreatotrevariabili.Laprima,battuta,conservalastringaconilsegnaposto%s.Lealtreduevariabilisonoparte_del_corpo1eparte_del_corpo2.Possiamostamparelavariabilebattutaeusarenuovamentel’operatore%cheverràsostituitodaicontenutidellevariabiliparte_del_corpo1eparte_del_corpo2pergeneraremessaggidiversi.

Poteteusareanchepiùdiunsegnapostoinunastringa,peresempioinquestomodo:

Quandosiusapiùdiunsegnaposto,bisognaricordarediinserireivalori

Page 38: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

sostitutivifraparentesi,comenell’esempio.L’ordineincuiivaloricompaionofraleparentesisaràanchel’ordineincuiverrannousatinellastringa.

MOLTIPLICARESTRINGHEQuantofa10moltiplicatoper5?Larisposta,ovviamente,è50.Machecosafa10moltiplicatopera?QuestaèlarispostadiPython:

ProgrammandoinPythonsipuòusarequestometodoperallinearelestringheconunnumerospecificodispazi,quandosivisualizzanomessagginellashell,peresempio.Potremmostampareunaletteranellashell:selezionateFile>NewFileeinseritequestocodice:

Scrittoilcodicenellafinestradellashell,selezionateFile>SaveAs.Datealfileilnomemialettera.py.PotetepoieseguirloselezionandoRun>RunModule.

NOTADaquestomomento,quandovedreteSaveAs:unnomedifile.pyaldisopradiunbranodicodice,sapretechedoveteselezionareFile>NewFile,inserireilcodicenellafinestrachesiapreepoisalvarlocomeabbiamofattoinquestoesempio.

Nellaprimarigadiquestoesempioabbiamocreatolavariabilespaziassegnandolecomevaloreuncaratterespaziomoltiplicatoper25.Poiabbiamousatoquellavariabile,nelletrerighesuccessive,perallineareiltestorientratosulladestradellafinestradellashell.Potetevedereilrisultatodiquestienunciatiprintquisotto:

Page 39: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Oltreausarlaperl’allineamento,possiamousarelamoltiplicazioneperriempireloschermodimessaggiirritanti.Poteteprovaredasoliquestoesempio.

LELISTESONOPIÙPOTENTIDELLESTRINGHE“Zampediragno,ditodirana,occhiodigirino,aladipipistrello,bavadilumaconeeforforadiserpente”:nonèpropriounalistadellaspesanormale(amenochenonsiatemaghi),malauseremocomeprimoesempioperillustrareledifferenzefrastringheeliste.

Potremmoconservarequestalistanellavariabilemago_listaconunastringacomequesta:

Page 40: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Potremmoperòanchecreareunalista,untipodioggettounpo’magicodiPython,chesipuòmanipolaremeglio.Eccocomesipresenterebberoinostriingredientiinformadilista:

Percreareunalistabisognascrivereunpo’dicaratteriinpiùchepercreareunastringa,maunalistaèpiùutileperchépuòesseremanipolata.Peresempio,potremmostampareilterzoelementodellamago_lista(occhiodigirino)indicandolasuaposizionenellalista(ilsuoindice)fraparentesiquadre([]),inquestomodo:

Cosa?Manonerailterzoelementodellalista?Vero,malelisteinizianoconlaposizione0,perciòilprimoelementodiunalistaè0,ilsecondo1,ilterzo2.Forsenonavràmoltosensopergliesseriumani,manehapericomputer.

Possiamoanchemodificareunelementoinunalistamoltopiùfacilmentecheinunastringa.Magari,anzichéunocchiodigirinoavevamobisognodiunalinguadichiocciola.Eccocomepotremmofareconlanostralista:

Inquestomodoabbiamomodificatol’elementodiindice2:primaera“occhiodigirino”,oraè“linguadichiocciola”.

Altrapossibilitàèvisualizzareunsottoinsiemedeglielementinellalista.Losipuòfareusandounsegnodiduepunti(:)dentroleparentesiquadre.Peresempio,pervedereglielementidalterzoalquintodellalista:

Page 41: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Scrivere[2:5]equivaleadire“mostramiglielementidallaposizionediindice2finoaquella(esclusa)diindice5”–inaltreparole,glielementi2,3e4.

Lelistepossonoessereutilizzateperconservareelementidiqualsiasigenere,peresempionumeri:

Possonocontenereanchestringhe:

Possonocontenereanchenumeriestringheallarinfusa:

Lelistepoipossonocontenereanchealtreliste:

Inquest’ultimoesempio,abbiamocreatotrevariabili:numerichecontienequattronumeri,stringhechecontienenovestringheemialistautilizzandonumeriestringhe.Laterzalista(mialista)hasolodueelementi,perchéèunalistadinomidivariabili,nondeicontenutidellevariabilistesse.

AGGIUNGEREELEMENTIAUNALISTAPeraggiungereelementiaunalista,siusalafunzioneappend.UnafunzioneèunbloccodicodicechediceaPythondifarequalcosa.Inquestocaso,appendaggiunge

Page 42: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

unelementoallafinediunalista.Peresempio,peraggiungereunruttodiorso(sonosicurocheesisteunacosa

delgenere)allalistadellaspesadelmago:

Potetecontinuareadaggiungereelementimagiciallalista,semprenellostessomodo:

Oralalistadelmagosaràdiventataquesta:

Ilmagoèprontopercompierequalchemagiaimportante!

ELIMINAREELEMENTIDAUNALISTAPereliminareelementidaunalista,siusailcomandodel(abbreviazionedidelete,chesignifica“cancella”).Peresempio,pereliminareilsestoelementonellalistadelmago,laforforadiserpente,sipuòfareinquestomodo:

NOTARicordatechenellelisteleposizionipartonodall’indicezero,perciòmago_lista[5]indicaineffettiilsestoelementodellalista.

Edeccocomeeliminareglielementicheabbiamoappenaaggiunto(mandragora,cicutaegasdipalude):

Page 43: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

ARITMETICADELLELISTEPossiamounire(ilterminepiùprecisoèconcatenare)dueopiùlistesemplicementesommandole,comefaremmoconinumeri,medianteunsegnopiù(+).Peresempio,supponiamodiaveredueliste:lista1,checontieneinumerida1a4,elista2,checontienealcuneparole.Possiamounirleusandoprinteilsegno+,inquestomodo:

Èpossibileancheunire(concatenare)duelisteeassegnareilrisultatoaun’altravariabile:

Possiamoanchemoltiplicareunalistaperunnumero.Peresempio,permoltiplicarelista1per5,scriviamolista1*5:

QuestoequivaleineffettiadireaPythondiripeterelista1percinquevolte.Nonsipuòinvecedividereunalistaperunnumeroosottrarreunnumerodauna

lista:siottengonosolomessaggidierrore,comeinquestiesempi:

Page 44: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Perché?Beh,concatenareduelisteconun+eripetereunalistaconun*sonooperazioniabbastanzaimmediate.Questiconcettihannounsensoanchenelmondoreale.Peresempio,seviporgessiduefoglietticonduelistedellaspesaevidicessi,“Sommatequestedueliste”,potrestescrivereleduelistesuunaltrofogliodicartainordine,primal’unaepoil’altra.Allostessomodo,sevidicessi“Moltiplicatequestalistaper3”,potresteimmaginarvidiscriveretuttiglielementidellalistapertrevoltedifilasuunaltrofoglietto.

Macomesipotrebbedividereunalista?Peresempio,pensateacomepotrestedividereunalistadiseinumeri(da1a6)indue.Questisonosolotremodidiversi:

Dividerestelalistaametà,dopoilprimoelementoosceglieresteunpuntoacasoincuidividerla?Nonesisteunarispostasemplicee,seglichiedetedidividereunalista,anchePythonnonsachecosafare.Perquestorispondeconunmessaggiodierrore.

Lostessovalesesitentadisommareaunalistaqualchecosachenonsiaun’altralista.Nonsipuòfareneanchequesto.Peresempio,eccochecosasuccedesetentiamodisommareilnumero50allalista1:

Perchéotteniamounerrore,inquestocaso?Beh,checosavuoldiresommare50aunalista?Significasommare50aciascunelemento?Maseglielementinonsononumeri?Significaconcatenareilnumero50allafinedellalistaoinserirlo

Page 45: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

all’inizio?Nellaprogrammazione,icomandidevonofunzionareesattamentenellostesso

modoognivoltachelisiinserisce.Nellasua“stupidità”,ilcomputervedelecosesoloinbiancoenero.Chiedeteglidiprendereunadecisionecomplicata,eluialzalemaniedichiaraunerrore.

TUPLEUnatuplaècomeunalistacheusaleparentesitonde,comeinquestoesempio:

Quiabbiamodefinitolavariabilefibcomecontenenteinumeri0,1,1,2e3.Poi,comenelcasodiunalista,possiamostamparel’elementonellaposizionediindice3nellatuplamedianteprint(fib[3]).

Ladifferenzaprincipalefraunatuplaeunalistaècheunatuplanonpuòesseremodificata,unavoltacheèstatacreata.Peresempio,setentiamodisostituireilprimovalorenellatuplafibconilnumero4(comeabbiamosostituitovalorinellanostramago_lista),otteniamounmessaggiodierrore:

Perchémaiallorausareunatuplainvecediunalista?Fondamentalmenteperchéavoltetornacomodousarequalcosachesisachenoncambieràmai.Sesicreaunatuplacondueelementi,conterràsemprequeidueelementi.

LEMAPPEDIPYTHONNONVIAIUTERANNOATROVARELASTRADA

InPython,unamappa(qualchevoltavienechiamataanchedict,abbreviazionedidictionary,ovverodizionario)èuninsiemedicose,comelelisteeletuple;ladifferenzaècheinunamappaognielementohaunachiave(key)euncorrispondentevalore.

Peresempio,supponiamodiavereunelencodipersoneconillorosportpreferito.PotremmoinseriretuttequesteinformazioniinunalistadiPython,conilnomedellapersonaseguitodallosportpreferito,peresempioinquestomodo:

Page 46: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

SevichiedessiqualèlosportpreferitodiRebeccaClarke,potrestescorrerelalistaetrovarelarisposta:netball.Maselalistacomprendessecentopersone(omoltedipiù)?

Seinveceinseriamolestesseinformazioniinunamappa,conilnomedellapersonacomechiaveeilsuosportpreferitocomevalore,ilcodicePythonsarebbecomequesto:

Usiamoilsegnodiduepuntiperseparareciascunachiavedalsuovalore;ciascunachiaveeciascunvaloresonoracchiusifraapicisingoli.Notate,inoltre,cheglielementidiunamappasonoracchiusifraparentesigraffe({}),nontondeoquadre.

Ilrisultatoèunamappa(ciascunachiaveviene“mappata”,ovverofattacorrispondereaunparticolarevalore),comeindicatonellaTabella3.1.

Page 47: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Tabella3.1.Lechiavipuntanoaivalori,inunamappadisportpreferiti.

Chiave ValoreRalphWilliams FootballMichaelTippett BasketballEdwardElgar BaseballRebeccaClarke NetballEthelSmyth BadmintonFrankBridge Rugby

Ora,perscoprirequalesialosportpreferitodiRebeccaClarke,possiamoaccedereallanostramappasport_preferitoutilizzandoilsuonomecomechiave,inquestomodo:

Elarispostaè“netball”.Percancellareunvaloreinunamappa,siusalachiavecorrispondente.Per

esempio,pereliminareEthelSmyth:

Anchepersostituireunvaloreinunamappasiusalachiavecorrispondente:

AbbiamosostituitoHockeyaFootballcomesportpreferitodiRalphWilliamsusandoilsuonomecomechiave.

Lavorareconlemappeèunpo’comelavorareconlisteetuple,manonsipossonounirelemappeconl’operatoresomma(+).Seciprovate,ricevereteunmessaggiodierrore:

Page 48: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ilmessaggiodierroredicechel’operatore+nonpuòaverecomeoperandiduemappe(dict).L’unionediduemappenonhasensoperPython,perciòcomealsolitoalzalemani.

CHECOSAAVETEIMPARATOInquestocapitolo,aveteimparatocomePythonusalestringheperconservaredeltestoecomeusalisteetuplepergestirepiùelementi.Avetevistocheglielementinellelistesipossonomodificare,echesipuòaccodareunalistaaun’altra,mentreivaloriinunatuplanonsipossonomodificare.Aveteimparatoanchecomeusarelemappeperconservarevaloriidentificatidachiavi.

ROMPICAPODIPROGRAMMAZIONEQuellicheseguonosonoalcuniesperimentichepoteteprovareafaredavoi.Potetetrovarelerisposteall’indirizzohttp://python-for-kids.com/.

1.PREFERITIFateunalistadeglihobbychepreferiteedateallalistailnomedivariabilegames.Orafateunalistadeivostricibipreferitiechiamatefoodslavariabile.Accodateleduelisteedatealrisultatoilnomefavorites.Infine,stampatelavariabilefavorites.

2.CONTAREICOMBATTENTICisonotreedificicon25ninjanascostisuciascuntettoeduetunnelcon40samurainascostiinciascuno.Quantininjaequantisamuraistannoperaffrontarsiinbattaglia?(PotetefareilcalcoloconunaformulanellashelldiPython.)

3.SALUTI!Createduevariabili:unachepuntialvostrocognomeeunachepuntialvostronome.Oracreateunastringaeusateisegnapostoperstampareilvostronomecon

Page 49: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

unmessaggio,utilizzandoquelleduevariabili,peresempio“Buonagiornata,BrandoIckett!”.

Page 50: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

4DISEGNARECONLETARTARUGHE

InPython,unatartaruga(turtle,ininglese)èunpo’comeunatartaruganelmondoreale.Sappiamocheunatartarugaèunrettilechesispostamoltolentamenteeportalasua“casa”suldorso.NelmondodiPython,unatartarugaèunafreccinanerachesispostasulloschermo.Inrealtà,vistocheunatartarugadiPythonlasciaunatracciaspostandosisulloschermo,assomigliapiùaunachiocciolaoaunalumaca.Latartarugaèunmodoeleganteperimparareglielementifondamentalidellagraficaalcalcolatore,perciòinquestocapitolouseremounatartarugadiPythonperdisegnarelineeefiguresemplici.

Page 51: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 52: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

USAREILMODULOTURTLEDIPYTHONUnmoduloinPythonèunmodopermettereadisposizioneunbloccodicodiceutile,chepotràessereutilizzatodaunaltroprogramma(fralealtrecose,ilmodulopuòcontenerefunzionichesipossonoimpiegareliberamente).ParleremomegliodeimodulinelCapitolo7,maintantoPythonhaunmodulospeciale,denominatoturtle,chepossiamoutilizzareperimpararecomeicomputerdisegnanoimmaginisuunoschermo.Ilmoduloturtlepermettediprogrammaregraficavettoriale,chefondamentalmentesignificasolodisegnareconlinee,puntiecurvesemplici.

Vediamocomefunzionaturtle.Innanzitutto,avviatelashelldiPythonfacendoclicsull’iconasuldesktop(oppure,seusateUbuntu,selezionateIDLEnelSoftwareCenter).Poi,diteaPythondiusarelatartarugaimportandoilmoduloturtle,inquestomodo:

L’importazionediunmodulodiceaPythonchevoleteusarlo.

NOTASeusateUbuntueaquestopuntovisipresentaunmessaggiodierrore,doveteprobabilmenteinstallaretkinter.ApriteilSoftwareCenterdiUbuntuescrivetepython-tknellacaselladiricerca.Nellafinestradovrebbeapparirelascritta“Tkinter–WritingTkApplicationswithPython”.FateclicsuInstallperinstallarequestopacchetto.

CREAREUNCANVASOracheabbiamoimportatoilmoduloturtle,dobbiamocreareuncanvas(èiltermineingleseperindicareunatela,cioèunospaziosucuidisegnare,comelateladiunpittore).Percrearlo,chiamiamolafunzionePendelmoduloturtle,checreaautomaticamenteuncanvas(vedremomegliopiùavantichecosasiaunafunzione).InseritenellashelldiPythonquantosegue:

Page 53: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Dovrebbecomparireunafinestravuota(ilcanvas)conunafrecciaalcentro,simileaquesta:

Lafrecciaalcentrodelloschermoèlatartarugaesì,aveteragione,nonassomigliamoltoaunatartaruga.

SelafinestraTurtleGraphicssipresentadietroquelladellaShelldiPython,potrebbedarsichenonsembrifunzionarecorrettamente.SespostateilmousesullafinestraTurtleGraphics,ilcursoresitrasformainunaclessidra:

Questopuòsuccederepervarieragioni:nonaveteavviatolashelldall’iconasuldesktop(seusateWindowsounMac),avetefattoclicsuIDLE(PythonGUI)nelmenuStartdiWindows,oppureIDLEnonèstatoinstallatocorrettamente.Provateauscireeriavviarelashelldall’iconasuldesktop.Seancoranonfunzionatuttocorrettamente,provateausarelaconsolediPythoninvecedellashell,inquestomodo:

InWindows,selezionateStart>Tuttiiprogrammi(oTutteleapp)epoi,nelgruppoPython3.5,fateclicsuPython3.5.InMacOSX,fateclicsull’iconaSpotlightnell’angolosuperioredestrodelloschermoescriveteTerminalenellacaselladiinput.Poiscrivetepythonquandosiapreilterminale.

Page 54: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

• InUbuntu,apriteilterminaledalmenuApplicationseinseritepython.

SPOSTARELATARTARUGASiinvianoistruzioniallatartarugautilizzandolefunzionidisponibili,applicateallavariabiletappenacreata,comeabbiamousatolafunzionePennelmoduloturtle.Peresempio,l’istruzioneforwarddiceallatartarugadispostarsiinavanti.Perdireallatartarugadiavanzaredi50pixel,inseritequestocomando:

Dovrestevederequalcosadisimileaquesto:

Latartarugasièspostatainavantidi50pixel.Unpixelèunsingolopuntosulloschermo,l’elementopiùpiccolochepuòessererappresentato.Tuttoquellochevedetesulmonitordelvostrocomputerècostituitodapixel,chesonopiccolipuntiquadrati.Sepotesteingrandireilcanvaseilsegmentodisegnatodallatartaruga,potrestevederechelafrecciacherappresentailpercorsodellatartarugaèsolounaseriedipixel.Questaèsemplicegraficaalcomputer.

Page 55: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

•••

Oraditeallatartarugadiruotareasinistradi90gradiconquestocomando:

Senonaveteancorastudiatoigradi,immaginatevidiessereinpiedialcentrodiuncerchio.

Ladirezioneincuisieterivoltiè0gradi.Seestendeteilbracciosinistro,quellisono90gradi(90°)asinistra.Seestendeteilbracciodestro,quellisono90gradi(90°)adestra.

Continuandoaprocederelungoilcerchioadestra,dalpuntoindicatodalvostrobracciodestro,180gradisonodirettamenteallevostrespalle,270gradisonoladirezioneincuipuntailvostrobracciosinistroe360gradiviriportanoalpuntodipartenza:igradivannoda0a360.Eccoquisottoigradiinuncerchiocompleto,ruotandoversodestra(insensoorario),riportatiperincrementidi45gradi.

Page 56: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

QuandolatartarugadiPythonsigiraasinistra,sidisponeinmododapuntareversolanuovadirezione(comeaveteruotatoilvostrocorpopervederedovepuntavailvostrobraccioesteso,90gradiasinistra).

Ilcomandot.left(90)fasìchelafrecciapuntiversol’alto(datocheinizialmentepuntavaversodestra).

NOTAIlcomandot.left(90)equivaleat.right(270).Analogamente,t.right(90)equivaleat.left(270).Immaginateviilcerchioeseguitelasuacirconferenzaconigradi.

Oradisegneremounquadrato.Aggiungetequestocodiceallerighecheavetegiàinserito:

Page 57: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Lavostratartarugahadisegnatounquadratoeorasaràrivoltanellastessadirezionedell’inizio.

Percancellareilcanvas,scrivetereset.Questopuliscelatelaeriportalatartaruganellasuaposizioneiniziale.

Poteteusareanchelafunzioneclear,chesilimitaacancellaretuttonellafinestraelascialatartaruganellostessopuntoincuisitrova.

Sipuòfargirarelatartarugaancheadestra(right)ofarlamuoverearitroso(backward).Sipuòusareup(su)persollevarelapennadallapagina(inaltreparole,perdireallatartarugadismetteredidisegnare)edown(giù)periniziareadisegnare.Questefunzionisonoscrittenellostessomododellealtrecheabbiamogiàusato.

Proviamoafareunaltrodisegnoutilizzandoalcunidiquesticomandi.Questavolta,faremodisegnareallatartarugaduesegmenti.

Inseritequestocodice:

Page 58: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Comeprimacosaabbiamoreinizializzatolatelaeriportatolatartarugaalsuopuntodipartenzacont.reset();poiabbiamospostatolatartarugaall’indietrodi100pixelcont.backward(100),poiusatot.up()persollevarelapennaesmetteredidisegnare.

Poi,conilcomandot.right(90),abbiamofattoruotarelatartarugaadestradi90gradi,inmodochesiorientasseversoilbassosulloschermo,poicont.forward(20)l’abbiamofattaspostareinavantidi20pixel.Nonèstatodisegnatonullainquestopasso,perchéavevamodatoilcomandoupnellaterzariga.

Poiabbiamofattoruotarelatartarugaasinistradi90gradi,cont.left(90)inmodochefosseorientataversodestrasulloschermo;abbiamodatoilcomandodownperdireallatartarugadiriabbassarelapennaericominciareadisegnare.Infine,abbiamodisegnatounsegmentoinavanti,paralleloalprimosegmentodisegnato,cont.forward(100).Iduesegmentiparallelicheabbiamodisegnatosipresenterannocosì:

Page 59: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

CHECOSAAVETEIMPARATOInquestocapitolo,aveteimparatocomeusareilmoduloturtlediPython.Abbiamodisegnatoalcunisemplicisegmentidiretta,utilizzandoicomandileft(sinistra)eright(destra),forward(avanti)ebackward(indietro).Avetevistocomedireallatartarugadinondisegnare,conilcomandoup(su)ediricominciareadisegnare,conilcomandodown(giù).Aveteanchescopertochelatartarugasigirapergradi.

ROMPICAPODIPROGRAMMAZIONEProvateadisegnareconlatartarugaqualcunadelleformeseguenti.Potetetrovarelerisposteall’indirizzohttp://python-for-kids.com/.

1.UNRETTANGOLOCreateunnuovocanvasconlafunzionePendelmoduloturtleepoidisegnateunrettangolo.

2.UNTRIANGOLOCreateunaltrocanvasequestavoltadisegnateuntriangolo.Riguardateildiagrammadelcerchiosucuiavevamoriportatoigradi(apagina48)perstabilireinqualedirezionefarruotarelatartarugautilizzandoigradi.

3.UNRIQUADROSENZAANGOLI

Page 60: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Scriveteunprogrammachedisegniiquattrosegmentimostratiqui(nonsonoimportantiledimensioni,quellochecontaèlaforma):

Page 61: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

5PORREDOMANDECONIFEELSE

Nellaprogrammazione,sipongonospessodomandeacuisipuòrispondereconunsìounno,esidecidedifarequalcosaasecondadellarisposta.Peresempio,potremmochiedervi:“Avetepiùdi20anni?”e,selarispostafossesì,risponderviconun“Sietetroppovecchi!”.Questitipididomandesidefinisconocondizioniecondizionierispostesicombinanoinenunciatiif(ininglese,ifcorrispondealnostrose).Lecondizionipossonoesserepiùcomplessediunasingoladomandaeglienunciatiifsipossonocombinareconpiùdomandeedifferentidecisioniasecondadellarispostaaciascunadomanda.

Page 62: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 63: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestocapitolo,vedremocomeusareglienunciatiifnellacostruzionediprogrammi.

ENUNCIATIIFUnenunciatoifpuòesserescrittoinPythoninquestomodo:

Unenunciatoifècostituitodallaparolachiaveif,seguitadaunacondizioneedaunsegnodiduepunti(:),comeinifetà>20:.Lerighecheseguonoiduepuntidevonoessereinunbloccoe,selarispostaalladomandaèsì(overo,comesidicedisolitoquandosiprogrammainPython),icomandipresentinelbloccovengonoeseguiti.Ora,esploriamocomescrivereblocchiecondizioni.

UNBLOCCOÈUNGRUPPODIENUNCIATIDIPROGRAMMAZIONEUnbloccodicodiceèuninsiemedienunciatidiprogrammazioneraggruppati.Peresempio,seifetà>20:èvero,potrestevolerefarequalcosadipiùchestamparesemplicementelafrase“Seitroppovecchio!”.Potresteperesempiostamparequalchealtrafraseopportuna,comeinquestocaso:

Questobloccodicodiceècostituitodatreenunciatiprintchevengonoeseguitisoloselacondizioneetà>20èvera.Ciascunariganelbloccoiniziaconquattrospazi,selaconfrontateconl’enunciatoifprecedente.Riguardiamoilcodice,questavoltavisualizzandoglispazi:

Page 64: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

InPython,lospaziobianco(whitespace),peresempiounatabulazione(chesiinseriscepremendoiltastoTAB)ounospazio(inseritoquandosipremelabarraspaziatrice),èdotatodisignificato.Ilcodicechesitrovanellastessaposizione(rientratodellostessonumerodispazirispettoalmarginesinistro)èraggruppatoinunbloccoe,ognivoltachesiiniziaunanuovarigaconpiùspazidellaprecedente,siiniziaunnuovobloccochefapartedelprecedente,inquestomodo:

Siraggruppanoenunciatiinblocchiperchésonoinrelazionefraloroedevonoessereeseguitiinsieme.

Quandosicambiailrientro(ingergosichiamaancheindentazione),ingeneresicreanonuoviblocchi.L’esempioseguentemostratreblocchiseparatichevengonocreatisemplicementemodificandoilrientro.

Page 65: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Qui,ancheseiblocchi2e3hannolostessorientro,sonoconsideratiblocchidiversiperchéinmezzovièunbloccoconunrientrominore(menospazibianchiiniziali).

Unbloccoconquattrospaziinunarigaeseinellasuccessivagenereràunerrore(indentationerror),quandolosiesegue,perchéPythonsiaspettachevengausatolostessonumerodispazipertuttelerighediunblocco.Così,seiniziateunbloccoconquattrospazi,doveteusaresemprequattrospaziperquelblocco.Eccounesempio:

Horesovisibiliglispaziinmodochepossiatevedereledifferenze:notatechelaterzarigahaseispazienonquattro.

Quandosiprovaaeseguirequestocodice,IDLEevidenziaconunrettangolorossolarigaincuivedeunproblemaemostraunmessaggioSyntaxErrorconlaspiegazione(unexpectedindent,ovvero“rientroinatteso”):

Pythonnonsiaspettavadivedereduespaziinpiùall’iniziodellasecondarigaprint.

Page 66: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

NOTAL’usodispazicoerentirendepiùfacilelaletturadelcodice.Secominciateascrivereunprogrammaeinseritequattrospaziall’iniziodiunblocco,continuateausarequattrospaziall’iniziodeglialtriblocchi.Inoltre,fateattenzionearientrareognirigadiunostessobloccoconlostessonumerodispazi.

LECONDIZIONIAIUTANOAFARECONFRONTIUnacondizioneèunenunciatocheconfrontacoseecidiceseciòcheèindicatonelconfrontoèTrue(vero,sì)oppureFalse(falso,no).Peresempio,età>10èunacondizione,edèunmodoperchiedere“Ilvaloredellavariabileetàèmaggioredi10?”.Anchequestaèunacondizione:colore_capelli=='rosso',ovvero:“Ilvaloredellavariabilecolore_capellièrosso?”.

InPythonusiamodeisimboli(chiamatioperatori)percrearelecondizioni,come“maggioredi”,“ugualea”,“minoredi”.LaTabella5.1elencaalcunidiquestisimboli.

Tabella5.1Simboliperlecondizioni.

Simbolo Definizione== Ugualea!= Nonugualea(diversoda)> Maggioredi< Minoredi>= Maggioreougualea<= Minoreougualea

Peresempio,seavete10anni,lacondizionetua_età==10restituirebbeTrue;altrimentirestituirebbeFalse.Seavete12anni,lacondizionetua_età>10restituirebbeTrue.

ATTENTIStateattentiausareundoppiosegnodiuguale(==)quandodefiniteunacondizione“ugualea”.

Vediamoqualchealtroesempio.Qui,poniamolavostraetàa10anniepoiscriviamounenunciatocondizionalechestamperà“Seitroppovecchioperlemiebattute!”sel’etàèmaggioredi10.

ChecosasuccedequandoloscriviamoinIDLEepoipremiamoINVIO?

Page 67: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Niente,perchéilvaloredellavariabileetànonèmaggioredi10,quindiPythonnonesegueilbloccoprint.Seavessimoinveceimpostatolavariabileetàalvalore20,ilmessaggiosarebbestatostampato.

Oracambiamol’esempioprecedenteutilizzandounacondizione“maggioreougualea”(>=):

Questavoltavedretestampato“Seitroppovecchioperlemiebattute!”sulloschermo,perchéilvaloredellavariabileetàèugualea10.

Oraproviamoutilizzandounacondizione“ugualea”(==);

Questavoltailmessaggiocompariràsulloschermo.

ENUNCIATIIF-THEN-ELSE

Page 68: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Oltreausareenunciatiifperfarequalcosaquandovienesoddisfatta(èTrue)unacondizione,possiamousarliancheperfarequalcosaquandounacondizionenonèvera.Peresempio,potremmostamparesulloschermounmessaggiosel’etàè12(True)eunaltrosenonè12(False).Iltruccostanell’usareunenunciatoif-then-else(se-allora-altrimenti),chesostanzialmentedice:“Se(if)unacertacosaèvera,allora(then)faquesto;altrimenti(else)faiquest’altro”.

Creiamounenunciatoif-then-else.Scrivetequantoseguenellashell:

Datocheabbiamoimpostatolavariabileetàalvalore12elacondizionechiedesel’etàsiaugualea12,dovrestevederesulloschermoilmessaggiodelprimoprint.Oraprovateacambiareilvaloredell’etàinunnumerodiversoda12,peresempio:

Questavoltavedretestampatoilsecondomessaggio.

ENUNCIATIIFEDELIFPossiamoestendereulteriormenteunenunciatoifconelif(cheèunaabbreviazionedielse-if,“altrimenti-se”).Peresempio,possiamocontrollaresel’etàdiunapersonaè10,11o12anni(ecosìvia)efareinmodocheilprogrammafacciaqualcosadidiversoasecondadellarisposta.Questienunciatisonodiversidagliif-then-else,perchépossonoessercipiùelifnellostessoenunciato:

Page 69: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestoesempio,l’enunciatoifnellasecondarigacontrollaseilvaloredellavariabileetàèugualea10in 1 .L’enunciatoprintcheseguein 2 vieneeseguitoseetàèugualea10.Però,poichéabbiamoattribuitoaetàilvalore12,ilcomputersaltaalsuccessivoenunciatoifin 3 econtrollaseilvaloredietàèugualea11.Nonloè,perciòsaltaalsuccessivoenunciatoifin 4 evedeseetàèugualea12.Loè,perciòquestavoltaesegueilcomandoprintin 5 .

QuandoinseritequestocodiceinIDLE,vieneautomaticamenterientrato,perciòricordatedipremereiltastoCANCoilBACKSPACEdopoaverscrittoglienunciatiprint,inmodochegliif,elifedelseinizinodalmarginesinistro.Questaèlastessaposizioneincuisarebbel’enunciatoifsenoncifosseilprompt(>>>).

COMBINARELECONDIZIONILecondizionisipossonocombinareutilizzandoleparolechiaveandeor(che

Page 70: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

corrispondonorispettivamenteallacongiunzione“e”ealladisgiunzione“o”):cosìilcodicepuòesserepiùbreveepiùsemplice.Eccounesempioconor:

Inquestocodice,seunaqualsiasidellecondizioninellaprimarigaèvera(inaltreparole,selavariabileetàhavalore10,11,12o13),vieneeseguitoilbloccodicodicecheiniziaconprintnellarigasuccessiva.Senessunadellecondizioninellaprimarigaèvera(else),Pythonpassaalbloccodell’ultimariga,evisualizzasulloschermoCosa?.

Percompattaredipiù,potremmousareandeglioperatori“maggioreougualea”(>=)e“minoreougualea”(<=):

Qui,seetàèmaggioreougualea10e(and)minoreougualea13(condizionedefinitanellaprimarigaconl’enunciatoifetà>=10andetà<=13:),vieneeseguitoilbloccodicodicecheiniziaconprintsullarigasuccessiva.Peresempio,seilvaloredietàè12,verràstampatosulloschermoCosafa13+49+84+155+97?Unmalditesta!,perché12èmaggioredi10eminoredi13.

VARIABILISENZAVALORE:NONEAunavariabile,comeabbiamovisto,sipossonoassegnarevalori,stringheeliste,masipuòancheassegnareunvalorevuoto,nullo.InPythonunvalorevuotoèindicatocomeNone(“niente”),eindical’assenzadivalore.ÈimportantenotarecheilvaloreNoneèdiversodalvalore0perchéindical’assenzadiunvalore,nonunnumeroconvalore0.L’unicovalorecheunavariabilehaquandolesiassegnailvalorevuotoNoneè…niente.Eccounesempio:

Page 71: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

AssegnareunvaloreNoneaunavariabileèunmodoperdirechequellavariabilenoncontienepiùalcunvalore(omeglio,chenonèpiùl’etichettadiunvalore).ImpostareunavariabileaNoneèancheunmodoperdefinireunavariabilesenzaindicarneilvalore.Losipuòfarequandosisachesiavràbisognodiunavariabileinseguitonelcorsodelprogramma,masivuoledefinireinizialmentetuttelevariabili.Iprogrammatoridefinisconospessolelorovariabiliall’iniziodiunprogrammaperché,collocateinquellaposizione,èfacilevedereinomidituttelevariabiliutilizzateinuncertoframmentodicodice.

Sipuòanchecontrollareseunavariabilenonhavaloreinunenunciatoif,comeinquestoesempio:

Un’istruzionedelgenereèutilequandosivuolecalcolareunvaloreperunavariabilesolosenonèstatogiàcalcolato.

LADIFFERENZAFRASTRINGHEENUMERIInputdell’utenteèquellocheunapersonascriveallatastiera–nonimportasesitrattadiuncarattere,dellapressionediuntastofrecciaodiINVIOodiqualsiasialtracosa.

L’inputdell’utentevienerecepitodaPythoncomeunastringa,ilchesignificache,sescrivetesullatastierailnumero10,Pythonsalvail10inunavariabilecomestringaenoncomenumero.

Qualèladifferenzafrailnumero10elastringa'10'?Anoisembranolastessacosa,conl’unicadifferenzachelasecondaèracchiusafraapici.Peruncomputer,però,sitrattadiduecosemoltodiverse.

Peresempio,supponiamodiconfrontareilvaloredellavariabileetàconunnumeroinunenunciatoif:

Poiimpostiamolavariabileetàalnumero10:

Page 72: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Comepotetevedere,l’enunciatoprintvieneeseguito.Oraimpostiamolavariabileetàallastringa'10'(congliapici),inquestomodo:

Orailcodicenell’enunciatoprintnonvieneeseguito,perchéPythonnonvedeilnumerofraapici(unastringa)comeunnumero.Perfortuna,Pythonpossiedealcunefunzionimagichechetrasformanostringheinnumerienumeriinstringhe.Peresempio,sipuòconvertirelastringa'10'inunnumeroconlafunzioneint:

Lavariabileetà_convertitaoracontieneilnumero10.Perconvertireunnumeroinunastringasiusainvecelafunzionestr:

Inquestocaso,età_convertitaconterràlastringa'10'anzichéilnumero10.Ricordatechel’enunciatoifetà==10nonhastampatonullaquandolavariabile

avevacomevaloreunastringa(età='10')?Seperòprimaconvertiamolavariabile,otteniamounrisultatodeltuttodiverso:

Page 73: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Mafateattenzione:setentatediconvertireunnumerodecimale,otterreteunerrore,perchélafunzioneintsiaspettaunintero:

ValueErrorèilmodocheusaPythonperdirvicheilvalorecheavetetentatodiutilizzarenonèappropriato.Incasidelgeneredoveteusarelafunzionefloatalpostodiint.Lafunzionefloatpuòtrattarenumerichenonsonointeri.

OtterreteunValueErroranchesetentatediconvertireincifreunastringachenoncontieneunnumero:

CHECOSAAVETEIMPARATOInquestocapitolo,aveteimparatocomelavorareconglienunciatiifpercreareblocchidicodicechevengonoeseguitisoloquandodeterminatecondizionisonovere.Avetevistocomeestendereglienunciatiifconelifinmododaeseguiresezionidiversedicodiceasecondadelrisultatodicondizionidiverse,ecomeusarelaparolachiaveelsepereseguiredelcodicequandonessunadellecondizionirisultavera.Aveteimparatoancheacombinarecondizioniutilizzandoleparolechiaveandeor,inmododavedereperesempioseunnumeroricadeentrouncertointervallo,ecometrasformarestringheinnumeri(eviceversa)conint,strefloat.Eavetescopertocheilnulla(None)haunsignificatoinPythonepuòessereutilizzatoperriportarelevariabiliallorostatoiniziale,vuoto.

Page 74: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

ROMPICAPODIPROGRAMMAZIONEProvatearisolverequestirompicapoutilizzandol’enunciatoifelecondizioni.Potetetrovarelerisposteall’indirizzohttp://python-for-kids.com/.

1.SEIRICCO?Checosapensatechefaccia,ilcodiceseguente?Provateadareunarispostasenzascriverlonellashell,poicontrollatelavostrarisposta.

2.TWINKIES!CreateunenunciatoifcheverifichiseilnumerodiTwinkies(nellavariabiletwinkies)èminoredi100omaggioredi500.Ilprogrammadovràstampareilmessaggio“Troppopochiotroppotanti”selacondizioneèvera.(ChecosasonoiTwinkies?Dateglivoiunsignificato…)

3.ILNUMEROGIUSTOCreateunenunciatoifcheverifichiselaquantitàcontenutanellavariabiledenarosiacompresafra100e500ofra1000e5000.

4.POSSOCOMBATTERECONTROININJACreateunenunciatoifchestampilastringa“Sonotroppi”selavariabileninjacontieneunnumerominoredi50,stampi“Saràunabellalotta,mapossofarcela”,seilvaloreèinferiorea30estampi“Possocombatterecontroqueininja!”seèinferiorea10.Poteteprovareilvostrocodicecon:

Page 75: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

6GIRAREINTONDO

Nonc’ènientedipeggiochedoverfarelastessacosapiùepiùvolte.C’èunmotivopercuiqualcunosimetteacontarelepecorequandohadifficoltàadaddormentarsienonhanullaachefareconsuppostedoti“dormitive”diquestiovini:èperchéripeteresenzafinequalchecosaènoioso,elanostramentepuòcaderenelsonnopiùfacilmentesenoncisiconcentrasuqualcosadiinteressante.

Page 76: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 77: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Neancheiprogrammatoriamanoparticolarmenteripetersi,amenochenonstianocercandodiaddormentarsi.Perfortuna,lamaggiorpartedeilinguaggidiprogrammazionemetteadisposizionequellocheèchiamatociclofor(forèl’equivalentedell’italiano“per”),cheripetealtrienunciatieblocchidicodiceautomaticamente.

Inquestocapitolo,vedremoicicliforeunaltrotipodiciclochecimetteadisposizionePython:ilciclowhile(parolachecorrispondeall’italiano“mentre”).

USAREICICLIFORPerstamparecinquevolte“ciao”inPython,sipotrebbescrivere:

Sarebbeunpo’noioso.Sipuòusareuncicloforperscriveredimenoeridurreleripetizioni,inquestomodo:

Page 78: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

••

Lafunzionerange(intervallo)in 1 siusapercreareunelencodinumerichevannodaquelloinizialefinoaquellocheprecedeilnumerofinale.Puòsembrareunpo’confuso.Combiniamolafunzionerangeconlafunzionelistpervedereesattamentecomefunziona.Lafunzionerangenoncreainrealtàunalistadinumeri,marestituisceuniteratore,cheèuntipodioggettoPythonprogettatospecificamenteperlavorareconicicli.Seperòcombiniamorangeconlist,otteniamounalistadinumeri.

Nelcasodelciclofor,ilcodicenellariga 1 diceinsostanzaaPythondifarequantosegue:

Iniziaacontareda0efermatiprimadiraggiungere5.Perogninumerocheconti,immagazzinailvalorenellavariabilex.

PoiPythonesegueilbloccodicodicein 2 .Notatechecisonoquattrospaziaggiuntiviall’iniziodellariga 2 (rispettoallariga1 ).IDLEhaautomaticamenterientratoquestoblocco.QuandopremiamoINVIOdopolasecondariga,Pythonstampa“ciao”cinque

volte.Potremmoancheusarelaxnell’enunciatoprintpercontarei“ciao”:

Senonavessimousatoilciclofor,ilnostrocodiceavrebbedovutoesserequalcosadiquestogenere:

Page 79: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

L’usodelcicloperciòcihaevitatodiscrivereottorigheulterioridicodice.Ibuoniprogrammatoriodianofarelecosepiùdiunavolta,perciòilcicloforèunodeglienunciatipiùutilizzatiinunlinguaggiodiprogrammazione.

Nonènecessariousaresololefunzionirangeelistpercreareciclifor.Poteteusareancheunalistagiàcreata,comelalistadellaspesadelCapitolo3,inquestomodo:

Questocodicesignifica“Perognielementopresentenellamago_lista,memorizzaquelvalorenellavariabilei,poistampaicontenutidiquellavariabile”.Ancheinquestocaso,sevolessimofareamenodelciclofor,dovremmofarequalcosadiquestogenere:

Page 80: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ancoraunavolta,quindi,ilciclociharisparmiatounbelpo’dilavoro.Proviamoacreareunaltrociclo.Scriveteilcodiceseguentenellashell(il

rientrosaràautomatico):

Nellaprimariga 1 ,abbiamocreatounalistacontenenteleparole'grandi','pantaloni'e'pelosi'.Nellarigasuccessiva, 2 ,abbiamoimpostatounciclochepercorreglielementidellalista,assegnandociascunelementoallavariabilei.Poiabbiamostampatoduevolteicontenutidellavariabile,nelleduerighesuccessive( 3e 4 ).PremendoINVIOsullasuccessivarigavuota 5 ,abbiamodettoaPythoncheilbloccoeracompleto;ilcodiceèstatoeseguitoeciascunelementodellalistaèstatostampatoduevoltein 6 .

Page 81: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ricordateche,seinseriteunnumeroerratodispaziainizioriga,viritrovereteconunmessaggiodierrore.Seavesteinseritoilcodiceprecedenteconunospazioinpiùsullaquartariga 4 ,Pythonavrebbevisualizzatounerroredirientro(unexpectedindent):

ComeabbiamovistonelCapitolo5,Pythonsiaspettacheilnumerodeglispaziinunbloccosiasemprelostesso.Nonimportaquantispaziinserite,purchésianosemprenellostessonumeroinogniriga(ilcherendeanchepiùfacileleggereilcodice,pergliesseriumani).

Eccounesempiopiùcomplicatodiuncicloforcondueblocchidicodice:

Dovesonoiblocchiinquestocodice?Ilprimobloccoèilprimociclofor:

Ilsecondobloccoècostituitodallasingolarigaprintnelsecondociclofor:

Riusciteaimmaginarechecosacombineràquestopiccoloframmentodicodice?Dopocheèstatacreataunalistaconilnomegrandipantalonipelosiin 1 ,dalledue

righesuccessivepossiamocapirechePythonpercorreràincicloglielementidellalistaestamperàciascunodiessi.In 2 ,però,deveeffettuareunaltrocicloattraversolalista,questavoltaassegnandoilvaloreallavariabilej,poistamperàdinuovociascunelemento,comeprevistodallariga 3 .Ilcodicein 2 e 3 èsemprepartedelprimociclofor,ilchesignificacheverràeseguitoperciascunelementodellalista,

Page 82: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

nelprocederedelprimocicloforbasatosullavariabilei.Quandoilcodicevieneeseguito,quindi,dovremmovederegrandiseguitoda

grandi,pantaloni,pelosiepoipantaloniseguitodagrandi,pantaloni,pelosiecosìvia.InseriteilcodicenellashelldiPythonevedeteloconivostriocchi:

Pythonentranelprimocicloestampaunelementodellalistain 1 .Poientranelsecondocicloestampatuttiglielementidellalistain 2 .Poicontinuaconilcomandoprint(i),stampandol’elementosuccessivodellalista,quindistampadinuovotuttalalistaconprint(j).Nell’output,lerigheevidenziateconilsimbolovengonostampatedall’enunciatoprint(i),lealtredaprint(j).

Cheneditediqualcosadipiùutilechestampareparolestupide?RicordateilcalcolocheabbiamofattonelCapitolo2persaperequantemoneted’oroavresteavutoallafinedell’annograzieallafolleinvenzionedelnonnocheduplicamonete?Eraquesto:

Ovvero:20monetetrovate,più10monetemagichealgiornoper365giorniinunanno,meno3moneteallasettimanarubatedalcorvo.

Potrebbeessereutilevederecomeilvostromucchiettodimoneted’oroaumentiognisettimana.Possiamofarloconunaltrociclofor,maprimadobbiamocambiareilvaloredellenostremonete_magiche,inmodocherappresentiilnumerototaledimonetemagichepersettimana,cioè10monetemagichealgiornoper7giorniallasettimana.Quindimonete_magichedeveessere70:

Page 83: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Possiamovederecrescereilnostrotesoroognisettimanacreandoun’altravariabile,chepossiamochiamaremonete,eusandounciclo:

In 1 ,allavariabilemonetevieneassegnatoilvaloredellavariabilemonete_trovate:questoèilnumerodipartenza.Larigasuccessiva, 2 ,impostailciclofor,cheeseguiràicomandinelblocco(costituitodallerighe 3 e 4 ).Ognivoltachevieneeseguitoilciclo,lavariabileassumecomevaloreilnumerosuccessivonell’intervallofra1e52.

Larigain 3 èunpo’piùcomplicata.Fondamentalmente,ognisettimanavogliamoaggiungereilnumerodellemonetecheabbiamocreatomagicamenteesottrarreilnumerodellemoneterubatedalcorvo.Potetepensarelavariabilemonetecomeilvostroforziere.Ognisettimana,lenuovemonetevannoafinirenelforziere.Quindiquestarigasignifica“Sostituisciicontenutidellavariabilemoneteconilnumerodellemonetecheavevo,piùquellechehocreatoquestasettimana”.Fondamentalmente,ilsegno(=)èunasortadicomando,chedice“Faituttoquellochetivienechiestoadestra,poisalvaloperilseguito,usandoilnomequiasinistra”.

Lariga 4 èunenunciatoprintcheusadeisegnapostoestampailnumerodellasettimanaeilnumerototaledellemoneteaccumulatefinoaquelmomento.(Setuttoquestononhamoltosensopervoi,rileggete“Incorporarevalorinellestringhe”apagina30.)Seeseguiteilprogramma,vedretequestorisultato:

Page 84: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

APROPOSITODICICLI…Unciclofornonèl’unicotipodiciclochesipuòcreareinPython.Esisteancheilciclowhile.Uncicloforèunciclodilunghezzaspecifica,mentrewhileèunciclousatoquandononsisainanticipoachepuntolaripetizionedeveterminare.

Immaginateviunascalacon20gradini:èdentrocasaesapetedipotersalirefacilmente.Uncicloforèdiquestotipo.

Oraimmaginateunascalachesalelungounamontagna.Lamontagnaèalta,epotresteesaurireleforzeprimadiraggiungerelacima,oiltempopotrebbemettersialbrutto,costringendoviafermarvi.Questaèl’ideadelciclowhile.

Page 85: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.2.3.

Seprovateainserireeaeseguirequestocodice,otterreteunmessaggiodierrore.Perché?Perchénonabbiamocreatolevariabilistancoecattivotempo.Anchesequinonc’èabbastanzacodiceperfarneunprogrammafunzionante,questoèunesempioelementarediunciclowhile.

Iniziamocreandounavariabilechiamatagradinocongradino=0.Poi,creiamounciclowhilechecontrollaseilvaloredellavariabilegradinoèinferiorea10.000(gradino<10000),cheèilnumerototaledeigradinidallabasedellamontagnafinoallacima.Finchégradinoèminoredi10.000,Pythoncontinueràaeseguireilrestodelcodice.

Conprint(gradino),stampiamoilvaloredellavariabileepoicontrolliamosestancoèTrueconifstanco==True.(Trueèun“valorebooleano”,espressionechechiariremonelCapitolo8.)Seloè,usiamolaparolachiavebreak(equivalea“interrompi”)perusciredalciclo.Laparolachiavebreakèunmodoperusciredaunciclo(inaltreparole,interromperlo),efunzionasiapericicliwhilecheperquellifor.Quihal’effettodifarciusciredalbloccoedipassareaglienunciatichepotrebberocompariredopolarigagradino=gradino+1.

Larigaelifcattivotempo==True:controllaselavariabilecattivotempoabbiailvaloreTrue.Secosìè,breakfausciredalciclo.SenéstanconécattivotemposonoTrue(casoelse),sommiamo1alvaloredellavariabilegradino,conl’enunciatogradino=gradino+1,eilciclocontinua.

Quindiipassidiunciclowhilesonoiseguenti:

Controllalacondizione.Eseguiilcodicenelblocco.Ripeti.

Page 86: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Piùspesso,unciclowhilevienecreatoconunacoppiadicondizioni,invececheconunasola,comeinquestoesempio:

Quiabbiamocreatounavariabilexconilvalore45in 1 eunavariabileyconvalore80in 2 .Ilciclocontrollaleduecondizioniin 3 :secioèxèminoredi50eseyèminoredi100.

Finchéentrambelecondizionisonovere,vengonoeseguitelerigheseguenti,incuisisomma1aentrambelevariabiliepoilesistampa.Eccol’outputprodottodaquestocodice:

Riusciteastabilirecomefunziona?Iniziamoacontareda45perlavariabilexeda80perlavariabiley,poi

incrementiamo(sommiamo1)ciascunavariabileognivoltachevieneeseguitoilcodicenelciclo.Ilcicloandràavantifinchéxèminoredi50eyèminoredi100.Dopocinquepassagginelciclo(ognivoltaaciascunavariabilevienesommato1),ilvaloreinxraggiunge50.Oralaprimacondizione(x<50)nonèpiùvera,perciòPythonsadidoverporreterminealciclo.

Unaltrousocomunediunciclowhileèlacreazionedicicli“quasieterni”.Sonociclichepotrebberocontinuareall’infinito,mainrealtàcontinuanofinchénonsuccedequalcosanelcodicecheliinterrompe.Eccounesempio:

LacondizionedelciclowhileèsemplicementeTrue,cheèsemprevera,perciòilcodicenelbloccocontinueràaessereeseguito(inquestosenso,ilcicloèeterno).Pythonescedalciclosoloselavariabilequalche_valoreèvera.Potetevedereunesempiomigliorediquestoin“Usarerandintperscegliereunnumeroacaso”apagina134,maforseèmegliocheaspettiatediaverlettoilCapitolo7.

Page 87: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

CHECOSAAVETEIMPARATOInquestocapitolo,abbiamousatoiciclipereseguireattivitàripetitivesenzadoverciripetere.AbbiamodettoaPythonchecosavolevamofosseripetutoscrivendolerelativeattivitàall’internodiblocchidicodice,cheabbiamoinseritoall’internodicicli.Abbiamousatoduetipidicicli:forewhile,chesonosimilimasipossonousareinmodidiversi.Abbiamousatoanchelaparolachiavebreakperinterrompereicicli,cioèperusciredaunciclo.

ROMPICAPODIPROGRAMMAZIONEEccoqualcheesempiodiciclochepoteteprovareacostruirevoistessi.Lerispostesipossonotrovareall’indirizzohttp://python-for-kids.com/.

1.ILCICLO“CIAO”Checosapensatechefacciailcodiceseguente?Primaprovateadarrivarciragionando,poiscriveteilcodiceinPythonedeseguitelo,pervedereseavevateragione.

2.NUMERIPARICreateunciclochestampiinumeriparifinchénonraggiungeilnumerocorrispondenteallavostraetàoppure,selavostraetàèunnumerodispari,chestampiinumeridisparifinchénonraggiungelavostraetà.Peresempio,potrebbestampareunacosacomequesta:

3.ICINQUEINGREDIENTIPREFERITICreateunalistachecontengacinquediversiingredientiperunbuonpanino,peresempio:

Page 88: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Oracreateunciclochestampilalista(compresiinumeri):

4.ILPESOSULLALUNASeinquestomomentovitrovastesullaLuna,ilvostropesosarebbeparial16,5percentodiquellocheèsullaTerra.Potetecalcolarlomoltiplicandoilvostropesoterrestreper0,165.

Seilvostropesoaumentassediunchilogrammoogniannoneiprossimi15anni,qualesarebbeilvostropesosevisitastelaLunaogniannoeallafinedei15anni?Scriveteunprogrammacheusiuncicloforestampiilvostropesolunareperciascunanno.

Page 89: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

7RICICLAREILCODICECONFUNZIONI

EMODULI

Pensatequantecosebuttateviaognigiorno:bottigliedell’acqua,lattine,confezionidipatatine,incartidipanini,sacchettichecontenevanofilettidicarotaofettedimela,borsedellaspesa,giornali,rivisteecosìvia.Oraimmaginatechecosasuccederebbesetuttaquellaspazzaturavenisseammonticchiatadavantiall’ingressodicasavostra,senzasepararecarta,plastica,lattineevetro.

Page 90: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 91: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ovviamente,probabilmentericiclateilpiùpossibile,cheèunabuonacosa,perchénessunovorrebbescalareunamontagnadispazzaturasullastradaperandareascuola.Anzichéstarseneinun’enormepilaallarinfusa,lebottigliedivetrochericiclatevengonofuseetrasformateinnuovicontenitorienuovebottiglie;lacartavienemacerataetrasformataincartariciclata;laplasticavienetrasformatainaltrioggettidiplastica.Cosìriusiamocosechealtrimentibutteremmosemplicementevia.

Nelmondodellaprogrammazione,ilriusoèaltrettantoimportante.Ovviamente,ilvostroprogrammanonscompariràsottounamontagnadirifiuti,masenonriusatequalcosadiquellochefate,allafineleditavisiridurrannoamoncherinidolorantiafuriadiscriverecodice.Latecnicadelriusoinoltrerendeilcodicepiùbreveepiùfaciledaleggere.

USARELEFUNZIONIAbbiamogiàvistounodeimodiperriciclarecodiceinPython.Nelcapitoloprecedente,abbiamousatolefunzionirangeelistperfar“contare”Python.

Sesapetecontare,nonèdifficilecreareunalistadinumericonsecutiviscrivendolidirettamente,ma,piùlungaèlalista,piùdovretescrivere.Invece,seusatelefunzioni,potetecreareconlamassimafacilitàancheunalistadimigliaiadinumeri.Eccounesempiocheusalefunzionilisterangeperprodurreunalistadinumeri:

Page 92: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

LefunzionisonopezzidicodicechediconoaPythondifarequalcosa.Sonounmodoperriusareilcodice:poteteusarelefunzionimoltevolteall’internodeivostriprogrammi.

Quandoscriveteprogrammisemplici,lefunzionisonocomode;quandocomincereteascrivereprogrammilunghiepiùcomplessi,comeigiochi,lefunzionidiventanoessenziali(immaginandochevogliatefinirediscrivereilvostroprogrammaentroquestosecolo).

PARTIDIUNAFUNZIONEUnafunzionehatreparti:unnome,parametrieuncorpo.Eccounesempiodiunafunzionesemplice:

Ilnomediquestafunzioneèfunzprova.Haununicoparametro,mionome,eilsuocorpoèilbloccodicodicechesegueimmediatamentelarigacheiniziacondef(abbreviazionedidefine,definisci).

Unparametroèunavariabilecheesistesoloquandovieneusataunafunzione.Poteteeseguirelafunzionechiamandoneilnome,racchiudendopoifraparentesi

ilvaloredelparametro:

Unafunzionepuòaveredue,treounnumeroqualsiasidiparametri,nonunosolamente:

Iduevaloriperquestiparametridevonoessereseparatidaunavirgola:

Potremmoanchecreareprimadellevariabiliechiamarepoilafunzioneconquellevariabili:

Page 93: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Siusaspessounafunzioneperaverediritornounvalore,attraversounenunciatoreturn.Peresempio,potrestescrivereunafunzionechecalcoliquantisoldiaveterisparmiato:

Questafunzioneprendetreparametri:sommaiprimidue(paghettaemancia)esottrael’ultimo(spese).Ilrisultatovienerestituitoepuòessereassegnatoaunavariabile(analogamenteacomeabbiamoassegnatovaloriallevariabiliinaltricasi)oppurestampato:

VARIABILIEAMBITOUnavariabilechesitrovaall’internodelcorpodiunafunzionenonpuòessereusatanuovamente,unavoltaterminatal’esecuzionedellafunzione,perchéesistesoloalsuointerno.Nelmondodellaprogrammazione,sidicechequelloèilsuoambito(scope,ininglese).

Vediamounafunzionecheusaunpaiodivariabilimanonhaalcunparametro:

Inquestoesempio,in 1 abbiamocreatounafunzionechesichiamatest_variabile,chemoltiplicaduevariabili(prima_vareseconda_var)erestituisceilrisultatoin 2 .

Sechiamiamoquestafunzioneutilizzandoprint,otteniamoilrisultato:200.Seperòtentiamodistampareicontenutidiprima_var(odiseconda_var,pocoimporta)all’esternodelbloccodicodicedellafunzione,otteniamounmessaggiodierrore:

Seunavariabileèdefinitaall’esternodellafunzione,haunambitodiverso.Peresempio,definiamounavariabileprimadicrearelafunzione,poicerchiamodiusarladentrolafunzione:

Page 94: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestocaso,ancheselevariabiliprima_vareseconda_varnonpossonoessereusateall’esternodellafunzione,altra_var(cheèstatacreataesternamenteallafunzionein1 )puòessereutilizzataalsuointerno,in 2 .Eccoilrisultatochesiottienechiamandoquestafunzione:

Ora,supponiamochevogliatecostruireunanavicellaspazialeconqualchematerialeeconomico,peresempiolattineusate.Pensatedipoterappiattire2lattineasettimanapercrearelepareticurvedellanavicella,maperfinirelafusolieraviserviranno500lattine.Possiamoscriverefacilmenteunafunzionechecipermettadicalcolarequantocivorràperlavorare500lattine,sepossiamolavorare2lattineasettimana.

Creiamounafunzionechemostriquantelattineabbiamoappiattitoinunanno(52settimane).Lanostrafunzioneprenderàcomeparametroilnumerodellelattine:

Nellaprimarigadellafunzione,abbiamocreatounavariabile,totale_lattine,eabbiamoimpostatoilsuovalorea0.Poiabbiamocreatouncicloperlesettimanedell’annoesommatoognisettimanailnumerodellelattinelavorate.Questobloccodicodicecostituisceilcontenutodellanostrafunzione.Inquestafunzioneperòc’èancheunaltrobloccodicodice:leultimeduerighe,chesonoilbloccodelciclofor.

Page 95: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Proviamoainserirequestafunzionenellashelleachiamarlaconvaloridiversiperilnumerodellelattine:

Questafunzionepuòessereriutilizzataconvaloridiversiperilnumerodellelattinelavorateognisettimana,ilcheèunpo’piùefficientechedoverriscrivereilcicloforognivoltachesivuoleprovarelafunzioneconunnumerodiverso.

Lefunzionipossonoancheessereraggruppateinmoduli:edèquichePythondiventadavveromoltoutile.

USAREIMODULIImoduliraggruppanofunzioni,variabiliealtroancora,utilizzabiliperscrivereprogrammipiùgrandiepiùpotenti.AlcunimodulisonogiàincorporatiinPython;altrisipossonoscaricareseparatamente.Vedretebenel’utilitàdeimoduli(cometkinter,incorporato,ePyGame,cheinvecenonloè)quandoscriveretedeigiochi,operlamanipolazionedelleimmagini(peresempioPIL,PythonImagingLibrary)opercrearegraficatridimensionale(peresempioPanda3D).

Page 96: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Sipossonousaremodulipermoltissimecoseutili.Peresempio,seprogettaateungiocodisimulazione,edesideratecheilmondodelgiococambirealisticamente,potrestecalcolareladatael’oracorrentiutilizzandounmoduloincorporatochesichiamatime:

InquestocasosiusailcomandoimportperdireaPythonchesivuoleusareilmodulotime.Poi,sipossonochiamarelefunzionipresentiinquestomodulo,utilizzandoilsimbolodelpunto.(RicordatecheabbiamousatofunzionidiquestogenereperlavorareconilmoduloturtlenelCapitolo4,peresempiot.forward(50).)Peresempio,eccocomepotremmochiamarelafunzioneasctimeconilmodulotime:

Lafunzioneasctimefapartedelmodulotimeerestituisceladatael’oracorrenti,sottoformadistringa(ininglese:TuestaperTuesday,martedì,Mayèmaggio,inquestoesempio).

Orasupponiamochevogliatechiedereaqualcunocheusailvostroprogrammadiinserireunvalore,magariladatadinascitaol’età.Potetefarloutilizzandounenunciatoprintpervisualizzareunmessaggio,eilmodulosys(abbreviazionedisystem,sistema),checontienefunzionidiservizioperinteragireconilsistemaPythonstesso.Primaditutto,importiamoilmodulosys:

Page 97: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

All’internodelmodulosyssitrovaunoggettospecialechiamatostdin(staperstandardinput),chemetteadisposizioneunafunzionemoltoutile,readline.Questafunzionevieneutilizzataperleggere(read)unarigaditestoscrittaallatastierafinoallapressionedeltastoINVIO.(VedremocomefunzionanoglioggettinelCapitolo8.)Perprovarereadline,inseritequestocodicenellashell:

SepoiscrivetequalcheparolaepremeteINVIO,quelleparoleverrannostampatenellashell.

RipensatealcodicecheabbiamoscrittonelCapitolo5,utilizzandounenunciatoif.

Anzichécrearelavariabileetàeattribuirleunvalorespecificoprimadell’enunciatoif,orapossiamochiedereaqualcunodiinserirequelvalore.Prima,però,trasformiamoquelcodiceinunafunzione:

Orapotetechiamarelafunzionescrivendoilsuonomeepoidicendolechenumerousareinserendoquelnumerofraparentesi.Funziona?

Funziona!Orafacciamoinmodochelafunzionechiedal’etàdellapersona.(Potetemodificareoaggiungerequalcosaaunafunzionetuttelevoltechevolete.)

Page 98: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Avetericonosciutolafunzioneintnellariga 1 ,checonverteunastringainunnumero?L’abbiamousataperchéreadline()restituiscetuttoquellochevienescrittoallatastierasottoformadistringa,mentrenoivogliamounnumero,perpoterloconfrontareconinumeri10e13nellariga 2 .Perprovare,chiamatelafunzionesenzaparametri,poiscriveteunnumeroquandoapparelarichiestaQuantiannihai?:

CHECOSAAVETEIMPARATOInquestocapitolo,avetevistocomecrearepezzidicodiceriusabileinPythonconlefunzioniecomeusarelefunzionimesseadisposizionedaimoduli.Aveteimparatochel’ambitodellevariabilicontrollasepossonoesserevisteall’internooall’esternodellefunzioni,ecomecrearefunzioniconlaparolachiavedef.Aveteanchescopertocomeimportaremoduli,perpoterneutilizzareicontenuti.

ROMPICAPODIPROGRAMMAZIONEProvategliesempiseguenti,persperimentarecomesicreanofunzioni.Lerispostesipossonotrovareall’indirizzohttp://python-for-kids.com.

1.FUNZIONEPERILPESOSULLALUNANelCapitolo6,unodeirompicapoeracomecreareuncicloforperdeterminareilvostropesosullaLunanell’arcodi15anni.Quelcicloforpuòesseretrasformatofacilmenteinunafunzione.Provateacreareunafunzionecheprendaunpesoinizialeeloaumentiognianno.Potetechiamarelanuovafunzioneperesempioinquestomodo:

Page 99: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

2.FUNZIONEPERILPESOSULLALUNAEGLIANNIPrendetelafunzioneappenacreataemodificatainmodochepermettadistabilireilpesoperperiodidiversi,peresempio5o20anni.Fateattenzioneamodificarelafunzioneinmodocheprendatreargomenti:ilpesoiniziale,ilpesodicuisiaumentaogniannoeilnumerodeglianni:

3.PROGRAMMAPERILPESOSULLALUNAAnzichéunasemplicefunzione,acuipassareivaloricomeparametri,potetecreareunpiccoloprogrammacherichiedaivaloriall’utentemediantesys.stdin.readline().Inquestocaso,chiameretelafunzionesenzaalcunparametro:

Lafunzionepresenteràunmessaggioincuivichiedeilpesodipartenza,unsecondomessaggiochevichiedediquantoaumentailpesoognianno,infineunmessaggiochevichiedeilnumerodeglianni.Dovrestepotervederequalcosadiquestotipo:

Page 100: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ricordatediimportareilmodulosysprimadicrearelavostrafunzione:

Page 101: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

8COMESIUSANOCLASSIEOGGETTI

Perchéunagiraffaècomeunmarciapiedi?Perchéentrambisonocose,quellicheinitalianosidefiniscononomieinPythonoggetti.L’ideadioggettoèimportantenelmondoinformatico.Glioggettisonounmodoperorganizzareilcodiceinunprogrammaesuddividerelecose,inmododasemplificareilragionamentosuideecomplesse.(AbbiamogiàusatounoggettonelCapitolo4,quandoabbiamolavoratoconlatartaruga:eraPen.)

Page 102: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 103: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

PercapireesattamentecomefunzionanoglioggettiinPython,dobbiamopensareaitipidioggetti.Cominciamoconlegiraffeeimarciapiedi.

Unagiraffaèuntipodimammifero,cheèuntipodianimale.Unagiraffaèancheunacosaanimata(èviva).

Oraprendiamounmarciapiede.Nonc’èmoltodadire,senonchenonèunacosavivente.Chiamiamolounacosainanimata(cioènonèvivo).Iterminimammifero,animale,animataeinanimatasonotuttiterminiperclassificarelecose.

SUDDIVIDERELECOSEINCLASSIInPython,glioggettisonodefinitidaclassi,chepossiamopensarecomeunmodoperclassificareglioggettiingruppi.Eccoundiagrammaadalberodelleclassiacuiapparterrebberogiraffeemarciapiedi,inbaseallenostredefinizioniprecedenti:

Page 104: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

LaclasseprincipaleèCose.SottolaclasseCoseabbiamoInanimateeAnimate.QuestesonoalorovoltaarticolateinMarciapiediperInanimate,Animali,MammiferieGiraffeperAnimate.

PossiamousareleclassiperorganizzarepezzidicodicediPython.Peresempio,prendiamoilmoduloturtle.Tuttelecosechepuòfarequestomodulo(peresempioandareavanti,indietro,girareasinistra,adestra)sonofunzionicontenutenellaclassePen.Sipiùpensareunoggettocomemembrodiunaclasse,esipuòcrearequalsiasinumerodioggettiperunaclasse–comefaremofrabreve.

Oracreiamolostessoinsiemediclassirappresentatoneldiagrammaadalbero,partendodallacima.Leclassisidefinisconousandolaparolachiaveclassseguitadaunnome.PoichéCoseèlaclassepiùampia,partiamodaquesta:

ChiamiamoCosequestaclasse,poiusiamol’enunciatopassperfarsapereaPythonchenongliforniremoulterioriinformazioni:siusapassquandosivuolcreareunaclasseounafunzione,manonsivoglionospecificareperilmomentoisuoidettagli.

Poi,aggiungeremolealtreclassiecostruirealcunerelazionifradiesse.

Page 105: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

FIGLIEGENITORISeunaclasseècontenutainun’altraclasse,sidicecheèfigliadiquellaclasse(chesaràlasuagenitrice).Unaclassepuòesserefigliadiqualcheclasseegenitricedialtre.Nelnostrodiagramma,laclassechestasopraunacertaclasseèlasuagenitrice.Peresempio,InanimateeAnimatesonoentrambefigliedellaclasseCose,chequindièlalorogenitrice.

PerdireaPythoncheunaclasseèfigliadiun’altra,aggiungiamoilnomedellaclassegenitricefraparentesidopoilnomedellanuovaclasse,inquestomodo:

Abbiamocreatounaclasse,chiamataInanimate,eabbiamodettoaPythonchelasuagenitriceèCose,medianteilcodiceclassInanimate(Cose).PoiabbiamocreatounaclassechiamataAnimateeabbiamodettocheancheinquestocasolagenitriceèCose,medianteilcodiceclassAnimate(Cose).ProviamoafarelastessacosaconlaclasseMarciapiede,figliadiInanimate:

PossiamopoianalogamenteorganizzareleclassiAnimali,MammiferieGiraffe,utilizzandolerelativeclassigenitrici:

AGGIUNGEREOGGETTIALLECLASSIOracheabbiamounaseriediclassi,cheneditediinserireunpo’dicosedentroquelleclassi?SupponiamodiavereunagiraffachesichiamaReginald.SappiamocheappartieneallaclasseGiraffe,machecosapossiamousare,interminidiprogrammazione,perdescriverequellagiraffachesichiamaReginald?DiciamocheReginaldèunoggettodellaclasseGiraffe(sidiceancheavoltecheèunaistanzadellaclasse).Per“presentare”ReginaldaPython,usiamoquestaforma:

QuestarigadicodicediceaPythondicreareunoggettonellaclasseGiraffeediassegnarloallavariabilereginald.Comenelcasodiunafunzione,ilnomedellaclasseèseguitodalledueparentesi.Nelseguitodelcapitolovedremocomecreare

Page 106: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

oggettiutilizzandodeiparametrifraleparentesi.Checosafal’oggettoreginald?Beh,niente,perilmomento.Perrendereutilii

nostrioggetti,quandocreiamolenostreclassi,dobbiamodefinireanchedellefunzionichepossanoessereusateconglioggettidiquellaclasse.Anzichéusarelaparolachiavepasssubitodopoladefinizionedellaclasse,possiamoaggiungeredefinizionidifunzioni.

DEFINIREFUNZIONIDICLASSINelCapitolo7abbiamopresentatolefunzionicomeunmodoperriusarecodice.Unafunzioneassociataaunaclassesidefiniscecomequalsiasialtrafunzione,solochesiscriverientratasottoladefinizionedellaclasse.Peresempio,eccounafunzionenormalechenonèassociataaunaclasse:

Eccounpaiodifunzionicheappartengonoaunaclasse:

CARATTERISTICHECOMEFUNZIONIConsiderateleclassifigliedellaclasseAnimatedefinitaap.95.Possiamoaggiungerecaratteristicheaunaclasseperdirechecos’èechecosapuòfare.Unacaratteristicaèuntrattocomuneatuttiimembridellaclasse(editutteleclassifiglie).

Peresempio,checos’hannoincomunetuttiglianimali?Tantopercominciare,tuttirespirano.Poi,tuttisimuovonoemangiano.Eimammiferi?Imammiferiallattanoipiccoli.Erespirano,simuovonoemangiano.Sappiamochelegiraffemangianolefogliedeglialberie,cometuttiimammiferi,allattano,respirano,simuovonoemangiano.Aggiungiamoalnostrodiagrammaquestecaratteristiche:

Page 107: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Questecaratteristichepossonoessereconsiderateazioni,ofunzioni–cosecheunoggettodiquellaclassepuòfare.

Peraggiungereunafunzioneaunaclasse,siusalaparolachiavedef.LaclasseAnimalisipotrebbedefinirequindicosì:

Nellaprimariga,definiamolaclassecomeinprecedenzama,invecediusarelaparolachiavepasssullarigasuccessiva,definiamounafunzionerespiraeleassegniamounparametro:self(letteralmentesignifica“sé”).Ilparametroselfèunmodoperconsentireaunafunzionedellaclassedichiamareun’altrafunzionenellastessaclasse(enellaclassegenitrice).Vedremopiùavanticomevieneusatoquestoparametro.

Sullarigasuccessiva,passdiceaPythoncheperilmomentonongliforniremoaltreinformazionisullafunzionerespira,perchéperoranondovràfarenulla.Poiaggiungiamolefunzionisi_muoveemangia,eanchequesteperoranonfannonulla.Ricreeremoleclassifrabreveeinseriremocodiceutilenellefunzioni.Questoèunmodomoltodiffusodisviluppareiprogrammi:spessoiprogrammatoricreanoclassiconfunzionichenonfannonulla,perstabilirechecosaleclassidebbanofare,primadientrareneidettaglidellesingolefunzioni.

Possiamoaggiungerefunzioniancheallealtredueclassi,MammiferieGiraffe.Ciascunaclassesaràingradodiusarelecaratteristiche(cioèlefunzioni)dellagenitrice.Questosignificachenonènecessariocreareclassimoltocomplicate:poteteinserirelevostrefunzioninellaclassepiùgeneralepercuivalequellacaratteristica,etuttelesuefiglielapotrannousare.(Questoèunbuonmodoperrendereleclassipiùsempliciepiùfacilidacomprendere.)

Page 108: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

PERCHÉUSARECLASSIEOGGETTI?Abbiamoaggiuntofunzioniallenostreclassi,maperchéusareclassieoggetti,quandosipotrebberosemplicementescriverefunzioninormalichiamaterespira,si_muove,mangiaecosìvia?

Perrispondere,useremolanostragiraffaReginald,creatacomeoggettodellaclasseGiraffe,inquestomodo:

Poichéreginaldèunoggettopossiamochiamare(eseguire)lefunzionifornitedallasuaclasse(Giraffe)edalleantenatediquesta.Sichiamanolefunzionisuunoggettousandol’operatorepuntoeilnomedellafunzione.PerdireaReginalddimuoversiomangiare,possiamochiamarelefunzionicosì:

SupponiamocheReginaldabbiaunamico(sempreunagiraffa)chesichiamaHarold.CreiamounaltrooggettodellaclasseGiraffeconilnomeharold:

Poichéusiamooggettieclassi,possiamodireaPythonesattamentediqualegiraffastiamoparlandoquandovogliamoeseguirelafunzionesi_muove.Peresempio,sevolessimofarmuovereHarold,malasciarefermoReginald,potremmochiamaresi_muoveutilizzandol’oggettoharold,così:

Inquestocaso,simuoveràsoloHarold.Modifichiamounpo’leclassiperrenderlopiùevidente.Aggiungiamoalle

funzioniunenunciatoprint,invecedipass:

Page 109: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ora,quandocreiamoreginaldeharoldechiamiamodellefunzionisudiessi,vediamosuccederequalcosadiconcreto:

Nelleprimeduerighe,abbiamocreatolevariabilireginaldeharold,chesonooggettidellaclasseGiraffe.Poi,abbiamochiamatolafunzionesi_muoveperreginald,ePythonhastampatosimuovesullarigasuccessiva.Analogamente,abbiamochiamatolafunzionemangia_foglie_degli_alberiperharoldePythonhastampatomangiafogliedeglialberi.Sesitrattassedigiraffevere,anzichédioggettiinuncomputer,unagiraffastarebbecamminando,l’altrastarebbemangiando.

OGGETTIECLASSINELLEIMMAGINIEseusassimounapprocciopiùgraficoaoggettieclassi?Torniamoalmodulo

Page 110: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

turtleconcuiabbiamogiocatonelCapitolo4.Quandousiamoturtle.Pen(),PythoncreaunoggettodellaclassePencheèfornitodalmoduloturtle(assomigliaunpo’ainostrioggettireginaldeharolddellasezioneprecedente).Possiamocrearedueoggettitartaruga(AveryeKate),esattamentecomeabbiamocreatoduegiraffe:

Ciascunoggettotartaruga(averyekate)èmembrodellaclassePen.Quiglioggetticomincianoadimostrarelaloropotenza.Avendocreatoinostri

oggettitartaruga,possiamochiamarelefunzioniperciascunodiessi,edisegnerannoinmodoindipendentel’unodall’altro.Provateconquesteistruzioni:

Conquestaseriediistruzioni,diciamoadAverydiprocedereinavantiper50pixel,poidigirareadestradi90gradiediprocedereinavantiper20pixel,inmodochesiarresticonlapuntaversoilbasso.Ricordatecheletartarugheinizialmentesonosempreorientateversodestra.

OraèilmomentodispostareKate.CosìdiciamoaKatediruotareversosinistradi90gradi,poidiandareavantiper

100pixel:cosìsifermeràconlapuntarivoltaversol’alto.Finqui,abbiamoottenutounalineaconlefreccechesimuovevanoindirezioni

diverse,doveciascunafrecciarappresentaundiversooggettotartaruga:Averychepuntaversoilbasso,Katechepuntaversol’alto.

Oraaggiungiamounaterzatartaruga,Jacob,espostiamola,senzaandarea

Page 111: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

intralciareKateoAvery.

AbbiamocreatounnuovooggettoPenchesichiamajacob,poiloabbiamofattoruotaredi180gradiespostareinavantidi80pixel.Ilnostrodisegnooraavràquestoaspetto,contretartarughe:

Ricordateche,ognivoltachesichiamaturtle.Pen()percreareunatartaruga,siaggiungeunnuovooggetto,indipendentedaglialtri.Ciascunoggettoèancoraun’istanzadellaclassePen,esipossonousarelestessefunzionisuciascunoggetto,ma,poichésistannousandodeglioggetti,ciascunatartarugasipuòspostareindipendentementedallealtre.Comeinostrioggettigiraffaindipendenti(ReginaldeHarold),Avery,KateeJacobsonotreoggettitartarugaindipendenti.Secreiamounnuovooggettoconlostessonomedivariabilediunoggettogiàcreato,ilvecchiononnecessariamentescomparirà.Provateci:createun’altratartarugaKateeprovateaspostarlasulloschermo.

ALTRECARATTERISTICHEUTILIDIOGGETTIECLASSIClassieoggettifacilitanoilraggruppamentodifunzioni;sonoancheestremamenteutiliquandosivuoleragionaresuunprogrammaperpartipiùpiccole.

Peresempio,pensateaun’applicazionedavveromoltogrande,comeunelaboratoreditestioungiocoin3D.Perlamaggiorpartedellepersoneèquasiimpossibilecapireprogrammididimensionisimilinellorocomplesso,perchésonocostituitidacosìtantocodice.Masuddividetequestiprogrammimostruosiinpartipiùpiccole,eciascunpezzocominceràadavereunsenso–purchéconosciateillinguaggio,ovviamente!

Page 112: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Quandosiscriveunprogrammadigrandidimensioni,suddividerloinparticonsenteanchedidividereillavorofrapiùprogrammatori.Iprogrammipiùcomplicaticheutilizzate(comeilvostrobrowserweb)sonostatiscrittidamoltepersone,dasquadredipersonechelavoravanocontemporaneamentesupartidiverse,magariinluoghidiversiingiroperilmondo.

Oraimmaginatedivolerespanderequalcunadelleclassicreateinquestocapitolo(Animali,MammiferieGiraffe):avetetroppolavorodafare,evoletecheivostriamicividianounamano.PotrestedividereillavorodiscritturadelcodiceinmodocheunapersonalavorisullaclasseAnimali,un’altrasullaclasseMammiferieun’altraancorasullaclasseGiraffe.

FUNZIONIEREDITATESeavetefattoattenzione,visareteresicontochechiunquefiniscaperlavoraresullaclasseGiraffeèfortunato,perchéquellaclassepotràutilizzareanchetuttelefunzionicreatedachilavorasulleclassiAnimalieMammiferi.SidicechelaclasseGiraffeereditalefunzionidallaclasseMammiferiche,asuavolta,ereditadallaclasseAnimali.Inaltreparole,quandocreiamounoggettogiraffa,possiamousarefunzionidefinitenellaclasseGiraffe,maanchequelledefinitenelleclassiMammiferieAnimali.

Analogamente,secreiamounoggettomammifero,possiamousarelefunzionidefinitenellaclasseMammiferietuttequelledellaclassegenitriceAnimali.

Dateun’occhiatadinuovoallarelazionefraleclassiAnimali,MammiferieGiraffe.LaclasseAnimalièlagenitricediMammiferi,equestaèlagenitricediGiraffe.

AncheseReginaldèunoggettodellaclasseGiraffe,possiamocomunquechiamarelafunzionesi_muovedefinitanellaclasseAnimali,perchétuttelefunzionidefiniteinunaclassegenitricesonodisponibiliallesueclassifiglie:

Page 113: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ineffetti,tuttelefunzionidefinitenelleclassiAnimalieMammiferipossonoesserechiamatedalnostrooggettoreginald,perchévengonoereditate:

FUNZIONICHECHIAMANOALTREFUNZIONIQuandochiamiamofunzionisuunoggetto,usiamoilnomedivariabilediquell’oggetto.Peresempio,eccocomechiamiamolafunzionesi_muovesull’oggettogiraffaReginald:

PerchéunafunzionedellaclasseGiraffechiamilafunzionesi_muove,bisognausareinveceilparametroself.Questoparametroèunmodoperfarsìcheunafunzionedellaclassechiamiun’altrafunzione.Peresempio,aggiungiamoallaclasseGiraffeunanuovafunzione,cerca_cibo:

Oraabbiamocreatounafunzionechecombinaaltreduefunzioni,cosamoltocomunenellaprogrammazione.Spesso,vicapiteràdiscrivereunafunzionechefaqualcosadiutile,chepoipoteteutilizzareall’internodiun’altrafunzione.(LofaremoanchenoinelCapitolo13,dovescriveremofunzionipiùcomplessepercreareungioco.)

UsiamoselfperaggiungerequalchealtrafunzioneallaclasseGiraffe:

Page 114: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Usiamolefunzionimangiaesi_muovedellaclassegenitriceAnimali(funzioniereditate)perdefinirelefunzionimangia_foglie_degli_alberieballa,perlaclasseGiraffe.Aggiungendofunzionichechiamanoaltrefunzioniinquestomodo,quandosicreanooggettidiquelleclassi,sipuòchiamareunasingolafunzionechefacciapiùdiunacosa.Potetevederequisottochecosasuccedequandosichiamalafunzioneballa:lanostragiraffasimuovequattrovolte(cioè,iltesto“simuove”vienestampatoquattrovolte):

INIZIALIZZAREUNOGGETTOAvolte,quandosicreaunoggetto,sivoglionoimpostareanchedeivalori(dettiancheproprietà)chesiutilizzerannoinfuturo.Quandosiinizializzaunoggetto,losipreparaall’uso.

Peresempio,supponiamodivolerindicarequantemacchiecisonosuinostrioggettigiraffaquandovengonocreati–cioèquandovengonoinizializzati.Perfarlo,creiamounafunzione__init__(notatechecisonoduecaratteridisottolineaturadaciascunaparte,peruntotalediquattro).QuestoèuntipospecialedifunzionenelleclassiPythonedeveaverequestonome.Lafunzioneinitcostituisceunmodoperfissareleproprietàdiunoggettoquandoquestovienecreato,ePythonchiameràautomaticamentequestafunzionequandosicreaunnuovooggetto.Eccocomesiusa:

Page 115: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Quicomeprimacosaabbiamodefinitolafunzioneinitcondueparametri,selfemacchie,conilcodicedef__init__(self,macchie):.Comelealtrefunzionicheabbiamodefinitonellaclasse,anchelafunzioneinitdeveavereselfcomeprimoparametro.Poiabbiamoimpostatoilparametromacchieaunavariabiledioggetto(lasuaproprietà)chiamatamacchie_giraffa,utilizzandoilparametroself,conilcodiceself.macchie_giraffa=macchie.Poteteimmaginarechequestarigadicodicedica“Prendiilvaloredelparametromacchieesalvaloperpiùtardi(utilizzandolavariabiledioggettomacchie_giraffa)”.Comeunafunzioneinunaclassepuòchiamareun’altrafunzioneutilizzandoilparametroself,ancheallevariabilidellaclassesipuòaccedereconself.

Poi,secreiamounpaiodinuovioggettigiraffa(OzwaldeGertrude)estampiamoilnumerodelleloromacchie,possiamovederelafunzionediinizializzazioneall’opera:

Comeprimacosa,abbiamocreatoun’istanzadellaclasseGiraffe,utilizzandoilvalorediparametro100.Questofasìchevengachiamatalafunzione__init__conilvalore100perilparametromacchie.Poiabbiamocreatoun’altraistanzadellaclasseGiraffe,questavoltaconilvalore150.Infine,abbiamostampatolavariabileoggettomacchie_giraffaperciascunodeinostrioggettigiraffa,epossiamovederecheirisultatisono100e150.Hafunzionato!

Ricordate,quandosicreaunoggettodiunaclasse,comeozwaldquisopra,sipuòfarriferimentoallesuevariabilioallesuefunzioniutilizzandol’operatorepuntoeilnomedellavariabileodellafunzionechesivuoleusare(peresempio,ozwald.macchie_giraffa).Quandoinvecesicreanofunzioniall’internodiunaclasse,sifariferimentoaquellestessevariabili(eadaltrefunzioni)utilizzandoilparametroself(self.macchie_giraffa).

CHECOSAAVETEIMPARATOInquestocapitolo,abbiamousatoleclassipercrearecategoriedicoseeabbiamocreatooggetti(istanze)diquelleclassi.Avetevistocomeunaclassefigliaereditilefunzionidellasuagenitriceeche,anchesedueoggettiappartengonoallastessaclasse,nonsononecessariamentedeicloni.Peresempio,unoggettogiraffapuòavereilsuonumerodimacchie.Aveteimparatocomechiamare(eseguire)funzionisuunoggettoecomelevariabilioggettosianounmodopersalvaredeivaloriinqueglioggetti.Infine,abbiamousatoilparametroselfnellefunzioniperfarriferimentoadaltrefunzionievariabili.QuestisonoconcettifondamentalidiPython,eliincontrereteancoramoltevoltecontinuandoaleggerequestolibro.

Page 116: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

ROMPICAPODIPROGRAMMAZIONEAlcunedelleideevisteinquestocapitoloacquisterannomaggioresignificatoquantopiùleuserete.Provateasvolgeregliesempiseguenti,poicercatelerisposteall’indirizzohttp://python-for-kids.com/.

1.LADANZADELLAGIRAFFAAggiungeteallaclasseGiraffedellefunzioniperfarspostareavantieindietrolozoccolosinistroedestrodellagiraffa.Peresempio,unafunzioneperfarspostareavantilazampasinistrapotrebbeesserescrittainquestomodo:

PoicreateunafunzionedanzaperinsegnareaReginaldcomesiballa(lafunzionechiameràlequattrofunzioniappenacreateperlezampe).Ilrisultatodellachiamatadiquestanuovafunzionesaràunadanzamoltosemplice:

2.FORCONEPERTARTARUGHECreatequestodisegnodiunforconeutilizzandoquattrooggettitartarugaPen(lalunghezzaesattadeisingolisegmentinonèimportante).Ricordate,comeprimacosa,diimportareilmoduloturtle!

Page 117: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 118: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

9LEFUNZIONIINTERNEDIPYTHON

Pythonmetteadisposizioneunacassettadegliattrezziperlaprogrammazionebenfornita,incuisitrovano,fralealtrecose,moltefunzioniemoltimoduligiàprontiall’uso.Comeunmartellofidatoounachiaveinglese,questistrumentiincorporati(pezzidicodice,inrealtà)possonorenderemoltopiùfacilescrivereprogrammi.ComeabbiamovistonelCapitolo7,imodulidevonoessereimportati,perpoteressereutilizzati,mentrenonc’èbisognodiimportarelefunzioniinterne;sonodisponibiliappenalashelldiPythonsiavvia.

Page 119: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 120: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestocapitolo,esamineremoalcunedellefunzioniinternepiùutili,poiciconcentreremosuunainparticolare:lafunzioneopen,checonsentediaprirefileperpoterneleggereicontenutieperpoterscrivereallorointerno.

COMESIUSANOLEFUNZIONIINTERNEConsidereremoquidodicifunzioniinterne,usatespessodaiprogrammatoriPython.Vedremochecosafannoecomesiusano,efaremoqualcheesempiodicomepossonoaiutarenellascritturadiprogrammi.

LAFUNZIONEABSLafunzioneabsrestituisceilvaloreassolutodiunnumero,cheèilvalorediquelnumerosenzasegno.Peresempio,ilvaloreassolutodi10è10,ilvaloreassolutodi-10è10.

Perusarelafunzioneabs,bastachiamarlaconunnumeroounavariabilecomeparametro:

Poteteusarelafunzioneabsperesempiopercalcolarelaquantitàassolutadimovimentodiunpersonaggioinungioco,indipendentementedalladirezioneincuisièspostato.Peresempio,supponiamocheilpersonaggiofacciatrepassiadestra(3positivo)epoidiecipassiasinistra(10negativo,ovvero-10).Senonciinteressaladirezione(positivaonegativa),ilvaloreassolutodiquestinumerisarebbe3e10,Potresteusarequestivaloriinungiocodatavoloincuilanciateduedadiepoifatespostareilpersonaggiodiunnumeromassimodipassiinqualsiasidirezione,sullabasedelpunteggiototaledeiduedadi.Ora,sememorizzatequelnumerodipassiinunavariabile,potetedeterminareseilpersonaggiosimuoveconilcodicechesegue.Vogliamovisualizzarequalcheinformazionequandoilgiocatorehadecisodispostarsi(qui,visualizzeremosolo“Ilpersonaggiosimuove”):

Page 121: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Senonavessimousatoabs,l’enunciatoifavrebbedovutoesserediquestotipo:

Comepotetevedere,l’usodiabsrendel’enunciatoifunpo’piùbreveepiùfaciledacapire.

LAFUNZIONEBOOLIlnomeboolèabbreviazionedibooleano,l’aggettivocheiprogrammatoriusanoperdescriveuntipodidatichepuòaveresoloduevalori,“vero”(True)o“falso”(False).

LafunzioneboolprendeununicoparametroerestituisceoTrueoFalseasecondadelsuovalore.Sesiusaboolperinumeri,0restituisceFalse,mentreognialtronumerorestituisceTrue.Eccoqualcheesempio:

Sesiusaboolconaltrivalori,peresempiostringhe,restituisceFalseselastringanonhaalcunvalore(ovverolaparolachiaveNone,èunastringavuota).Inognialtro

Page 122: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

casorestituisceTrue:

LafunzioneboolrestituiràFalseancheperliste,tupleemappechenoncontengonoalcunvalore,Trueseinvececontengonoqualchevalore:

Poteteusareboolquandodovetedecidereseunvaloresiastatoimpostatoomeno.Peresempio,sechiediamoachiusailnostroprogrammadiinserirel’annoincuiènato,unifpotrebbeusareboolperverificareilvaloreinserito:

Laprimarigausainputperimmagazzinarenellavariabileannociòchel’utenteinseriscedallatastiera.PremendoINVIOsullarigasuccessiva(senzascriverenulla),nellavariabilevienememorizzatoilvalorediINVIO.(NelCapitolo7abbiamousatosys.stdin.readline(),cheèunaltromodoperfarelastessacosa.)

Sullarigasuccessiva,l’enunciatoifcontrollailvalorebooleanodellavariabile,dopoaverutilizzatolafunzionerstrip(cheeliminaicaratterispazioeINVIOallafine

Page 123: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

dellastringa).Datochel’utentequinonhainseritonulla,boolrestituisceFalse.Poichél’enunciatoifusalaparolachiavenot,ilsuosignificatoè“faiquestoselafunzionenonrestituisceTrue”,perciòilcodicestampaDeviinserireunvaloreperl’annodinascitasullarigasuccessiva.

LAFUNZIONEDIRLafunzionedir(abbreviazionedidirectory)restituisceinformazionisuqualsiasivalore.Fondamentalmente,vidicequalifunzionipossonoessereusateconquelvalore,elencandoleinordinealfabetico.

Peresempio,pervederequalifunzionisianodisponibiliperunvalorelista,potetescrivere:

Lafunzionedirèutilizzabilesuquasitutto,inparticolareperstringhe,numeri,funzioni,moduli,oggettieclassi.Qualchevoltaleinformazionicherestituisce,però,possonoesserepocoutili.Peresempio,sechiamatedirperilnumero1,visualizzaunaseriedifunzionispeciali(quellecheinizianoeterminanocongliunderscore,itrattinidisottolineatura)usatedaPythonstesso,ilchenonèmoltoutile(disolitosipuòignorarelamaggiorpartediquestefunzioni):

Lafunzionedirpuòessereutilequandosihaunavariabileesivuolecapirerapidamentechecosasipuòfareconquellavariabile.Peresempio,eseguitedirconlavariabilepopcornchecontieneunvalorestringa,eotterretelalistadellefunzionimesseadisposizionedallaclassestring(tuttelestringheappartengonoallaclassestring):

Page 124: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Aquestopunto,poteteusarehelppervedereunabrevedescrizionediqualsiasifunzionenellalista.Eccounesempio:

Leinformazionirestituitepossonorisultarepocochiare,perciòdiamoun’occhiatapiùdavicino.Itrepuntini(…)significanocheupperèunafunzioneinternadellaclassestringe,inquestocaso,chenonassumeparametri(èilsuccodelleparolecheseguonolaparentesiconitrepuntini).Lafreccia(->)sullarigasuccessivasignificachelafunzionerestituisceunastringa(str).L’ultimarigadàunabrevedescrizionediquellochefalafunzione:restituisceunacopiadiS(lastringa)convertitaintuttemaiuscole(uppercase).

LAFUNZIONEEVALLafunzioneeval(abbreviazionedievalutation,valutazione)prendecomeparametrounastringa,elaelaboracomesefosseun’espressionePython.Peresempio,eval('print("wow")')eseguel’enunciatoprint("wow").Lafunzioneevaloperasoloconespressionisemplici,comequesta:

Page 125: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Espressionidispostesupiùrighe(comeglienunciatiif)ingenerenonverrannovalutate,comeinquestoesempio:

Lafunzioneevalsiusaspessoperconvertirel’inputdell’utenteinespressioniPython.Peresempio,sipotrebbescrivereunsempliceprogramma“calcolatrice”cheleggaespressionimatematicheepoinecalcoli(valuti)lasoluzione.

Datochel’inputdell’utenteèlettocomestringa,Pythondeveconvertirloinnumerieoperatori,primadieseguirequalsiasicalcolo.Lafunzioneevalrendefacilelaconversione:

Nell’esempio,usiamoinputperleggerequantoinseritodall’utentenellavariabiletuo_calcolo.Nellarigasuccessiva,inseriamol’espressione32*52,poiusiamoevalpereseguireilcalcolo;ilrisultatovienestampatosullarigaseguente.

LAFUNZIONEEXECLafunzioneexecècomeeval,trannechelasipuòusarepereseguireprogrammipiùcomplessi.Ladifferenzaècheevalrestituisceunvalore(qualcosachesipuòsalvare

Page 126: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

inunavariabile),mentreexecno.Eccounesempio:

Nelleprimeduerighe,creiamounavariabileconunastringamultilineachecontienedueenunciatiprint,poiusiamoexecpereseguirelastringa.

SipotrebbeusareexecpereseguirepiccoliprogrammicheunprogrammaPythonleggedafile:programmidentroprogrammi!Puòesseremoltoutile,quandosiscrivonoapplicazionilungheecomplesse.Peresempio,sipotrebbecreareungiocoDuelingRobotsincuiduerobotsispostanosulloschermoecercanodiattaccarsiavicenda.IgiocatoridarebberoistruzioniailororobotsottoformadiminiprogrammiPythoneilgiocoleggerebbeleistruzionieuserebbeexecpereseguirle.

LAFUNZIONEFLOATLafunzionefloatconverteunastringaounnumeroinunnumeroinvirgolamobile(floatingpoint),cioèunnumeroconposizionidecimali(cheèancheunnumeroreale).Peresempio,ilnumero10èunintero,mentre10.0,10.1e10.253(inPythonsiusa,comenelsistemaanglosassone,ilpuntoalpostodellavirgola)sonotuttinumeriinvirgolamobile.Sipossonousareinumeriinvirgolamobile(anzichégliinteri)peresempioquandosiscriveunprogrammachecomporticalcolidisommedidenaro,oppureneiprogrammidigrafica(giochi3D,peresempio)percalcolarecomeedovedisegnarequalcosasulloschermo.

Sipuòconvertireunastringainunnumeroinvirgolamobilesemplicementechiamandofloat:

Sipuòusareancheilpuntodecimalenellestringhe:

Page 127: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Sipuòusarefloatperconvertireinnumeriivaloriinseritinelprogramma,cosaparticolarmenteutilequandosideveconfrontareilvaloreinseritodall’utenteconqualchealtrovalore.Peresempio,perverificaresel’etàdiunapersonaèsuperioreauncertonumero,potremmofarecosì:

LAFUNZIONEINTLafunzioneintconverteunastringaounnumeroqualsiasiinunintero,ilchesignificasostanzialmentechetuttociòcheeventualmentecomparivadopoilpuntodecimalevieneeliminato.Peresempio,eccocomeconvertireunnumeroinvirgolamobileinunsempliceintero:

Questoesempioconverteunastringainunintero:

Provateperòaconvertireinuninterounastringacontenenteunnumeroinvirgolamobileeotterreteunmessaggiod’errore.Peresempio:

Comepotetevedere,ilrisultatoèunmessaggioValueError.

LAFUNZIONELENLafunzionelenrestituiscelalunghezzadiunoggettoo,nelcasodiunastringa,ilnumerodeicaratterichelacompongono.Peresempio,peraverelalunghezzadiquestaèunastringadiprova,sipuòfarecosì:

Page 128: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Seusataconunalistaounatupla,lenrestituisceilnumerodeglielementichelacompongono:

Anchequandoèusataconunamappa,lenrestituisceilnumerodeisuoielementi:

Lafunzionelenèparticolarmenteutilequandosilavoraconicicli.Peresempio,lasipuòusarepervisualizzarel’indicedellaposizionedeglielementiinunalista:

Qui,memorizziamolalunghezzadellalistanellavariabilelunghezzain 1 ,poiusiamoquellavariabilenellafunzionerangepercreareilcicloin 2 .In 3 ,mentresiprocedeciclicamentelungotuttiglielementidellalista,stampiamounmessaggiocheindicalaposizioneeilvaloredell’elementoconsiderato.Sipotrebbeusarelafunzionelenanche,peresempio,sesiavesseunalistadistringheesivolessestampareunelementodellastringaognidueoognitre.

Page 129: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

LEFUNZIONIMAXEMINLafunzionemaxrestituiscel’elementopiùgrandeinunalista,unatuplaounastringa.Peresempio,eccolausataconunalistadinumeri:

Lasipuòusareancheconunastringaseparatadavirgoleospazi:

Comesivedeinquestocaso,leletterevengonoordinatealfabeticamente,eleminuscolevengonodopolemaiuscole,perciòtè“piùgrande”diT.

Nonènecessariocomunqueusareliste,tupleostringhe.Sipuòusaremaxanchedirettamente,einserireglielementichesivoglionoconfrontarefraparentesi,comeparametri:

Lafunzioneminsicomportanellostessomodo,trannecherestituiscel’elementopiùpiccolodellalista,tuplaostringa.Eccolaapplicataallanostralistadinumeri:

Page 130: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Supponiamodiavereungioco,conquattrogiocatori,incuiciascunodevetirareaindovinareeindicareunnumerominoredelvostro.Sequalchegiocatoreproponeunnumeromaggioredelvostro,tuttiperdono,masetuttipropongononumeripiùbassi,vincono.Potremmousaremaxperscoprirerapidamentesetuttiinumericheglialtrigiocatorihannopropostosonopiùbassi:

Inquestoesempio,memorizziamoilnumerodaindovinareusandolavariabileindovina_il_numero.Inumeripropostidaigiocatorisonomemorizzatinellalistarisposte_giocatori.L’enunciatoifconfrontalarispostapiùaltaconilnumeroinindovina_il_numero,esequalchegiocatorehapropostounnumeropiùalto,vienestampatoilmessaggio“Ahi!Avetepersotutti”.

LAFUNZIONERANGELafunzionerange,comeabbiamogiàvisto,vieneusatasoprattuttoneiciclifor,perpercorrereunasezionedicodiceunospecificonumerodivolte.Iprimidueparametripassatiarangesonochiamatistartestop.Abbiamovistousatarangeconquestidueparametrinell’esempioprecedente,insiemeallafunzionelen,pereffettuareunciclo.

Inumerigeneratidarangeinizianodaquellodatocomeprimoparametroefinisconoconquellopassatocomesecondoparametro.Peresempio,eccochecosasuccedesestampiamoinumericreatidarangefra0e5:

Page 131: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Lafunzionerangeinrealtàrestituisceunoggettospeciale,chiamatoiteratore,cheripeteun’azioneperuncertonumerodivolte.Inquestocaso,restituisceilnumerosuccessivo,ognivoltachevienechiamata.

Sipuòconvertirel’iteratoreinunalista(mediantelafunzionelist).Sepoisistampailvalorerestituitodallachiamataarange,sivedrannoinumerichecontiene:

Sipuòpassarearangeancheunterzoparametro,chiamatostep(passo).Seilvalorestepnonèincluso,vieneutilizzatocomepasso1.

Checosasuccede,invece,sesiindicailnumero2comepasso?

Ogninumeronellalistaèpiùgrandedidueunitàrispettoalprecedente,elalistafinisceconilnumero28,cheè30–2.Sipuòindicareancheunpassonegativo:

LAFUNZIONESUMLafunzionesumsommaglielementidiunalistaerestituisceiltotale.Eccounesempio:

Sullaprimariga,creiamounalistadinumericompresifra0e500,usandolafunzionerangeconpasso50.Poistampiamolalistapervedereilrisultato.Infine,passandolavariabilelista_numeriallafunzionesumconprint(sum(lista_numeri)),tuttiglielementidellalistavengonosommatievienestampatoiltotale,2250.

Page 132: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.2.3.4.

5.

6.7.

LAVORARECONIFILEIfilediPythonsonougualiadaltrifilesulvostrocomputer:documenti,immagini,musica,giochi…ineffetti,tuttonelvostrocomputerèsalvatocomefile.

VediamocomeinPythonsiapranoifile,conlafunzioneopen,perpotervilavorare.Primaperòdobbiamocreareunnuovofileconcuifarelenostreprove.

CREAREUNFILEDIPROVAFaremoqualcheesperimentoconunfileditesto,chechiameremotest.txt.Seguitelaproceduraperilsistemaoperativocheutilizzate.

CREAREUNNUOVOFILEINWINDOWSSeusateWindows,seguitequestipassipercrearetest.txt:

SelezionateStart>Tuttiiprogrammi>Accessori>Blocconote.Scrivetequalcherigainunfilevuoto.SelezionateFile>Salva.Quandocomparelafinestradidialogo,selezionatel’unitàC:facendoundoppioclicsuComputerepoisuDiscolocale(C:).FateundoppioclicsullacartellaUtentiepoiundoppioclicsulvostronomeutente.Scrivetetest.txtnellacasellaNomefile,inbassonellafinestradidialogo.Infine,fateclicsulpulsanteSalva.

Page 133: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

1.

2.3.

4.5.6.7.8.

9.

1.

2.3.

CREAREUNNUOVOFILEINMACOSXSeusateunMac,seguitequestipassipercrearetest.txt:

Fateclicsull’iconaSpotlightnellabarradeimenunellapartesuperioredelloschermo.ScriveteTextEditnellacaselladiricerca.NellasezioneApplicazionicompariràTextEdit.Fateunclicperaprirel’editor(potetetrovareTextEditanchenellacartellaApplicazionidelFinder).Scrivetequalcherigaditestonelfilevuoto.SelezionateFormato>Solotesto.SelezionateFile>Salva.NellacasellaSalvaconnome,scrivetetest.txt.Nell’elencoSituatoin,fateclicsulvostronomeutente(ilnomeconcuiaveteeffettuatol’accesso,oppureilnomedellapersonachepossiedeilcomputerchestateusando).Infine,fateclicsulpulsanteSalva.

CREAREUNNUOVOFILEINUBUNTUSeusateUbuntu,seguitequestipassipercrearetest.txt:

Apriteilvostroeditor,chepuòessereTextEditorogeditoaltroancora.Nelcaso,cercatelonelSoftwareCenter.Inseritequalcherigaditestonell’editor.SelezionateFile>Salva(ingeditilpulsanteSalva)

Page 134: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

4.

5.

NellacasellaNome,scrivetetest.txtcomenomedifile.ComedirectorydisalvataggiopuòdarsisiagiàselezionatalavostradirectoryHome,ma,senonloè,selezionatela.(Eventualmente,ladirectoryhomeèilnomeutenteconcuiaveteeffettuatol’accesso.)FateclicsulpulsanteSalva.

APRIREUNFILEINPYTHONLafunzioneinternaopenapreunfilenellashelldiPythonenevisualizzaicontenuti.Comedireallafunzionequalefileapriredipendedalsistemaoperativo.Guardatel’esempioperunfileWindows,poileggeteiparagrafispecificiperMacoUbuntu,seusateunodiquestisistemi.

APRIREUNFILEINWINDOWSSeusateWindows,inseritequestocodiceperapriretest.txt:

Nellaprimariga,usiamoopen,cherestituisceunoggettofileconlefunzioniperlavoraresuifile.IlparametroutilizzatoconlafunzioneopenèunastringachediceaPythondovetrovareilfile.SeusateWindows,avetesalvatotest.txtnellavostra

Page 135: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

directoryhomesull’unitàC:,perciòdovetespecificarelaposizionedelvostrofileconlastringaC:\\Users\\<quiscriveteilvostronome>\\test.txt.

LeduebarrerovesciatenelnomedelfileWindowsdiconoaPythonchelabarrarovesciataèsoloquello,nonqualchetipodicomando.(ComeabbiamovistonelCapitolo3,lebarrerovesciatedasolehannounsignificatospecialeinPython,inparticolarenellestringhe.)Salviamol’oggettofilenellavariabiletest_file.

APRIREUNFILEINMACOSXSeusateMacOSX,dovreteinserireunaposizionediversanellaprimarigadell’esempiodiWindows,perapriretest.txt.Nellastringa,usateilnomeutentesucuiavetefattoclicquandoavetesalvatoilfileditesto.Peresempio,seilnomeutenteeramartarossi,ilparametrodiopendovràesserescrittoinquestomodo:

APRIREUNFILEINUBUNTUSeusateUbuntu,dovreteinserireunaposizionediversanellaprimarigadell’esempiodiWindows,perapriretest.txt.Nellastringa,usateilnomeutentesucuiavetefattoclicquandoavetesalvatoilfileditesto.Peresempio,seilnomeutenteeragiacomo,ilparametrodiopendovràesserescrittoinquestomodo:

SCRIVERENEIFILEL’oggettofilerestituitodaopenhaaltrefunzioni,oltrearead.Possiamocreareunnuovofilevuotousandounsecondoparametro,lastringa'w',quandochiamiamolafunzione:

Ilparametro'w'diceaPythonchevogliamoscriverenell’oggettofile,anzichéleggereisuoicontenuti.

Adessopossiamoaggiungeredelleinformazioniinquestonuovofile,mediantelafunzionewrite(“scrivi”):

Ilnumerochecomparenellarigasuccessivaèilnumerodeicaratterichesonostatiscrittinelfile.

Infine,dobbiamodireaPythoncheabbiamofinitodiscriverenelfile,utilizzandolafunzioneclose:

Page 136: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ora,seapriteilfileconilvostrotexteditor,vedretechecontieneiltesto“Checosaègrandeerumoroso?Unaranaurlatrice!”.Oppure,poteteusarePythonperleggerlo:

CHECOSAAVETEIMPARATOInquestocapitolo,aveteimparatoaconoscerelefunzioniinternediPython,comefloateint,chepossonoconvertirenumericonilpuntodecimaleininterieviceversa.AvetevistoanchecomelafunzionelenpossarenderepiùfaciliicicliecomesipossausarePythonperaprirefileperleggerneicontenutioperscriverequalcosaallorointerno.

ROMPICAPODIPROGRAMMAZIONEProvatearealizzaregliesempiseguenti,persperimentarelefunzioniinternediPython.Trovatelerisposteall’indirizzohttp://python-for-kids.com/.

1.ILCODICEMISTERIOSOQualesaràilrisultatodell’esecuzionediquestocodice?Provatearicostruirloamente,poieseguiteilcodicepervedereseavetetrovatolarispostagiusta.

2.ILMESSAGGIONASCOSTO

Page 137: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Provateausaredirehelpperscoprirecomesuddividereunastringainparole,poicreateunprogramminoperstampareunaparolasìeunanodellastringaseguente,partendoconlaprimaparola(questo):

3.COPIAREUNFILECreateunprogrammainPythonpercopiareunfile.(Suggerimento:doveteaprireilfilechevoletecopiare,leggerloepoicreareunnuovofile,lacopia.)Verificatecheilvostroprogrammafunzionivisualizzandosulloschermoicontenutidelnuovofile.

Page 138: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

••

Questocodicegeneraunastellaaottopunte:

Ilcodiceinséèmoltosimileaquelloperdisegnareilquadrato,conqualcheeccezione:

Anzichéeseguireilcicloquattrovolte,conrange(1,5),loesegueottovolteconrange(1,9).Anzichéavanzaredi50pixel,latartarugaavanzadi100.Anzichéruotaredi90gradi,latartarugaruotadi225gradiasinistra.

Proviamoasviluppareancoraunpo’lanostrastella.Utilizzandounangolodi175gradiepercorrendoilciclo37volte,possiamocreareunastellaconunnumeroancoramaggioredipunte:

Eccoilrisultato:

Page 139: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Restandointemadistelle,eccocomeprodurreunastella“aspirale”:

Modificandol’angolodirotazioneeriducendoilnumerodeicicli,latartarugadisegnauntipodistellamoltodiverso:

Utilizzandouncodicesimile,possiamocrearevarieforme,daunsemplicequadratoaunastellaaspirale.Comepotetevedere,grazieaiciclifor,abbiamoresomoltopiùsempliceildisegnodiquesteforme.Senzaicicli,sarebbestatonecessarioscrivereunagranquantitàdicodicenoiosamenteripetitivo.

Ora,proviamoausareunenunciatoifpercontrollarelarotazionedella

Page 140: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

tartarugaedisegnareun’altravariantedistella.Inquestoesempio,vogliamochelatartarugaruotidiuncertoangololaprimavolta,poidiunangolodiversolavoltasuccessiva.

Quiabbiamocreatounciclo,chevieneeseguito18volte(range(1,19))ediceallatartarugadispostarsiinavantidi100pixel(t.forward(100).Aquestopuntoarrival’enunciatoifx%2==0,checontrollaselavariabilexcontieneunnumeropari,utilizzandounoperatoremodulo,indicatodalsimbolo%nell’espressionex%2==0,chesostanzialmentesignifica“xmod2”èugualea0.

L’operatoremodulodàilrestodelladivisionediduenumeri,inquestocasoilrestodelladivisionedelvalorecontenutonellavariabilexper2.Peresempio,sedividessimo5pallineinduegruppi,otterremmoduegruppidi2pallineperuntotaledi4palline)eunrestocostituitoda1pallina:

Sedividessimo13pallineindueparti,otterremmoduegruppidi6pallineconilrestodi1pallina:

Page 141: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Quandocontrolliamoseilrestoèugualeazero,dopoaverdivisoper2,sostanzialmentecichiediamosesiapossibiledividereilvalorecheciinteressainduepartisenzaresto.Questoèunmetodoelegantepersapereseilnumerocontenutoinunavariabileèpari:ladivisioneper2diunnumeroparidàsempreresto0,mentreladivisioneper2diunnumerodisparidàsempreresto1(diversodazero).

Nellaquintarigadelnostrocodice,diciamoallatartarugadiruotareasinistradi175gradi(t.left(175))seilnumeroinxèpari(ifx%2==0:);altrimenti(else),nell’ultimariga,lediciamodiruotaredi225gradi(t.left(225)).

Eccoilrisultato:

DISEGNAREUN’AUTOLatartarugapuòfaremoltopiùchedisegnarestelleesempliciformegeometriche.Nelprossimoesempio,disegneremoun’auto,siapurediformaunpo’rozza.

Page 142: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Prima,disegniamoilcorpodellavettura.InIDLE,selezionateFile>NewFile,poiinseritenellanuovafinestraquestocodice:

Poi,disegniamolaprimaruota.

Infine,lasecondaruota:

SelezionateFile>SaveAsedatealfileunnomecomeauto.py.SelezionatepoiRun>RunModuleperprovareilcodice.Edeccolavostraauto:

Page 143: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

••••

Avreteprobabilmentenotatochenelnostrocodiceècomparsaqualchenuovafunzione:

colorèusatapercambiareilcoloredellapenna.begin_filleend_fillsiusanoperriempiredicoloreun’areadellatela.circledisegnauncerchiodiunaparticolaredimensione.setheadingfaruotarelatartarugainmodochepuntiinunacertadirezione.

Diamoun’occhiataacomesipossonousarequestefunzioniperaggiungereunpo’dicoloreaidisegni.

COLORARELafunzionecolorprendetreparametri.Ilprimospecificalaquantitàdirosso,ilsecondolaquantitàdiverde,ilterzolaquantitàdiblu.Peresempio,peravereun’autodiunrossoacceso,abbiamousatocolor(1,0,0),chediceallatartarugadiusareunapennarossaal100percento.

Lacombinazionedirosso,verdeebluperotteneretuttiicoloriprendeilnomediRGB(dall’inglesered,green,blue).Èilmodoincuisonorappresentatiicolorisuimonitorelediversecombinazionidiquesticoloriprimariproduconoaltricolori,comequandosimescolanovernicibluerosseperottenereilviolaogialleerosseperottenerel’arancione.Icolorirosso,verdeeblusonochiamatiprimariperchénonsipossonootteneremescolandoaltricolori.

Page 144: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Anchesenonusiamoverniciquandocreiamocolorisuunmonitor(usiamolaluce),puòessereutilepensarequeste“ricette”RGBcomeformatedatrelattedivernice,unarossa,unaverdeeunablu.Ognilattinaèpienaeallalattinapienaattribuiamounvalore1(o100percento).Poimescoliamotuttalavernicerossaetuttaquellaverdeinuncontenitore,ottenendoilgiallo(1e1,100percentodiciascuncolore).

Torniamoalmondodelcodice.Perdisegnareuncerchiogialloconlatartaruga,dovremmousareil100percentodivernicerossaediverniceverde,manienteblu,così:

Laterna1,1,0nellaprimarigarappresentail100percentodirosso,il100percentodiverdeelo0percentodiblu.Nellarigasuccessiva,diciamoallatartarugadiriempireconquestocoloreRGBleformechedisegna(t.begin_fill),poididisegnareuncerchiocont.circle.Nell’ultimariga,end_filldiceallatartarugadiriempireilcerchioconilcoloreRGB.

UNAFUNZIONEPERUNCERCHIOPIENOPerfacilitarcilasperimentazioneconvaricolori,creiamounafunzionedalcodiceutilizzatoperdisegnareuncerchiopieno.

Possiamodisegnareuncerchiodicoloreverdebrillanteutilizzandosololaverniceverde,conquestocodice:

Oppurepossiamodisegnareuncerchiodiverdepiùscurousandosolometàdellaverniceverde(0.5):

Page 145: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

PergiocareconicoloriRGBsulloschermo,provateadisegnareuncerchioprimaconil100percentoepoiconil50percentodirosso(1e0.5),poiconilsoloblu,al100epoial50percento:

NOTASelatelacominciaaessereunpo’ingombra,usatet.reset()percancellaretuttiivecchidisegni.Ricordateinoltrechepotetespostarelatartarugasenzadisegnarenullautilizzatot.up()peralzarelapenna,perpoiriabbassarlacont.down().

Variecombinazionidirosso,verdeebluprodurrannotanticoloridiversi,comeilcolororo:

Questoèunrosa:

Edeccoduediversesfumaturediarancione:

Provatearealizzareicolorichepreferite!

CREAREUNBIANCOENEROPUROChecosasuccedequandosispengonotuttelelucilasera?Tuttodiventanero.Lostessosuccedeconicoloridiuncomputer.Nessunalucesignificanessuncolore,cosìuncerchiocon0pertuttiicoloriprimaririsulteràriempitodinero:

Page 146: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Eccoilrisultato:

Succedeilcontrariosesiusail100percentodituttietreicolori:inquelcaso,siottieneilbianco.Scrivetequestaistruzione,percancellareilcerchionero:

UNAFUNZIONEPERDISEGNAREQUADRATIAbbiamovistochesiriempionodicoloreleformedicendoallatartarugadiiniziareilriempimentoconbegin_fill,epoileformevengonoriempitequandosiusalafunzioneend_fill.Orafacciamoqualchealtroesperimentoconleformeeiriempimenti.Usiamolafunzionechedisegnaquadrati(vistaall’iniziodelcapitolo)elepassiamoillatodelquadratocomeparametro.

Provatelafunzionechiamandolaconunlatodi50pixel:

Page 147: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Questoprodurràunpiccoloquadrato:

Oraproviamoconlatidimisuradiversa.Creiamocinquequadraticonsecutividilato25,50,75,100e125.

Questiquadratisarannofattiinquestomodo:

DISEGNAREQUADRATIPIENIPerdisegnareunquadratopieno,bisognaprimareinizializzarelatela,iniziareilriempimentoepoichiamaredinuovolafunzionequadrato,conquestocodice:

Page 148: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Vedreteunquadratovuoto,finoachenonfiniteilriempimento:

Cambiamoquestafunzione,inmodopoterdisegnarequadratipieniovuoti.Abbiamobisognodiunaltroparametro,eilcodicediventaunpo’piùcomplesso:

Nellaprimariga,cambiamoladefinizionedellafunzione,inmodocheprendadueparametrilatoepieno.PoivediamoseilvaloredipienoèTrue,conifpieno==True.Seloè,chiamiamobegin_fill,perdireallatartarugadiriempirelaformachedisegneremo.Poieffettuiamoperquattrovolte(forxinrange(1,5))ilcicloperdisegnareiquattrolatidelquadrato(procedendoinavantieasinistra),primadiverificaredinuovosepienoèTrueconifpieno=True.Seloè,completiamoilriempimentocont.end_fill()elatartarugariempiedicoloreilquadrato.

Orapossiamodisegnareunquadratopienoconquestocodice:

Oppurepossiamocreareunquadratovuotoconquesto:

Page 149: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Dopoquesteduechiamateallafunzionemioquadrato,siottienequestaimmagine,chesembraunpo’unocchioquadrato.

Ovviamentenoncisifermaqui:èpossibiledisegnareeriempiredicoloreognitipodiforma.

DISEGNARESTELLEPIENEComeultimoesempio,aggiungeremounpo’dicoloreallastellacheabbiamodisegnatoprima.Ilcodiceoriginaleeraquesto:

Suquestabase,costruiamooraunafunzionemiastella.Useremoglienunciatiifdellafunzionemioquadratoeaggiungeremoilparametrolato.

Nelleprimeduerighediquestafunzione,verifichiamosepienoèTrue,eseloèiniziamoilriempimento.Verifichiamoancoranelleultimeduerighee,sepienoèTrue,concludiamoilriempimento.Comenellafunzionemioquadrato,passiamoillatodellastellanelparametrolatoeusiamoquelvalorequandochiamiamot.forward.

Page 150: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Orareinizializziamoilcanvas,impostiamoilcoloreadorato(90percentodirosso,75percentodiverdee0percentodiblu),poichiamiamolafunzione.

Latartarugadisegneràlastellacolorata:

Peraggiungereuncontornoallastella,possiamocambiareilcoloreinneroeridisegnarelastellasenzariempimento:

Eoraabbiamounastelladorataconuncontornoinnero:

CHECOSAAVETEIMPARATO

Page 151: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Inquestocapitolo,aveteimparatocomeusareilmoduloturtleperdisegnarealcuneformegeometrichedibase,medianteicicliforeglienunciatiifpercontrollarequellochefalatartaruga.Abbiamomodificatoilcoloredellapennaeriempitoleformedisegnate.Abbiamoancheriusatoilcodicedidisegnopercrearealcunefunzionichesemplificanoildisegnodiformeconcoloridiversiconun’unicachiamataaunafunzione.

ROMPICAPODIPROGRAMMAZIONENegliesperimentiseguenti,dovretedisegnarequalcheformaconlatartaruga.Comesempre,lesoluzionisipossonotrovareall’indirizzohttp://python-for-kids.com.

1.DISEGNAREUNOTTAGONOInquestocapitoloabbiamodisegnatostelle,quadratierettangoli.Checosaneditedicreareunafunzionechedisegniunaformaaottolati,comeunottagono?(Suggerimento:provateafarruotarelatartarugadi45gradi.)

2.DISEGNAREUNOTTAGONOPIENO

Page 152: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Oracheaveteunafunzionechedisegnaunottagono,modificatelainmodochedisegniunottagonopieno.Provateadisegnareunottagonoconuncontorno,comeabbiamofattoconlastella.

3.UN’ALTRAFUNZIONEPERDISEGNARESTELLECreateunafunzioneperdisegnareunastellacheprendadueparametri:illatoeil

numerodellepunte.L’iniziodellafunzionesaràanalogoaquesto:

Page 153: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

IMPOSTAREILCOLOREDiamounpo’dicoloreallanostragrafica.Modifichiamolafunzionerandom_rectangleinmododapassarleuncoloreperilrettangolocomealtroparametro(fill_color).Inseritequestocodiceinunnuovofileesalvateloconilnomecolorrect.py:

Lafunzionecreate_rectangleoraprendeunparametrofill_color,chespecificailcoloredausareneldisegnareilrettangolo.

Possiamopassareallafunzioneicoloripernome,comenell’esempiochesegue(utilizzandounateladi400pixelper400pixel)inmododacreareunaseriedirettangolidicolorediverso.Sevoleteprovarequestoesempio,potetecopiaree

Page 154: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

incollareperevitarediriscriveremoltevolteglistessicaratteri.Selezionateiltestodacopiare,premeteCTRL+Cpercopiarlo,fateclicsuunarigavuotaepremeteCTRL+Vperincollare.Scrivetelaprimariga,poilacopiate,laincollateemodificatesololapartechevaria.Aggiungetequestocodiceacolorrect.py,subitosottolafunzione):

Moltidiquesticoloriindicatipernomevisualizzerannoicoloricheviaspettate,maaltripotrebberoprodurreunmessaggiodierrore(asecondacheusiateWindows,MacOSXoLinux).

Masevolessimouncolorespecialechenonhaunnome?RicordatedalCapitolo11cheabbiamoimpostatoilcoloredellapennadellatartarugausandopercentualideicolorirosso,verdeeblu.Impostarelaquantitàdiciascuncoloreprimario(rosso,verdeeblu)perottenereunacombinazionedicoloreintkinterèleggermentepiùcomplicato.

Lavorandoconilmoduloturtleabbiamocreatoilcoloredoratousandoil90percentodirosso,il75percentodiverdeenienteblu.Intkinter,sipuòcrearelostessocolorecosì:

Ilsegno#(cancellettoodiesis)davantialvaloreffd800diceaPythonchequellochesegueèunnumeroesadecimale.L’esadecimaleèunsistemadirappresentazionedeinumeriutilizzatocomunementenellaprogrammazioneinformatica.Usaunabase16(comesimbolisiusanolecifreda0a9equindileletteredaAaF)anzichélabase10(simbolilecifreda0a9)delsistemadecimale.Senonaveteancorastudiatolebasiinmatematica,bastasappiatechesipuòconvertireunnormalenumerodecimaleinesadecimaleutilizzandounsegnapostodiformatoinunastringa:%x(tornateavedere“Incorporarevalorinellestringhe”apagina30).Peresempio,perconvertireilnumerodecimale15inesadecimale,potetefarecosì:

Peresseresicuricheilnostronumeroabbiaalmenoduecifre,possiamomodificareleggermenteilsegnapostodiformatoinquestomodo:

Page 155: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ilmodulotkintermetteadisposizioneancheunmodofacileperottenereunvaloreesadecimaleperuncolore.Provateadaggiungerequestocodiceacolorrect.py(poteteeliminarelealtrechiamateallafunzionerandom_rectangle).

Viverràpresentataunafinestraperlasceltadelcolore.

Se,anzichédafile,dateilcomandodallashell,selezionateuncoloreefateclicsuOK,verràvisualizzataunatupla,checontieneunatuplacontrenumerieunastringa:

Itrenumerirappresentanolequantitàdirosso,verdeeblu.Intkinter,laquantitàdiciascuncoloredausareinuncolorecompostoèrappresentatadaunnumerocompresofra0e255(cheèdiversodall’usareunapercentualeperciascuncoloreprimarioconilmoduloturtle).Lastringanellatuplacontienelaversioneesadecimalediquestitrenumeri.

Potetecopiareeincollareilvalorestringadautilizzareoppurememorizzarelatuplacomeunavariabile,poiusarel’indiceposizionaledelvaloreesadecimale.

Proviamoausarelafunzionerandom_rectanglepervederecomefunziona:

Edeccoilrisultato:

Page 156: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

DISEGNAREARCHIUnarcoèunaporzionedicirconferenzaodiqualchealtracurva,maperpoternedisegnareunocontkinter,bisognadisegnarloall’internodiunrettangoloconlafunzionecreate_arc,peresempiocosì:

Seavetechiusotuttelefinestretkinter,oaveteriavviatoIDLE,ricordatedireimportaretkinterediricrearelatela:

Questocodiceposizionailverticesuperioresinistrodelrettangolocheconterràl’arcoallecoordinate(10,10),cioèa10pixeldallatosinistroea10pixeldallatosuperioredellafinestra,eilverticeinferioredestroallecoordinate(200,100).Il

Page 157: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

parametrosuccessivo,extent,siusaperspecificareigradidell’arco.RicordatedalCapitolo4cheigradisonounmodopermisurareladistanzapercorsasuunacirconferenza.Eccodueesempidiarchi,checorrispondonoaunospostamentorispettivamentedi90edi270gradisuunacirconferenza:

Ilcodiceseguentedisegnadiversiarchi,inmodochepossiatevederechecosasuccedeutilizzandounnumerodigradidiversoconlafunzionecreate_arc.

NOTANell’ultimocasoabbiamousato359gradianziché360,perchépertkinter360è

Page 158: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

ugualea0gradi,eseavessimousato360nonavrebbedisegnatonulla.

DISEGNAREPOLIGONIUnpoligonoèunafigurachiusacontreopiùlati.Esistonopoligoniregolaricometriangoli,quadrati,rettangoli,pentagoni,esagoniecosìvia,eanchepoligoniirregolariconlatidiversi,moltipiùlati,eformestrane.

Perdisegnarepoligonicontkinter,bisognadarelecoordinatediciascunpuntodelpoligono.Eccocomesipuòdisegnareuntriangolo:

L’esempiodisegnauntriangolopartendodallecoordinatexey(10,10),perpoipassareallecoordinate(100,10)efinirein(100,110).Quiadestrasivedeilrisultato.

Possiamoaggiungereunaltropoligonoirregolare(unaformaconangoliolatidiversi)conquestocodice:

Quisiparteconlecoordinate(200,10),poisipassaa(240,30),poia(120,100)einfinea(140,120).Tkinterdisegnaautomaticamentel’ultimolato,checongiungeilpuntoindicatodall’ultimacoppiadicoordinateconquelloindicatodallaprimacoppia.Edeccoilrisultatodell’esecuzionediquestocodice:

Page 159: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

VISUALIZZARETESTOOltreadisegnareforme,sipuòanchescriveresulcanvasconlafunzionecreate_text.Questafunzioneprendesoloduecoordinate(leposizionixeydeltesto),insiemeconilparametropernomedeltestodavisualizzare.Nelcodicechesegue,creiamolatela,poivisualizziamounafraseallecoordinate(150,100).Salvateloinunfileconilnometesto.py.

Lafunzionecreate_textprendeanchealcunialtriparametriutili,comeuncolorediriempimentodeltesto.Nelcodicechesegue,chiamiamolafunzionecreate_textconlecoordinate(130,120),iltestochevogliamovisualizzareeuncolorediriempimentorosso.

Sipuòanchespecificarelafont(iltipodicarattereusatopervisualizzareiltesto)comeunatuplaconilnomedellafonteilcorpo(dimensione)deltesto.Peresempio,latuplaperilTimescorpo20è('Times',20).Nelcodiceseguente,visualizziamoiltestovoltaavoltainTimescorpo15,Helveticacorpo20,Couriercorpo20epoi26.

Edeccoilrisultatodiquestefunzioniconletrefontspecificateelediverse

Page 160: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

dimensioni:

VISUALIZZAREIMMAGINIPervisualizzareun’immaginesuunatelacontkinter,comeprimacosasidevecaricarel’immagineepoiusarelafunzionecreate_imagesull’oggettocanvas.

QualsiasiimmaginesicarichideveessereinunadirectoryaccessibileaPython.Perquestoesempio,abbiamomessolanostraimmaginetest.gifnelladirectoryC:\,cheèladirectoryradice(quellafondamentale)dell’unitàdiscoC:,mavoipotetemetterladovevolete.

Page 161: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

SeusateunsistemaMacoLinux,potetemetterel’immaginenelladirectoryHome.Senonriusciteasalvaredeifilenell’unitàC:,potetemetterel’immaginesuldesktop.

NOTAContkinter,sipossonocaricaresoloimmaginiGIF,cioèfilediimmagineconestensione.gif.Potetevisualizzareanchealtritipidiimmagini,peresempioPNG(.png)eJPG(.jpg),madovreteusareunaltromodulo,peresempiolaPythonImagingLibrary(http://www.pythonware.com/products/pil/).

Possiamovisualizzarel’immaginetest.gifinquestomodo:

Nelleprimequattrorighe,impostiamolatelacomenegliesempiprecedenti.Nellaquintariga,l’immaginevienecaricatanellavariabilemia_immagine.CreiamoPhotoImageconladirectory'c:\\test.gif'.SeavetesalvatolaPhotoImagesuldesktop,dovetecrearelaPhotoImageindicandoquellaposizione,chesaràqualcosadisimileaquesto:

Unavoltachel’immagineèstatacaricatanellavariabile,canvas.create_image(0,0,anchor=NW,image=mia_immagine)lavisualizzaconlafunzionecreate_image.Lecoordinate(0,0)sonoquelledelpuntoapartiredalqualeverràvisualizzatal’immagineeanchor=NWdiceallafunzionediusarel’angolosuperioresinistro(NWstaper“nord-ovest”)dell’immaginecomepuntodipartenzaneldisegnarla(altrimentiuserebbeilcentrodell’immaginecomepuntodipartenza,perimpostazionepredefinita).L’ultimoparametropernome,image,puntaallavariabileperl’immaginecaricata.Eccoilrisultato:

Page 162: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

CREAREUN’ANIMAZIONEDIBASEAbbiamovistofinquicomecrearedisegnistatici,cioèimmaginichenonsimuovono.Eseprovassimoacreareun’animazione?

L’animazionenonènecessariamenteunaspecialitàdelmodulotkinter,mapuòcomunqueessereutileperqualcosadisemplice.Peresempio,possiamocreareuntriangolopienoepoifarlomuoverelungoloschermoconilcodiceseguente(nondimenticate:selezionateFile>NewFile,salvateillavoro,poieseguiteilcodiceconRun>RunModule):

Quandoeseguitequestocodice,iltriangolocominceràamuoversisulloschermo,finoallafinedelsuopercorso:

Page 163: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Comefunziona?Comeprima,nelleprimetrerigheabbiamoimportatotkinterevisualizzatouncanvas.Nellaquartariga,abbiamocreatoiltriangoloconquestafunzione:

NOTAQuandoinseritequestariga,sulloschermoverràstampatounnumero:èunidentificatoredelpoligono.Losipuòusareperfareriferimentoallafigura,comevedremonell’esempioseguente.

Poiabbiamocreatouncicloforchecontada0a59,partendodaforxinrange(0,60):.Ilbloccodicodicenelciclofaspostareiltriangolo.Lafunzionecanvas.movespostaqualsiasioggettosiastatodisegnatoaggiungendodeivaloriallesuecoordinatexey.Peresempio,concanvas.move(1,5,0)spostiamol’oggettoconID1(l’identificatoredeltriangolo)di5pixelversodestraedi0pixelversoilbasso.Perriportarloallaposizioneprecedente,potremmousarelafunzioneconunvalorenegativo,canvas.move(1,-5,0).

Lafunzionetk.update()costringetkinteradaggiornareloschermo(ridisegnarlo).Senonavessimousatoupdate,tkinteravrebbeaspettatolaconclusionedelcicloprimadispostareiltriangolo,ilchesignificachel’avrestevistosaltareallaposizionefinale,anzichéspostarsiprogressivamente.Larigafinaledelciclo,time.sleep(0.05),diceaPythondiaspettareunventesimodisecondo(0,05secondi),primadiprocedere.

Perfarspostareiltriangolodiagonalmentesulloschermo,possiamomodificareilcodicechiamandomove(1,5,5).Createunnuovofile(File>NewFile)perquestocodice:

Page 164: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Questocodiceèdiversodalprecedenteperdueaspetti:

Abbiamocreatounateladialtezza400,anziché200pixel,concanvas=Canvas(tk,width=400,height=400).Sommiamo5allecoordinatexeydeltriangoloconcanvas.move(1,5,5).

Unavoltasalvatoilcodice,lopoteteeseguire,edeccolaposizionedeltriangoloallafinedelciclo:

Perfarspostareiltriangolodiagonalmentedaquestaposizioneaquelladipartenza,usategliincrementinegativi-5,-5.Aggiungetequestocodiceallafinedelfile:

FARREAGIREUNOGGETTOPossiamofareinmodocheiltriangoloreagiscaquandoqualcunopremeuntasto,utilizzandoglieventbinding(collegamentiaeventi).Glieventisonocosechesiverificanomentreunprogrammaèinesecuzione:qualcunomuoveilmouse,preme

Page 165: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

untastoochiudeunafinestra.Sipuòdireatkinterdifareattenzioneaquestieventie,quandoseneverificauno,dirispondereinqualchemodo.

Percominciareagestireglieventi(cioèperfarfarequalcosaaPythonquandosiverificaunevento),creiamoprimaunafunzione.Lapartedicollegamento(binding)arrivaquandosidiceatkintercheunaparticolarefunzioneèlegata(oassociata)auneventospecifico;inaltreparole,verràchiamataautomaticamentedatkinterpergestirequell’evento.

Peresempio,perfaresìcheiltriangolosimuovaquandosipremeiltastoINVIO,possiamodefinirequestafunzione:

Lafunzioneprendeununicoparametro(event),chetkinterusaperinviareinformazioniallafunzioneinmeritoall’evento.Oradiciamoatkinterchequestafunzionedeveessereusataperunparticolareevento,utilizzandolafunzionebind_allsulcanvas.Ilcodicecompletoèquesto:

Ilprimoparametrodiquestafunzionedescrivel’eventoacuivogliamochetkinterfacciaattenzione.Inquestocaso,sichiama<KeyPress-Return>,ovvero“pressionedeltastoINVIOORETURN”.DiciamoatkinterchelafunzionemovetriangledeveesserechiamataognivoltachesiverificaquestoeventoKeyPress.Eseguitequestocodice,fateclicsulcanvasconilmouse,poiprovateapremereINVIO.

Esevolessimocambiareladirezionedeltriangoloinbaseaitastipremuti,peresempioitastifreccia?Nonèdifficile.Bastamodificarelafunzionemovetriangleinquestomodo:

Page 166: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

L’oggettoeventpassatoamovetrianglecontienediversevariabili.Unaèkeysym(abbreviazionedikeysymbol,simbolodeltasto),unastringacontenenteilvaloredeltastopremuto(Upèlafrecciaversol’alto,Downquellaversoilbasso,LefteRightsinistraedestra).Larigaifevent.keysym=='Up':dicecheselavariabilekeysymcontienelastringa'Up'dobbiamochiamarecanvas.moveconiparametri(1,0,-3),comefacciamonellarigasuccessiva.Sekeysymcontiene'Down',lacondizioneelifevent.keysym=='Down':saràveraeverràchiamatalafunzioneconiparametri(1,0,3),ecosìvia.

Ricordate:ilprimoparametroèilnumeroidentificativodellaformadisegnata,ilsecondoèilvaloredasommareallacoordinatax,ilterzoilvaloredasommareallacoordinatay.

Poidiciamoatkinterdiusarelafunzionemovetrianglepergestireglieventidiquattrodiversitasti(up,down,lefteright).Quidiseguitosivedecomesipresentailcodiceaquestopunto.Perinserirequestocodice,saràtuttopiùfacilesecreateunnuovofile(selezionandoFile>NewFile).Primadieseguireilcodice,salvateilfileconunnomesignificativo,peresempiotriangoloinmoto.py.

Nellaprimarigadellafunzionemovetriangle,controlliamosekeysymcontiene'Up',in 1 .Sesì,spostiamoiltriangoloversol’altoconlafunzionemoveeiparametri1,0,-3,in 2 .Ilprimoèl’identificatoredeltriangolo,ilsecondolospostamentoversodestra(nonvogliamospostarloinorizzontale,perciòè0)eilterzoèlospostamentoversoilbasso(negativo,perchévogliamoandareversol’alto,-3pixel).

Poiverifichiamosekeysymcontiene'Down'in 3 e,sesì,spostiamoiltriangolo

Page 167: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

versoilbasso(di3pixel)in 4 .L’ultimocontrolloèseilvaloreè'Left',in 5 e,sesì,spostiamoiltriangoloversosinistra(-3pixel)in 6 .Selavariabilenoncontienenessunodiquestivalori,l’ultimoelsein 7 spostailtriangoloversodestrain 8 .Orailtriangolosimuoverànelladirezioneindicatadaltastofrecciachevienepremuto.

ALTRIMODIPERUSAREL’IDENTIFICATOREOgnivoltachesiusaunafunzionecreate_delcanvas,comecreate_polygonocreate_rectangle,vienerestituitounidentificatore.Questonumeroidentificativopuòessereutilizzatoconaltrefunzioni,comeabbiamofattoinprecedenzaconlafunzionemove:

Ilproblemaèchecreate_polygonnonrestituiscesempre1.Peresempio,seavetecreatoaltreforme,potrebberestituire2,3oanche100(asecondadelnumerodelleformecheavetecreato).Seperòmodifichiamoilcodiceinmododamemorizzareinunavariabileilvalorerestituito,epoiusiamolavariabile(anzichéfareriferimentosemplicementealnumero1),ilcodicefunzionerà,indipendentementedaqualesiailnumerorestituito:

Lafunzionemovecipermettedispostareoggettisulloschermomedianteilloroidentificatore.Esistonoperòaltrefunzionichepossonomodificareinqualchemodoquelcheabbiamodisegnato.Peresempio,lafunzioneitemconfigdelcanvassipuòusarepermodificarequalcunodeiparametridiunaforma,peresempioicoloridiriempimentoedicontorno.

Supponiamodiavercreatountriangolorosso:

Possiamocambiareilcoloredeltriangoloutilizzandoitemconfig,conl’identificarecomeprimoparametro.Ilcodicecheseguedice:“Cambiainbluilcolorediriempimentodell’oggettoidentificatodalnumeroconservatonella

Page 168: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

variabilemiotriangolo”:

Possiamoanchedareuncolorediversoalcontornodeltriangolo,sempreconl’identificatorecomeprimoparametro:

Piùavanti,vedremocomeapportareulteriorimodificheaundisegno,peresempionasconderloepoirenderlonuovamentevisibile.Questocisaràutile,quandoinizieremoascriveregiochi,nelprossimocapitolo.

CHECOSAAVETEIMPARATOInquestocapitolo,aveteusatoilmodulotkinterperdisegnaresempliciformegeometriche,visualizzareimmaginiesemplicianimazioni.Avetevistocomeusareglieventbindingperfarsìcheidisegnireagiscanoallapressionedeitasti,ilchesaràutilequandoinizieremoaprogrammareungioco.Avetevistocomelefunzionidicreazionediformeintkinterrestituiscanounnumeroidentificativo,utilizzabilepermodificareleformedopochesonostatedisegnate,peresempioperspostarlesulloschermoopermodificarneilcolore.

ROMPICAPODIPROGRAMMAZIONECimentateviconquestiesercizi,persperimentareancoraconilmodulotkintereconqualchesempliceanimazione.Lesoluzionisitrovanosulsitohttp://python-for-kids.com/.

1.RIEMPIRELOSCHERMODITRIANGOLICreateunprogrammacheusitkinterperriempireloschermoditriangoli.Poimodificareilcodicecosìdariempireloschermocontriangolidicoloridiversi.

2.ILTRIANGOLOMOBILE

Page 169: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Modificateilcodicedeltriangolochesimuove(“Creareanimazionisemplici”apagina183)perchésispostisulloschermoprimaadestra,poiinbasso,poiasinistraeinfineversol’altofinoallaposizionedipartenza.

3.LAFOTOCHESIMUOVEProvateavisualizzarecontkinterunafoto.Ricordate:deveessereun’immagineGIF!Riusciteaspostarlasulloschermo?

Page 170: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che
Page 171: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

AGGIUNGERELARACCHETTANonc’èmoltodichedivertirsiconunapallacherimbalza,senonsihanullaconcuicolpirla.Èvenutoilmomentodicreareunaracchetta!

CominciateaggiungendoilcodiceseguentesubitodopolaclasseBall,percreareunaracchetta(laaggiungeretecreandounanuovarigasottolafunzionedrawdellapalla):

IlcodiceaggiuntoèquasiidenticoaquellodellaclasseBall,trannechechiamiamolafunzionecreate_rectangle(anzichécreate_oval)espostiamoilrettangolonellaposizione200,300(200pixeldasinistrae300pixeldall’alto).

Poi,allafinedellistato,createunoggettodellaclassePaddleemodificateilcicloprincipaleinmodochechiamilafunzionedrawdellaracchetta,così:

Page 172: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Seeseguiteilgiocoaquestopunto,dovrestevederelapallacherimbalzaeunaracchettarettangolareimmobile:

SPOSTARELARACCHETTAPerspostarelaracchettaasinistraeadestra,useremoicollegamentiaeventipercollegareitasticonlefreccesinistraedestraanuovefunzionidellaclassePaddle.Quandoilgiocatorepremeiltastofrecciasinistra,lavariabilexverràimpostataa-2(perspostareasinistra);lapressionedeltastofrecciadestraimpostainvecelavariabilexa2(perspostareadestra).

Page 173: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ilprimopassoèaggiungerelavariabiled’oggettoxallafunzione__init__dellaclassePaddle,eunavariabileperlalarghezzadelcanvas,comeabbiamofattoperlaclasseBall:

Oraabbiamobisognodellefunzionipercambiaredirezione,versosinistra(turn_left)eversodestra(turn_right).Leaggiungiamosubitodopolafunzionedraw:

Possiamolegarequestefunzionialtastocorrispondentenellafunzione__init__dellaclasse.Abbiamousatoilcollegamento(binding)in“Farreagireunoggetto”apagina186,inmodochePythonchiamasseunafunzioneallapressionediuntasto.Inquestocaso,leghiamolafunzioneturn-leftdellanostraclassePaddlealtastofrecciasinistraconilnomedievento'<KeyPress-Left>'.Poileghiamolafunzioneturn-rightaltastofrecciadestrausandoilnomedievento'<KeyPress-Right>'.Lafunzione__init__oraèfattainquestomodo:

LafunzionedrawperlaclassePaddleèsimileaquellaperlaclasseBall:

Page 174: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Usiamolafunzionemovedelcanvasperspostarelaracchettanelladirezionedellavariabilexconself.canvas.move(self.id,self.x,0).Poiricaviamolecoordinatedellaracchettapervedereseharaggiuntoilbordosinistroodestrodelloschermoutilizzandoilvaloreinpos.

Anzichérimbalzarecomelapalla,laracchettadevesmetteredimuoversi.Così,quandolacoordinataxdisinistra(pos[0])èminoreougualea0(<=0),impostiamolavariabilexa0conself.x=0.Nellostessomodo,quandolacoordinataxdidestra(pos[2])èmaggioreougualeallalarghezzadelcanvas(>=self.canvas_width),impostiamolavariabilexa0conself-x=0.

NOTASeeseguiteilprogrammaora,dovretefareclicsulcanvasperchéilgiocoriconoscaleazionideitastifreccia.Conilclicilcanvasriceveilfocus,cioè“sa”diaverelaresponsabilitàdireagirequandoqualcunopremeuntastosullatastiera.

SCOPRIREQUANDOLAPALLACOLPISCELARACCHETTAAquestopuntodelnostrocodice,lapallanoncolpiràlaracchetta,mavipasseràattraversocomesefosseunfantasma.Lapalladevesaperequandocolpiscelaracchetta,esattamentecomedevesaperequandocolpisceunodeibordi.

Possiamorisolvereilproblemaaggiungendodelcodiceallafunzionedraw(doveabbiamogiàilcodicechecontrollal’arrivoaibordi),maèmegliospostarequestotipodicodiceinnuovefunzioni,persuddividereiltuttoinpartipiùpiccole.Semettiamotroppocodiceinunostessoluogo(all’internodiunafunzione,peresempio),quelcodicediventapiùdifficiledacapire.Facciamoicambiamentinecessari.

Perprimacosa,modifichiamolafunzione__init__dellapalla,perpoterpassare

Page 175: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

l’oggettopaddlecomeparametro:

Notatechein 1 abbiamomodificatoilparametrodi__init__inmododaincluderelaracchetta.Poi,in 2 ,assegniamoilparametropaddleallavariabiledioggettopaddle.

Avendosalvatol’oggettopaddle,dobbiamomodificareilcodiceconcuicreiamol’oggettoball.Questocambiamentovainfondoalprogramma,subitoprimadelcicloprincipale:

Ilcodicedicuiabbiamobisognopervedereselapallahacolpitolaracchettaèunpo’piùcomplicatodiquelloconcuisicontrollasesonostatiraggiuntiibordi.Chiameremoquestafunzionehit_paddleelaaggiungeremoallafunzionedrawdellaclasseBall,dovevediamoselapallaharaggiuntoilfondodelloschermo:

Comepotetevederenelnuovocodicecheabbiamoaggiunto,sehit_paddlerestituisceTrue,cambiamoladirezionedellapallaimpostandolavariabileya-3conself.y=-3.Nonprovateaeseguireilgiocoaquestopunto:nonabbiamoancoracreatolafunzionehit_paddle.Facciamoloora.

Aggiungetelafunzionehit_paddlesubitoprimadellafunzionedraw.

Page 176: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Comeprimacosa,definiamolafunzioneconilparametropos,in 1 .Questarigacontienelecoordinateattualidellapalla.Poi,in 2 ,otteniamolecoordinatedellaracchettaeleconserviamonellavariabilepaddle_pos.

In 3 ,abbiamolaprimapartedelnostroenunciatoif-then,ediciamo“Seillatodestrodellapallaèmaggioredellatosinistrodellaracchetta,eillatosinistrodellapallaèminoredellatodestrodellaracchetta…”.Qui,pos[2]contienelacoordinataxperl’estremodestrodellapalla,pos[0]contienelacoordinataxdelsuoestremosinistro.Lavariabilepaddle_pos[0]contienelacoordinataxdell’estremosinistrodellaracchetta,paddle_pos[2]contienelacoordinataxdelsuoestremodestro.ildiagrammaseguentemostraquestecoordinatequandolapallastapercolpirelaracchetta.

Lapallastascendendoversolaracchetta,masivedechel’estremodestrodellapalla(pos[2])nonhaancorasuperatol’estremosinistrodellaracchetta(cheèpaddle_pos[0]).

In 4 ,vediamosel’estremoinferioredellapalla(pos[3])èfralapartesuperioredellaracchetta(paddle_pos[1])elasuaparteinferiore(paddlepos[3]).Neldiagrammaseguente,potetevederechel’estremoinferioredellapalla(pos[3])nonhaancoraraggiuntolapartesuperioredellaracchetta(paddle_pos[1]).

Page 177: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Perciò,inbaseallaposizioneattualedellapalla,lafunzionehit_paddlerestituirebbeFalse.

NOTAPerchédobbiamovedereseilpuntoinferioredellapallasitrovafralapartesuperioreequellainferioredellaracchetta?Perchéognivoltachespostiamolapallasulloschermo,lafacciamospostaredi3pixelallavolta.Secontrollassimosemplicementeselapallaharaggiuntolapartesuperioredellaracchetta(pos[1]),potremmogiàaversuperatoquellaposizione.Inquelcasolapallacontinuerebbelungolasuatraiettoriaepasserebbeattraversolaracchettasenzafermarsi.

AGGIUNGEREUNELEMENTODICASUALITÀÈvenutoilmomentoditrasformareilnostroprogrammainungioco,anzichéinunsemplicemovimentodipallaeracchetta.Inungiocodeveesserciunelementodicasualità,unqualchemodopercuiilgiocatorepuòperdere.Nelnostrogioco,cosìcom’è,lapallarimbalzeràpersempre,perciònonc’ènientedaperdere.

Concluderemoilnostrogiocoaggiungendodelcodicechedicecheilgiocosiconcludeselapallacolpisceilfondodelcanvas(inaltreparole,secadeaterra).

Comeprimacosa,aggiungiamolavariabiledioggettohit_bottominfondoalla

Page 178: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

funzione__init__dellaclasseBall:

Poimodifichiamoilcicloprincipale,infondoalprogramma,inquestomodo:

Orailciclocontinuaaverificarehit_bottom,pervedereselapallahacolpitoilfondodelloschermo.Ilcodicecontinueràafarspostarepallaeracchettasoloselapallanonhacolpitoilfondo,comesivedenell’enunciatoif.Ilgiocoterminaquandopallaeracchettasmettonodimuoversi.

L’ultimamodificaènellafunzionedrawdellaclasseBall:

Abbiamomodificatol’enunciatoifinmodochecontrolliselapallahacolpitoilfondodelloschermo(cioèselasuaposizioneèmaggioreougualeacanvas_height).Seècosì,nellarigasuccessiva,impostiamohit_bottomaTrue,anzichémodificareilvaloredellavariabiley,perchénonc’èpiùbisognodifarrimbalzarelapalla,unavoltachehacolpitoilfondodelloschermo.

Seadessoeseguiteilgiocoenonriusciteacolpirelapallaconlaracchetta,ognimovimentosulloschermodovrebbecessare,eilgiocofinirànonappenalapallatoccailfondodelcanvas:

Page 179: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

Ilprogrammacompletoorasaràcomenelcodiceseguente.Seavetedifficoltàafarfunzionareilgioco,confrontatequellocheaveteinseritoconquestocodice.

Page 180: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

CHECOSAAVETEIMPARATOInquestocapitolo,abbiamofinitodicreareilnostroprimogiococonilmodulotkinter.Abbiamocreatoclassiperlaracchettautilizzatanelgiocoeabbiamousatolecoordinateperverificarequandolapallacolpiscelaracchettaoibordidelcanvasdigioco.Abbiamousatoicollegamentiaeventiperlegareitastifrecciasinistraedestraalmovimentodellaracchettaeabbiamousatoilcicloprincipaleper

Page 181: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

chiamarelafunzionedraweanimarelaracchetta.Infine,abbiamomodificatoilcodiceperinserirenelgiocounelementodicasualitàeorailgiocosiconcludequandolapallacolpisceilfondodelcanvas.

ROMPICAPODIPROGRAMMAZIONEPerilmomento,ilnostrogiocoèmoltosemplice.Potetemodificaremoltecose,percreareungiocopiùprofessionale.Provateadarricchireilcodicesecondoisuggerimenticheseguono,poiverificatelevostresoluzionisulsitohttp://python-for-kids.com/.

1.RITARDAREL’AVVIODELGIOCOIlnostrogiocoiniziaunpo’tropporapidamente,ebisognafareclicsulcanvasperchériconoscalapressionedeitastifrecciasullatastiera.Poteteaggiungereunritardoall’avviodelgioco,inmododadarealgiocatoreuntemposufficienteperfareclicsulcanvas?Ancorameglio,riusciteadaggiungereuncollegamentoaeventoperunclicdelmouse,inmodocheilgiocopartasoloinquelmomento?

Suggerimento1:avetegiàaggiuntocollegamentiaeventiperlaclassePaddle:quellopuòessereunpuntodipartenza.

Suggerimento2:ilcollegamentoaeventoperilpulsantesinistrodelmouseèlastringa'<Button-1>'.

2.UNADEGUATO“GAMEOVER”Quandoilgiocofinisce,semplicementetuttosicongela,enonèunmodomoltoamichevoleneiconfrontidelgiocatore.Provateadaggiungereiltesto“GameOver”quandolapallacolpisceilfondodelloschermo.Poteteusarelafunzionecreate_text,mapotrestetrovareutileancheilparametroconnomestate(prendevaloricomenormalehidden,cioè“normale”e“nascosto”).Dateun’occhiataaitemconfigin“Altrimodiperusarel’identificatore”apagina188.Comeulterioresfida,aggiungeteunritardo,perchéiltestononappaiasubito.

Page 182: PYTHON PER RAGAZZI - Verona-Trento per ragazzi_Appunti... · CHI DOVREBBE LEGGERE QUESTO LIBRO Questo libro è per chiunque sia interessato alla programmazione, bambino o adulto che

3.ACCELERARELAPALLASegiocateatennis,sapeteche,quandounapallacolpiscelaracchetta,avoltesiallontanaaunavelocitàsuperioreaquellaconcuièarrivata,asecondadellaforzadelvostrocolpo.Nelnostrogiocolapallaviaggiasempreallastessavelocità,qualunquecosafaccialaracchetta.Provateamodificareilprogramma,inmodochelavelocitàdellaracchettasiatrasferitaallavelocitàdellapalla.

4.REGISTRAREILPUNTEGGIOCheneditediregistrareilpunteggio?Ognivoltachelapallacolpiscelaracchetta,ilpunteggiodeveaumentare.Provateavisualizzareilpunteggionell’angolosuperioredestrodelcanvas.Poteteriguardarecomesiusaitemconfig,apagina188,perricavarneunsuggerimento.