Professional Documents
Culture Documents
fu l l ci rcl e
LA RIVISTA INDIPENDENTE PER LA COMUNIT LINUX UBUNTU
PROGRAMMARE IN PYTHON
VO LU M E 2
" Full Circle Magazine non affiliata n1" sostenuta da Canonical Ltd.
fu l l ci rcl e m a g a zi n e n . 3 1
indice ^
Cos' Full Circle Full Circle una rivista gratuita e indipendente, dedicata alla famiglia Ubuntu dei sistemi operativi Linux. Ogni mese pubblica utili articoli tecnici e articoli inviati dai lettori.
Full Circle
LA RIVISTA INDIPENDENTE PER LA COMUNIT LINUX UBUNTU
Come contattarci
Full Circle ha anche un podcast di supporto, il Full Circle Podcast, con gli stessi argomenti della rivista e altre interessanti notizie.
Gruppo editoriale
Si prega di notare che questa edizione speciale viene fornita senza alcuna garanzia: n chi ha contribuito n la rivista Full Circle hanno alcuna responsabilit circa perdite di dati o danni che possano derivare ai computer o alle apparecchiature dei lettori dall'applicazione di quanto pubblicato.
Buon divertimento!
Capo redattore: Ronnie Tucker (aka: RonnieTucker) ronnie@fullcirclemagazine.org Webmaster: Rob Kerfia (aka: admin / linuxgeekeryadmin@fullcirclemagazine.org Podcaster: Robin Catling (aka RobinCatling) podcast@fullcirclemagazine.org Manager delle comunicazioni: Robert Clipsham (aka: mrmonday) mrmonday@fullcirclemagazine.org
Gli articoli contenuti in questa rivista sono stati rilasciati sotto la licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0. Ci significa che potete adattare, copiare, distribuire e inviare gli articoli ma solo sotto le seguenti condizioni: dovete attribuire il lavoro all'autore originale in una qualche forma (almeno un nome, un'email o un indirizzo Internet) e a questa rivista col suo nome ("Full Circle Magazine") e con suo indirizzo Internet www.fullcirclemagazine.org (ma non attribuire il/gli articolo/i in alcun modo che lasci intendere che gli autori e la rivista abbiano esplicitamente autorizzato voi o l'uso che fate dell'opera). Se alterate, trasformate o create un'opera su questo lavoro dovete distribuire il lavoro risultante con la stessa licenza o una simile o compatibile. Full Circle magazine completamente indipendente da Canonical, lo sponsor dei progetti di Ubuntu, e i punti di vista e le opinioni espresse nella rivista non sono in alcun modo da attribuire o approvati da Canonical.
KRZ0WR
YDOLGR SHU=
FDWHJRULH=
Vyloxssr Judilfd
GLVSRVLWLYL=
FG2GYG
KGG
Zluhohvv
h vrpljoldwh d ph/ dyuhwh qhl yrvwul frpsxwhu xqd sduwh ghood yrvwud pxvlfd suhihulwd lq irupdwr ps61 Txdqgr vl kdqqr phqr gl 41333 iloh slxwwrvwr idfloh ulfrugduh frvd vl srvvlhgh h gryh1 Lr/ g*dowud sduwh/ qh kr prowl gl sl1 Lq xqd ylwd suhfhghqwh hur xq GM h kr frqyhuwlwr od pdjjlru sduwh ghood pld pxvlfd glyhuvl dqql id1 Lo sureohpd sulqflsdoh fkh gryhwwl diiurqwduh ix or vsd}lr vx
wlwror %Forzqv +Wkh Ghplvh ri wkh Hxurshdq Flufxv zlwk Qr Wkdqnv wr Ihoolql,%/ srwhwh vdoyduh vror l sulpl 63 fdudwwhul1 Txhvwr hud iuxvwudqwh shu prowl1 Lq txhvwd h qhood survvlpd Frv/ or %vwdqgdug% LG6 glyhqqh oh}lrqh yhguhpr gl fuhduh xq qrwr frph LG6y4 h ix fuhdwr xq fdwdorjr shu l qrvwul PS61 Fl qxryr irupdwr fkldpdwr/ vriihuphuhpr dqfkh vx dofxql deedvwdq}d lqfuhglelophqwh/ qxryl frqfhwwl s|wkrq qho LG6y51 Lo qxryr irupdwr ulylvlwduh oh qrvwuh frqrvfhq}h shuphwwhyd gl frqvhuyduh ghl gdwdedvh1 lqirupd}lrql yduldelol lq oxqjkh}}d doo*lql}lr gho iloh/ Sulpr/ xq iloh PS6 sx phqwuh lo yhffklr LG6y4 uhvwdyd frqvhuyduh lqirupd}lrql vx vh dood ilqh frv gd wruqduh xwloh vwhvvr1 Lo wlwror ghood fdq}rqh/ shu l ohwwrul sl yhffkl1 Rjjl lo o*doexp/ o*duwlvwd h dowuh frqwhqlwruh shu phwdgdwl sx lqirupd}lrql1 Txhvwh vrqr frqwhqhuh ilqr d 589PE1 frqwhqxwh qhl wdj LG6 h vrqr ulihulwh frph phwdgdwl1 Doo*lql}lr O*lghdoh shu oh vwd}lrql udglr h shu l sd}}rlgl frph ph1 oh lqirupd}lrql fkh srwhydqr Qhoo*LG6y5 fldvfxq juxssr gl hvvhuh frqvhuydwh hudqr olplwdwh1 Ruljlqduldphqwh hudqr lqirupd}lrql frqwhqxwr lq iudph h fldvfxq iudph kd xq frqvhuydwh dood ilqh gho iloh lq lghqwlilfdwlyr1 Lq xqd yhuvlrqh xq eorffr gl 45; e|wh1 D fdxvd lql}ldoh gl LG6y5 o*lghqwlilfdwlyr ghooh glphqvlrql gl txhvwr hud oxqjr wuh fdudwwhul1 Od eorffr hud srvvleloh vdoyduh 63 yhuvlrqh rglhuqd +LG6y517, qh fdudwwhul shu lo wlwror/ lo qrph ghoo*duwlvwd/ h frv yld1 Shu prowl xvd xqr gl txdwwur1 iloh pxvlfdol hud vxiilflhqwh pd Doo*lql}lr hud srvvleloh dsuluh +h txhvwd xqd ghooh plh lo iloh lq prgdolw elqduld h fdq}rql suhihulwh gl vhpsuh, fhufduh oh lqirupd}lrql fkh txdqgr qh dyhwh xqd frq lo gvmm djsdmf nbhb{jof $46 43
Shu od pdjjlru sduwh ol dyhwh ylvwl lq suhfhghq}d1 Txlqgl/ yrjoldpr fuhduh oh lqwhvwd}lrql ghooh qrvwuh ixq}lrql1
def MakeDataBase(): pass def S2HMS(t): pass def WalkThePath(musicpath): pass def error(message): pass def main(): pass def usage(): pass
wudwwd gl xq wuxffr shu xvduh lo qrvwur iloh vld frph xq surjudppd d vh vwdqwh vld frph prgxor ulxwlol}}deloh lpsruwdwr lq xq*dowud dssolfd}lrqh1 Lq sudwlfd glfh %VH txhvwr iloh lo surjudppd sulqflsdoh/ gryuhpr hvhjxluh od urxwlqh pdlq dowulphqwl or xvhuhpr frph xq prgxor gl vxssruwr h oh ixq}lrql vdudqqr fkldpdwh gluhwwdphqwh gd xq dowur surjudppd%1 Txlqgl/ duulffkluhpr od ixq}lrqh xvdjh1 Vrwwr f* o*lqwhur frglfh shu od urxwlqh1 Txl fuhhuhpr xq phvvdjjlr gd prvwuduh doo*xwhqwh fkh dyylhu lo qrvwur surjudppd vhq}d xq sdudphwur qhfhvvdulr shu shuphwwhuqh xq xvr
vwdqgdorqh1 Qrwdwh fkh xvldpr *_q* shu iru}duh xqd qxryd uljd h *_w* shu iru}duh xqd wdexod}lrqh1 Xvldpr dqfkh *(v* shu lqfoxghuh lo qrph ghoo*dssolfd}lrqh frqwhqxwr lq v|v1dujy^3`1 Txlqgl xvldpr od ixq}lrqh huuru shu prvwuduh lo phvvdjjlr/ srl vl hvfh gdoo*dssolfd}lrqh +v|v1h{lw+4,,1 Frqwlqxldpr frq od urxwlqh huuru1 Hffr od yhuvlrqh frpsohwd1
def error(message): print >> sys.stderr, str(message)
fkh yrjoldpr ylvxdol}}duh o*rxwsxw/ r or vwuhdp/ do glvsrvlwlyr vwdqgdug gl rxwsxw/ lq jhqhuh lo whuplqdoh lq xvr1 Shu iduh txhvwr xvldpr +lq prgr wudvsduhqwh, vwgrxw1 Txdqgr yrjoldpr lqylduh xq phvvdjjlr gl huuruh/ xvhuhpr or vwuhdp vwghuu1 Dqfkh txhvwr lo whuplqdoh1 Txlqgl uhlqglul}}ldpr o*rxwsxw door vwuhdp vwghuu1 Rud odyruldpr vxood urxwlqh pdlq1 Txl lpsrvwhuhpr od qrvwud frqqhvvlrqh h lo fxuvruh shu lo qrvwur gdwdedvh/ txlqgl frqwuroohuhpr l qrvwul dujrphqwl sdudphwul gl vlvwhpd h/ vh wxwwr fruuhwwr/ fkldphuhpr od qrvwud ixq}lrqh fkh hvhjxlu lo frpslwr dvvhjqdwroh1 Hffr lo frglfh=
Txl deeldpr xvdwr od frvlghwwd uhgluh}lrqh +%AA%,1 Txdqgr xvldpr od ixq}lrqh %sulqw%/ vwldpr glfhqgr d s|wkrq
Dkkk111xqd frvd qxryd1 Rud deeldpr xqd ixq}lrqh pdlq h xqd ixq}lrqh xvdjh1 D frvd vhuyrqrB Djjlxqjldpr txdofrv*dowur sulpd gl glvfxwhuqh1
if __name__ == '__main__': main()
def usage(): message = ( '==============================================\n' 'mCat - Finds all *.mp3 files in a given folder (and sub-folders),\n' '\tread the id3 tags, and write that information to a SQLite database.\n\n' 'Usage:\n' '\t{0} <foldername>\n' '\t WHERE <foldername> is the path to your MP3 files.\n\n' 'Author: Greg Walters\n' 'For Full Circle Magazine\n' '==============================================\n' ).format(sys.argv[0]) error(message) sys.exit(1)
44
lqglfh a
VwduwIroghu1 Dwwhq}lrqh fkh vh qho shufruvr suhvhqwh xqr vsd}lr/ shu hvhpslr/ +2pqw2pxvlfpdlq2Dgxow Frqwhpsrudu|, l fdudwwhul grsr gl hvvr vdudqqr ylvwl frph xq dowur sdudphwur1 Frv txdqgr xvdwh xq shufruvr frq xqr vsd}lr dvvlfxudwhyl gl lqfoxghuor wud ylujrohwwh1 Txlqgl lpsrvwldpr od frqqhvvlrqh h lo fxuvruh/ fuhldpr lo gdwdedvh h srl hvhjxldpr lo odyrur yhur h sursulr qhood urxwlqh ZdonWkhSdwk h shu ilqluh fklxgldpr lo qrvwur fxuvruh h od frqqhvvlrqh do gdwdedvh h glfldpr doo*xwhqwh fkh deeldpr ilqlwr1 O*lqwhud ixq}lrqh ZdonWkhSdwk sx hvvhuh wurydwd txl= kwws=22sdvwhelq1frp2FhjvD[mZ1 Sulpd fdqfhooldpr l wuh frqwdwrul xvdwl shu whqhuh wudffld gho odyrur idwwr1 Txlqgl dsuldpr xq iloh fkh frqwhuu lo uhjlvwur ghjol huurul qho fdvr yh qh vld elvrjqr1 Txlqgl shufruuldpr ulfruvlydphqwh lo shufruvr lqglfdwr gdoo*xwhqwh1 Lq sudwlfd/ lql}ldpr gdo shufruvr iruqlwr hg hqwuldpr h xvfldpr gdooh vrwwrfduwhooh suhvhqwl/ dood ulfhufd ghl iloh frq hvwhqvlrqh 45
Frph deeldpr idwwr od yrowd suhfhghqwh/ fuhldpr gxh yduldelol joredol fkldpdwh frqqhfwlrq h fxuvru shu lo qrvwur gdwdedvh1 Txlqgl frqwurooldpr l sdudphwul +vh fh qh vrqr, sdvvdwl gdood uljd gl frpdqgr qho whuplqdoh1 Shu txhvwr ulfruuldpr do frpdqgr v|v1dujy1 Vwldpr fhufdqgr gxh sdudphwul/ sulpd lo
qrph ghoo*dssolfd}lrqh/ fkh dxwrpdwlfr/ h txlqgl lo shufruvr ghl qrvwul iloh PS61 Vh l gxh sdudphwul pdqfdqr/ vdowhuhpr dood urxwlqh xvdjh/ fkh vwdpsd lo phvvdjjlr d vfkhupr h srl hvfh1 Lq txhvwr fdvr ulfdgldpr qhood fodxvrod hovh ghood qrvwud lvwul}lrqh LI1 Vxffhvvlydphqwh/ lqvhuldpr lo sdudphwur gho shufruvr lql}ldoh qhood yduldeloh gvmm djsdmf nbhb{jof $46
%1ps6%1 Txlqgl lqfuhphqwldpr lo frqwdwruh ghood fduwhood h srl txhoor ghl iloh shu whqhuh wudffld gho qxphur ghl iloh surfhvvdwl1 Txlqgl sdvvhuhpr lq udvvhjqd fldvfxq iloh1 Fdqfhooldpr od yduldeloh orfdoh fkh frqwlhqh oh lqirupd}lrql gl fldvfxqd fdq}rqh1 Xvldpr od ixq}lrqh mrlq gd rv1sdwk shu fuhduh xq shufruvr h xq qrph gl iloh dssursuldwl frv gd srwhu gluh d pxwdjhq gryh wuryduh lo iloh1 Srl sdvvldpr lo vxr qrph dood fodvvh PS6 ulfhyhqgrqh xqd lvwdq}d gl %dxglr%1 Txlqgl uhfxshuldpr wxwwl l wdj LG6 fkh lo iloh frqwlhqh h vfruuldpr od olvwd dood ulfhufd ghl wdj fkh fl lqwhuhvvdqr h ol dvvhjqdpr dooh qrvwuh yduldelol whpsrudqhh1 Lq txhvwr prgr vl ulgxfrqr do plqlpr jol huurul1 Gdwh xq*rffkldwd do frglfh fkh vl rffxsd gho qxphur ghood wudffld1 Txdqgr pxwdjhq or uhvwlwxlvfh sx hvvhuh xq ydoruh vlqjror/ xq ydoruh frph %724;% r frph bwun^3` h bwun^4` r sx hvvhuh yxrwr1 Xvldpr lo frvwuxwwr wu|2h{fhsw shu fdwwxuduh jol hyhqwxdol huurul1 Rud frqwuroodwh lo frglfh fkh vdoyd l gdwl qho gdwdedvh1 Vwldpr surfhghqgr glyhuvdphqwh ulvshwwr doo*xowlpd yrowd1 Fuhldpr o*lvwux}lrqh VTO
lqglfh a
hvsuhvvd wudplwh xq iordw h od frqyhuwh lq xqd vwulqjd qho irupdwr %Ruh=Plqxwl=Vhfrqgl% rssxuh %Plqxwl=Vhfrqgl%1 Jxdugdwh oh lvwux}lrql uhwxuq1 Dqfrud xqd yrowd/ vwldpr xvdqgr od vlqwdvvl S|wkrq 61{1 Frpxqtxh/ f* txdofrvd gl qxryr lq shqwrod1 Vwldpr xvdqgr wuh vhulh gl vrvwlwx}lrql +3/ 4 h 5,/ pd frvd vrqr l %=35q% grsr l qxphul 4 h 5B Glfh fkh yrjoldpr/ vh qhfhvvdul/ ghjol }hur lql}ldol1 Frv vh xqd fdq}rqh gxud 5 plqxwl h 7 vhfrqgl/ od vwulqjd uhvwlwxlwd vdu %5=37%/ qrq %5=7%1 O*lqwhur frglfh gho qrvwur surjudppd or wurydwh txl= kwws=22sdvwhelq1frp2uIi7Jp:H1 Vfdqgdjoldwh od uhwh h yhghwh frvd srwhwh wuryduh vx Pxwdjhq1 Lo vxr xvr yd rowuh jol PS61
Shu hiloh1zulwholqhv xvldpr sxuh od vlqwdvvl fodvvlfd1 Shu ilqluh gryuhpr frqwurooduh od urxwlqh V5KPV1 Od ixq}lrqh suhqgh od gxudwd ghood fdq}rqh uhfxshudwd gd pxwdjhq hg
Juhj Zdowhuv lo sursulhwdulr ghood Udlq|Gd| Vroxwlrqv/ OOF/ xqd vrflhw gl frqvxohq}d lq Dxurud/ Frorudgr h surjudppd gdo 4<:51 Dpd fxflqduh/ iduh hvfxuvlrql/ dvfrowduh pxvlfd h sdvvduh lo whpsr frq od vxd idpljold1
46
lqglfh a
KRZ0WR
IFP#qq1#5:068#0#S|wkrq#Sduwl#40<
Surjudppduh#lq#S|wkrq#0#Sduwh#43
Od#sulpd#frvd#gd#qrwduh## o*lqghqwd}lrqh1#Lq#uhdow/# o*lqghqwd}lrqh#vl#xvd#vror#shu# frprglw1#Lo#iloh#[PO# ixq}lrqhuheeh#dqfkh#vh#vfulwwr# frv111
<root><node1>Data Here</node1><node2 attribute="something">Node 2 data</node2><node3><node3sub1 >more data</node3sub1></node3></roo t>
Vyloxssr Judilfd
FG2GYG
KGG
XVE#Gulyh Odswrs
Zluhohvv
uredelophqwh#dyhwh#jl# vhqwlwr#lo#whuplqh#[PO1# Srwuhvwh/#shu/#qrq# vdshuh#frvd#vljqlilfd1# [PO#vdu#o*rjjhwwr#ghood#oh}lrqh# gl#txhvwr#phvh1#Jol#relhwwlyl#vrqr= #Idploldul}}duh#frq#lo#frqfhwwr#gl# [PO #Ohjjhuh#h#vfulyhuh#iloh#[PO# wudplwh#l#yrvwul#surjudppl #Suhsduduyl#shu#xq#vxffhvvlyr# sl#lpsruwdqwh#surjhwwr#[PO Frv111#sduoldpr#gl#[PO1#[PO# vwd#shu#H[whqvleoh#Pdunxs#
Odqjxdjh#+olqjxdjjlr# pdufdwruh#hvwhqvleloh,/# dqdorjdphqwh#doo*KWPO1#Ix# surjhwwdwr#shu#frqvhuyduh#h# wudvihuluh#gdwl#hiilfdfhphqwh# dwwudyhuvr#Lqwhuqhw#r#dowuh#ylh#gl# frpxqlfd}lrqh1#[PO## hvvhq}ldophqwh#xq#iloh#gl#whvwr# irupdwwdwr#xvdqgr#sursul#wdj#h# gryuheeh#hvvhuh#deedvwdq}d# dxwr0grfxphqwdqwh1#Hvvhqgr# xq#iloh#gl#whvwr/#sx#hvvhuh# frpsuhvvr#shu#xq#wudvihulphqwr# sl#udslgr#h#idfloh1#Ulvshwwr# doo*KWPO/#[PO#qrq#id#qxood#gd# v1#Qrq#vl#fxud#gl#frph#l#yrvwul# gdwl#ghyrqr#dssduluh1#Frph# ghwwr#srfr#id/#[PO#qrq#reeoljd# dg#dwwhqhuvl#d#wdj#vwdqgdug1# Srwhwh#fuhduqh#gl#yrvwul1 Gldpr#xq*rffkldwd#d#xq# jhqhulfr#iloh#[PO=
<root> <node1>Data Here</node1> <node2 attribute="something">Node 2 data</node2> <node3> <node3sub1>more data</node3sub1> </node3> </root>
shufk#dofxql#vriwzduh#ol# srwuheehur#frqvlghuduh# frpdqgl#r#sursulhw#gl#xq# rjjhwwr1#Lqrowuh/#l#gxh#sxqwl# vrqr#ulvhuydwl#shu#dowur1#Fl#vl# ulihulvfh#dl#wdj#frph#hohphqwl1# Rjql#iloh#[PO## hvvhq}ldophqwh#xq#doehur#0# lql}ld#gd#xqd#udglfh#h#gd#o#vl# vxgglylgh1#Rjql#iloh#[PO#GHYH# dyhuh#xqd#udglfh/#fkh##lo# jhqlwruh#gl#rjql#dowud#frvd#qho# iloh1#Wruqdwh#do#qrvwur#hvhpslr1# Grsr#od#udglfh/#fl#vrqr#wuh# hohphqwl#iljol=#qrgh4/#qrgh5#h# qrgh61#Phqwuh#wxwwl#vrqr#iljol# ghoo*hohphqwr#urrw/#qrgh6## jhqlwruh#gl#qrgh6vxe41 Rud#rvvhuydwh#qrgh51#Qrwdwh# frph#doo*lqwhuqr#ghooh#sduhqwhvl# yl#vld#rowuh#do#vrolwr#gdwr#dqfkh# txdofrvd#fkldpdwr#dwwulexwh1# Rjjljlruqr/#prowl#vyloxssdwrul# hylwdqr#jol#dwwulexwl#srlfk#jol# hohphqwl#vrqr#dowuhwwdqwr# hiilfdfl#h#gdqqr#phqr# sureohpl/#pd#vfrsuluhwh#fkh#jol# dwwulexwl#yhqjrqr#dqfrud# xwlol}}dwl1#Ol#dssurirqgluhpr#d# euhyh1
lqglfh#a
Frqwlqxdqgr/#l#wdj#frqwhqxwl# qhooh#sduhqwhvl#%?A%#ghyrqr# ulvshwwduh#dofxqh#uhjroh1#Sulpr/# ghyrqr#hvvhuh#xqd#sdurod# xqlfd1#Vhfrqgr/#txdqgr#dyhwh# xq#wdj#lql}ldoh#+shu#hvhpslr# ?urrwA,#gryhwh#dyhuh#xq# fruulvsrqghqwh#wdj#gl#fklxvxud1# Txhvwr#wdj#lql}ld#frq#%2%1#L#wdj# vrqr#vhqvlelol#dooh#pdlxvfroh=# ?qrghA/#?QrghA/#?QRGHA#h# ?QrgHA#vrqr#wxwwl#wdj#glyhuvl/# h#txhool#gl#fklxvxud#ghyrqr# fruulvsrqghuh1#L#qrpl#ghl#wdj# srvvrqr#frqwhqhuh#ohwwhuh/# qxphul#h#dowul#fdudwwhul/#pd#qrq# srvvrqr#lql}lduh#frq#xq#qxphur# r#fdudwwhul#gl#sxqwhjjldwxud1# Gryuhvwh#hylwduh#%0%/#%1%#h#%=%#
gvmm#djsdmf#nbhb{jof#$47
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#43
Gldpr#xq*rffkldwd#doo*xwloh# hvhpslr#lq#edvvr1 Txl#deeldpr#o*hohphqwr# udglfh#fkldpdwr#%shrsoh%#fkh# frqwlhqh#gxh#hohphqwl#iljol# fkldpdwl#%shuvrq%1#Fldvfxq# *shuvrq*#kd#9#hohphqwl#iljol=# iluvwqdph/#odvwqdph/#jhqghu/# dgguhvv/#flw|#h#vwdwh1#D#sulpd# ylvwd#srwuhvwh#shqvduh#d#txhvwr# iloh#[PO#frph#d#xq#gdwdedvh# +ulfrugdqgr#oh#xowlph#oh}lrql,/#h# dyuhvwh#udjlrqh1#Lqidwwl/#dofxqh# dssolfd}lrql#xvdqr#l#iloh#[PO# frph#vhpsolfl#vwuxwwxuh# gdwdedvh1#Rud/#vfulyhuh#xq# surjudppd#shu#ohjjhuh#xq#iloh# [PO#srwuheeh#hvvhuh#idwwr# vhq}d#wdqwl#sureohpl1# Vhpsolfhphqwh/#dsuluh#lo#iloh/# ohjjhuh#fldvfxqd#uljd#h/# edvdqgrvl#vxoo*hohphqwr/# wudwwduh#lo#gdwr#h#txlqgl#fklxghuh# lo#iloh#txdqgr#vl##ilqlwr1#Shu#fl# vrqr#vlvwhpl#pljolrul1 Qhjol#hvhpsl#fkh#vhjxrqr/# xvhuhpr#lo#prgxor#gl#oleuhuld# fkldpdwr#HohphqwWuhh1#Srwhwh# uhfxshuduor#gluhwwdphqwh#frq# V|qdswlf#lqvwdoodqgr#s|wkrq0 hohphqwwuhh1#Wxwwdyld#lr#kr# vfhowr#gl#ylvlwduh#lo#vlwr#gl# HohphqwWuhh# +kwws=22hiierw1ruj2grzqordgv2&ho hphqwwuhh,#h#vfdulfduh# gluhwwdphqwh#lo#iloh#vrujhqwh# +hohphqwwuhh0415190 533836491wdu1j},1#Xqd#yrowd# Txdqgr#hvhjxldpr#lo# vfdulfdwr#kr#xvdwr#lo#jhvwruh#gl# surjudppd#gl#whvw/#gryuhppr# sdffkhwwl#shu#hvwuduqh#lo# dyhuh#txdofrvd#gl#vlploh#d#txhoor# frqwhqxwr#lq#xqd#fduwhood# whpsrudqhd1#Vrqr#hqwudwr#qhood# prvwudwr#lq#edvvr#d#ghvwud1 fduwhood#h#kr#hvhjxlwr#%vxgr# Wxwwr#txhoor#fkh#deeldpr# s|wkrq#vhwxs1s|#lqvwdoo%1#Txhvwr# idwwr##vwdwr#shuphwwhuh#d# kd#srvl}lrqdwr#l#iloh#qhood# HohphqwWuhh#gl#dsuluh#lo#iloh/# fduwhood#frpprq#gl#s|wkrq#frv# dqdol}}duor#qhooh#vxh#sduwl#edvh# srvvr#xvduor#vld#lq#s|wkrq#518# fkh#5191#Rud#srvvldpr#lql}lduh#d# hg#hvwuduor#frv#frph##lq# odyruduh1#Fuhdwh#xqd#fduwhood#shu# phpruld1#Srfd#idqwdvld#lq# txhvwr#fdvr1 lo#frglfh#gl#txhvwr#phvh/# frsldwh#lo#frglfh#[PO#gl#vrsud# Rud#vrvwlwxlwh#lo#yrvwur#frglfh# qho#yrvwur#hglwru#gl#whvwr# suhihulwr#h#vdoydwhor# qhood#qxryd#fduwhood# frph# /usr/bin/python -u "/home/greg/Documents/articles/xml/rea %{povdpsoh41{po%1
der1.py"
<people> <person> <firstname>Samantha</firstname> <lastname>Pharoh</lastname> <gender>Female</gender> <address>123 Main St.</address> <city>Denver</city> <state>Colorado</state> </person> <person> <firstname>Steve</firstname> <lastname>Levon</lastname> <gender>Male</gender> <address>332120 Arapahoe Blvd.</address> <city>Denver</city> <state>Colorado</state> </person> </people>
<people> <person> <firstname>Samantha</firstname> <lastname>Pharoh</lastname> <gender>Female</gender> <address>123 Main St.</address> <city>Denver</city> <state>Colorado</state> </person> <person> <firstname>Steve</firstname> <lastname>Levon</lastname> <gender>Male</gender> <address>332120 Arapahoe Blvd.</address> <city>Denver</city> <state>Colorado</state> </person> </people>
gvmm#djsdmf#nbhb{jof#$47
lqglfh#a
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#43
frq#lo#vhjxhqwh=
import elementtree.ElementTree as ET tree = ET.parse('xmlsample1.xml') person = tree.findall('.//person') for p in person: for dat in p: print "Element: %s Data: %s" %(dat.tag,dat.text)
hg#hvhjxlwhor#gl#qxryr1#Rud#lo# yrvwur#rxwsxw#gryuheeh#hvvhuh=
/usr/bin/python -u "/home/greg/Documents/articles /xml/reader1.py" Element: firstname - Data: Samantha Element: lastname - Data: Pharoh Element: gender - Data: Female Element: address - Data: 123 Main St. Element: city - Data: Denver Element: state - Data: Colorado Element: firstname - Data: Steve Element: lastname - Data: Levon Element: gender - Data: Male Element: address - Data: 332120 Arapahoe Blvd. Element: city - Data: Denver Element: state - Data: Colorado
Txlqgl#fldvfxq#gdwr## dffrpsdjqdwr#gdo#qrph#gho# wdj1#Shu#fdsluh#frq#frvd# deeldpr#d#fkh#iduh#srwuhppr# iduh#xqd#vhpsolfh#vwdpsd1# Dqdol}}ldpr#fkh#frvd#deeldpr# uhdol}}dwr1#Deeldpr#idwwr# dqdol}}duh#lo#iloh#d#HohphqwWuhh# fkh#kd#phvvr#lo#ulvxowdwr# qhoo*rjjhwwr#wuhh1##Txlqgl# deeldpr#fklhvwr#d#HohphqwWuhh# gl#wuryduh#wxwwh#oh#rffruuhq}h#gl# shuvrq1#Qhoo*hvhpslr#idwwr#fh#qh# vrqr#gxh#pd#srwuheehur#hvvhuh# 4#r#43331#Shuvrq##iljolr#gl# shrsoh#h#qrl#vdssldpr#fkh# txhvw*xowlpr##vhpsolfhphqwh# od#udglfh1#Wxwwl#l#qrvwul#gdwl#vrqr# ulsduwlwl#lq#shuvrq1#Txlqgl# deeldpr#fuhdwr#xq#vhpsolfh#
flfor#iru#shu#dqdol}}duh#fldvfxq# rjjhwwr#shuvrq1#Deeldpr#srl# fuhdwr#xq#dowur#flfor#iru#shu# hvwuduuh#l#gdwl#lq#fldvfxq#shuvrq# h#ylvxdol}}duol#prvwudqgr#lo# qrph#ghoo*hohphqwr#+1wdj,#h#lo# gdwr#+1wh{w,1 Rud#xq#hvhpslr#sl#uhdoh1#Od# pld#idpljold#hg#lr#fl#glyhuwldpr# lq#xq*dwwlylw#fkldpdwd# Jhrfdfklqj1#Vh#qrq#vdshwh#frvd# vld#vdssldwh#fkh#vl#wudwwd#gl#xqd# fdffld#do#whvrur#shu#%vhffklrql%# lq#fxl#vl#xvd#xq#glvsrvlwlyr#JSV# sruwdwloh#shu#wuryduh#fl#fkh#xq# dowur#kd#qdvfrvwr1#Vl#sxeeolfdqr# oh#frruglqdwh#JSV#juh}}h#lq#xq# vlwr#zhe/#txdofkh#yrowd#frq# lqgl}l/#vl#lqvhulvfrqr#oh# frruglqdwh#qho#qrvwur#JSV#h#
txlqgl#lql}ld#od#fdffld1#Vhfrqgr# Zlnlshgld#fl#vrqr#rowuh# 413331333#gl#vlwl#dwwlyl#lq#wxwwr#lo# prqgr/#txlqgl#suredelophqwh#fh# qh#vrqr#dofxql#qhood#yrvwud# }rqd1#Lr#qh#xvr#gxh#shu#rwwhqhuh# orfdolw#lq#fxl#fhufduh1#Xqr## kwws=22zzz1jhrfdfklqj1frp2#h# o*dowur##kwws=22qdylfdfkh1frp21# Fh#qh#vrqr#dowul/#pd#txhvwl#gxh# vrqr#txhool#sl#lpsruwdqwl1 Lq#jhqhuh#l#vlwl#gl#jhrfdfklqj# xvdqr#iloh#[PO#shu#oh#orur# lqirupd}lrql1#Fl#vrqr# dssolfd}lrql#fkh#uhfxshudqr# txhvwl#gdwl#h#ol#wudvihulvfrqr#do# glvsrvlwlyr#JSV1#Dofxqh# ixq}lrqdqr#gd#gdwdedvh/# shuphwwhqgryl#gl#whqhuh#wudffld# ghood#yrvwud#dwwlylw/#wdoyrowd#frq#
<?xml version="1.0" encoding="ISO-8859-1"?> <loc version="1.0" src="NaviCache"> <waypoint> <name id="N02CAC"><![CDATA[Take Goofy Pictures at Grapevine Lake Open Cache: Unrestricted Cache Type: Normal Cache Size: Normal Difficulty: 1.5 Terrain : 2.0]]></name> <coord lat="32.9890166666667" lon="-97.0728833333333" /> <type>Geocache</type> <link text="Cache Details">http://www.navicache.com/cgibin/db/displaycache2.pl?CacheID=11436</link> </waypoint> </loc>
by g_phillips
Qdylfdfkh#iloh
lqglfh#a
gvmm#djsdmf#nbhb{jof#$47
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#43
pdssh1#Shu#lo#prphqwr#fl# frqfhqwuhuhpr#qhoo*dqdolvl#ghl# iloh#vfdulfdwl1 frruglqdwh#lq#odwlwxglqh#h# orqjlwxglqh/#lo#wlsr#gl#fdfkh#h#xq# froohjdphqwr#dood#sdjlqd#zhe# frq#xowhulrul#lqirupd}lrql1# Vrqr#dqgdwr#vx#Qdylfdfkh#h# O*hohphqwr#qdph##xqd#vwulqjd# kr#wurydwr#xq#qdvfrqgljolr# oxqjd#frqwhqhqwh#glyhuvh# ghfhqwh#lq#Wh{dv1#Lo#frqwhqxwr# lqirupd}lrql#xwlol#pd#fkh# gho#iloh##prvwudwr#qhood#sdjlqd# greeldpr#dqdol}}duh#qrl#vwhvvl1# suhfhghqwh1 Rud#fuhldpr#xqd#qxryd# dssolfd}lrqh#shu#ohjjhuh#h# Frsldwh#l#gdwl#gdo#er{#h# prvwuduh#lo#iloh1#Fkldpldprod# vdoydwhol#frph#%Fdfkh1orf%1# %uhdgdfdfkh1s|%1#Lql}ldpr# Sulpd#gl#lql}lduh#d# gdoo*lpsruw#h#gdo#sduvh# surjudppduh/#hvdplqldpr#lo#iloh# ghoo*hvhpslr#suhfhghqwh1 fdfkh1 Od#sulpd#uljd#hvvhq}ldophqwh# fl#lqirupd#fkh#vl#wudwwd#gl#xq#iloh# [PO#frqydolgdwr/#txlqgl# srvvldpr#wudqtxloodphqwh# ljqruduod1#Od#uljd#vxffhvvlyd# +txhood#fkh#lql}ld#frq#%orf%,##od# qrvwud#udglfh#h#frqwlhqh#jol# dwwulexwl#%yhuvlrq%#h#%vuf%1# Ulfrugdwh/#kr#jl#ghwwr#fkh# dofxql#iloh#xwlol}}dqr#jol#dwwulexwl1# Qh#dyuhpr#d#fkh#iduh#frq#dowul# survhjxhqgr#qho#iloh1#Gl#qxryr/# od#udglfh#lq#txhvwr#fdvr#sx# hvvhuh#ljqrudwd1#Od#uljd# vxffhvvlyd#iruqlvfh#lo#iljolr# zd|srlqw#+xq#zd|srlqw##lo#oxrjr# gryh/#lq#txhvwr#fdvr/#vl#wuryd#od# fdfkh,1#Rud#uhfxshuldpr#l#gdwl# fkh#fl#lqwhuhvvdqr#gdyyhur1#F*# lo#qrph#ghood#fdfkh/#oh#
import elementtree.ElementTree as ET tree = ET.parse('Cache.loc')
vhjxlwr1
for w1 in w: if w1.tag == "name":
#gdyyhur#xqd#vwulqjd#prowr# oxqjd1#O*lg#ghood#fdfkh##
# Get text of cache name up to the phrase "Open Cache: " CacheName = w1.text[:w1.text.find("Open Cache: ")-1] # Get the text between "Open Cache: " and "Cache Type: " OpenCache = w1.text[w1.text.find("Open Cache: ")+12:w1.text.find("Cache Type: ")-1] # More of the same CacheType = w1.text[w1.text.find("Cache Type: ")+12:w1.text.find("Cache Size: ")-1] CacheSize = w1.text[w1.text.find("Cache Size: ")+12:w1.text.find("Difficulty: ")-1] Difficulty= w1.text[w1.text.find("Difficulty: ")+12:w1.text.find("Terrain : ")-1] Terrain = w1.text[w1.text.find("Terrain : ")+12:]
lqglfh#a
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#43
w1.items(): if name == 'id': CacheID = value
Dyhwh#lpsdudwr#deedvwdq}d# shu#ohjjhuh#od#pdjjlru# elif w1.tag == "coord": sduwh#ghl#iloh#[PO1# if w1.keys(): Frph#vhpsuh/#srwhwh# for name,value in w1.items(): uhfxshuduh#o*lqwhur# if name == "lat": frglfh#gl#txhvwd# Lat = value elif name == "lon": oh}lrqh#vxo#plr#vlwr# Lon = value zhe# elif w1.tag == "type": kwws=22zzz1wkhghvljqdw GType = w1.text hgjhhn1frp1 elif w1.tag == "link": Od#survvlpd#yrowd# xvhuhpr#oh#qrvwuh# frqrvfhq}h#[PO#shu# udffrjolhuh#lqirupd}lrql# gd#xq#phudyljolrvr#vlwr# phwhr#h#prvwuduoh#qho# whuplqdoh1#Exrq# glyhuwlphqwr$
if w1.keys(): for name, value in w1.items(): Info = value Link = w1.text
print print print print print print print print print print print
"Cache Name: ",CacheName "Cache ID: ",CacheID "Open Cache: ",OpenCache "Cache Type: ",CacheType "Cache Size: ",CacheSize "Difficulty: ", Difficulty "Terrain: ",Terrain "Lat: ",Lat "Lon: ",Lon "GType: ",GType "Link: ",Link
gvmm#djsdmf#nbhb{jof#$47
lqglfh#a
KRZ0WR
IFP#qq1#5:069#0#S|wkrq#sduwl#4043
Surjudppduh#lq#S|wkrq#0#Sduwh#44
Dyyldwh#lo#yrvwur#eurzvhu# suhihulwr#h#dsulwh#lo#vlwr# zzz1zxqghujurxqg1frp1#Rud# lqvhulwh#lo#yrvwur#frglfh#srvwdoh#r# od#flww#h#or#vwdwr#+r#sdhvh,#qho# fdpsr#gl#ulfhufd1#Fl#vrqr#prowh# lqirupd}lrql#txl1#Rud/#vdowldpr# dood#sdjlqd#ghoo*DSL=# kwws=22zlnl1zxqghujurxqg1frp2lqg h{1sks2DSLb0b[PO Xqd#ghooh#sulph#frvh#fkh# qrwhuhwh#vrqr#oh#Frqgl}lrql#gl# Xwlol}}r#ghoo*DSL1#Vlhwh#suhjdwl#gl# ohjjhuoh#h#dwwhqhuyl#dg#hvvh1#Qrq# vrqr#rqhurvh#h#vrqr#prowr# vhpsolfl#gd#ulvshwwduh1#Oh#frvh# fkh#fl#lqwhuhvvdqr#vrqr#oh# fkldpdwh#JhrOrrnxs[PO/# Z[FxuuhqwRe[PO#h#Iruhfdvw[PO1# Suhqghwhyl#xq#sr*#gl#whpsr#shu# hvdplqduoh1 Kr#lqwhq}lrqh#gl#hylwduh#od# urxwlqh#JhrOrrnxs[PO/#h# odvflduyhod#yhghuh#gd#vrol1#Fl# frqfhqwuhuhpr#vx#gxh#dowul# frpdqgl=#Z[FxuuhqwRe[PO# +Frqgl}lrql#Fruuhqwl,#txhvwd#yrowd# h#Iruhfdvw[PO#+Suhylvlrqh,#od# survvlpd1 Txhvwr##lo#olqn#shu# Z[FxuuhqwRe[PO=# kwws=22dsl1zxqghujurxqg1frp2dxwr 2zxl2jhr2Z[FxuuhqwRe[PO2lqgh{1 {poBtxhu|@;3346 Vrvwlwxlwh#lo#frglfh#srvwdoh# ghjol#XVD#;3346#frq#lo#yrvwur#r/# vh#delwdwh#do#gl#ixrul#ghjol#Vwdwl# Xqlwl/#srwhwh#suryduh#frq#flww/# sdhvh#0#frph#Sduljl/#Iudqfld/#r# Orqgud/#Lqjklowhuud1 H#lo#olqn#shu#Iruhfdvw[PO=# kwws=22dsl1zxqghujurxqg1frp2dxwr 2zxl2jhr2Iruhfdvw[PO2lqgh{1{poB txhu|@;3346 Dqfkh#txl#vrvwlwxlwh#;3346# frq#lo#yrvwur#frglfh#srvwdoh#r# flww/#sdhvh1 Lql}ldpr#frq#oh#lqirupd}lrql# fruuhqwl1#Lqfroodwh#o*lqglul}}r#qho# yrvwur#eurzvhu#suhihulwr1#Yl# vdudqqr#prvwudwh#xqd#judq# txdqwlw#gl#lqirupd}lrql1#Odvfhu# d#yrl#ghflghuh#frvd##gdyyhur# lpsruwdqwh/#pd#fl#vriihuphuhpr# vx#dofxql#hohphqwl1 Shu#lo#qrvwur#hvhpslr/#iduhpr# gvmm#djsdmf#nbhb{jof#$48
lqglfh#a
Vyloxssr Judilfd
FG2GYG
KGG
XVE#Gulyh Odswrs
Zluhohvv
xq*Dssolfd}lrqh1#Vl#wudwwd#gl#xqd# hvsuhvvlrqh#vlpsdwlfd#shu# ghvfulyhuh#lo#prgr#gl# lqwhuidfflduvl#frq#xq*dowur# surjudppd1#Shqvdwh#dooh#oleuhulh# fkh#lpsruwldpr1#Dofxqh#gl#hvvh# srvvrqr#hvvhuh#hvhjxlwh#frph# dssolfd}lrql#d#v#vwdqwl/#pd#vh#oh# lpsruwldpr#frph#oleuhulh# srvvldpr#xvduh#prowh#ghooh#orur# ixq}lrql#qho#qrvwur#surjudppd/# ulxvfhqgr#frv#dg#xvduh#lo#frglfh# gl#txdofxq#dowur1#Lq#txhvwr#fdvr/# xvhuhpr#lqglul}}l#XUO# hvsuhvvdphqwh#irupdwwdwl#shu# lqwhuurjduh#lo#vlwr#zxqghujurxqg# shu#lqirupd}lrql#phwhr#0#vhq}d# xvduh#xq#eurzvhu#zhe1#Dofxql# srwuheehur#diihupduh#fkh#xqd#DSL# #xqd#vshflh#gl#sruwd#vhjuhwd#shu# xq#dowur#surjudppd#0#lqvhulwd# lqwhq}lrqdophqwh#gdo# surjudppdwruh#shu#idufhod#xvduh1# Dg#rjql#prgr/##xqd#hvwhqvlrqh# vxssruwdwd#gd#xq*dssolfd}lrqh# shu#shuphwwhuqh#o*xvr#lq#dowuh# dssolfd}lrql1 Vxrqd#lqwuljdqwhB#Ehqh/# frqwlqxdwh#d#ohjjhuh/#plhl# jlrydql#sdgdzdq1
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#44
dwwhq}lrqh#dl#wdj#vhjxhqwl= frqqhvvlrqh#zhe#h#lql}lhuhpr#d# fhufduh#l#qrvwul#wdj1#Xqd#yrowd# wurydwr#xq#wdj#fkh#fl#lqwhuhvvd/# vdoyhuhpr#txhvwr#whvwr#lq#xqd# yduldeloh#fkh#srvvldpr#xvduh#lq# vhjxlwr#shu#prvwuduh#o*rxwsxw1# Txdqgr#dyuhpr#d#glvsrvl}lrqh# wxwwl#l#gdwl#ol#prvwuhuhpr1# Deedvwdq}d#vhpsolfh#lq#whruld1 Lql}ldpr#fro#fkldpduh#lo#qrvwur# iloh#zbfxuuhqwv1s|1#Hffr#od#sduwh#gl# lpsruw#gho#qrvwur#frglfh=
from xml.etree import ElementTree as ET import urllib import sys import getopt """ w_currents.py Returns current conditions, forecast and alerts for a given zipcode from WeatherUnderground.com. Usage: python wonderground.py [options] Options: -h, --help Show this help -l, --location City,State to use -z, --zip Zipcode to use as location Examples: w_currents.py -h (shows this help information) w_currents.py -z 80013 (uses the zip code 80013 as location) """
Qdwxudophqwh/#srwhwh# djjlxqjhuh#dowul#wdj#fkh#shu#yrl# vrqr#lqwhuhvvdqwl1#Frpxqtxh/# txhvwl#wdj#yl#iruqludqqr#xqd# sdqrudplfd#deedvwdq}d#frpsohwd1 Rud#fkh#vdssldpr#frvd#fl# lqwhuhvvd/#lql}ldpr#d#vfulyhuh#lo# frglfh#ghood#qrvwud#dssolfd}lrqh1# Rvvhuyldpr#lq#jhqhudoh#lo#ioxvvr# frpsohvvlyr#gho#surjudppd1 Sulpd#gl#wxwwr/#frqwurooldpr# frvd#o*xwhqwh#fl#kd#fklhvwr#gl#iduh1# Vh##vwdwd#iruqlwd#xqd#orfdolw#od# xvhuhpr#dowulphqwl#xwlol}}huhpr# txhood#suhghilqlwd1#Txlqgl# sdvvhuhpr#dood#ixq}lrqh# jhwFxuuhqwv1#Xvldpr#od#orfdolw# shu#frvwuxluh#od#qrvwud#vwulqjd#gl# ulfklhvwd#gd#lqylduh#do#vlwr#zhe1# Xvhuhpr#xuoole1xuorshq#shu# uhfxshuduh#od#ulvsrvwd#gdo#zhe/# phwwhuod#lq#xq#rjjhwwr#h#sdvvduor# dood#oleuhuld#HohphqwWuhh#shu#lo# sduvlqj1#Txlqgl#fklxghuhpr#od#
Txlqgl#lqvhuluhpr#xqd#vhulh#gl# olqhh#gl#dlxwr#+lq#dowr#d#ghvwud,# vrsud#jol#lpsruw1 Dvvlfxudwhyl#gl#xvduh#l#wulsol# grssl#dslfl1#Fl#shuphwwhu#gl# xvduh#frpphqwl#pxowl0uljd1# Sduohuhpr#gl#txhvwr#wud#srfr1 Rud#fuhhuhpr#od#qrvwud#fodvvh# vwxe/#lq#edvvr#d#ghvwud/#h#oh# urxwlqh#sulqflsdol/#fkh#vrqr# prvwudwh#qhood#sdjlqd#vhjxhqwh1 gvmm#djsdmf#nbhb{jof#$48
class CurrentInfo: """ This routine retrieves the current condition xml data from WeatherUnderground.com based off of the zip code or Airport Code... currently tested only with Zip Code and Airport code For location, if zip code use something like 80013 (no quotes) if airport use something like "KDEN" (use double-quotes) if city/state (US) use something like "Aurora,%20CO" or Aurora,CO (use double-quotes) if city/country, use something like "London,%20England" (use double-quotes) """ def getCurrents(self,debuglevel,Location): pass def output(self): pass def DoIt(self,Location): pass #========================================= # END OF CLASS CurrentInfo() #=========================================
lqglfh#a
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#44
Ulfrughuhwh#gdjol#duwlfrol# suhfhghqwl#od#uljd#%libbqdphbb%1# Vh#od#fkldpldpr#frph# xq*dssolfd}lrqh#d#v#vwdqwh/#od# urxwlqh#sulqflsdoh#yhuu#hvhjxlwd/# dowulphqwl#od#srvvldpr#xvduh# frph#sduwh#gl#xqd#oleuhuld1#Xqd# yrowd#qhood#urxwlqh#sulqflsdoh/# frqwuroohuhpr/#vh##lo#fdvr/#frvd## vwdwr#wudvphvvr1 Vh#o*xwhqwh#xvd#lo#sdudphwur#%0 k%#r#%00#khos%/#prvwuhuhpr#oh#wulsoh# uljkh#g*dlxwr#doo*lql}lr#gho#frglfh# gho#surjudppd#dwwudyhuvr#od# fkldpdwd#d#xqd#urxwlqh#gl# vxssruwr#fkh#glfh#doo*dssolfd}lrqh# gl#prvwuduhbbgrfbb1 sdvvduod#dooh#urxwlqh1##txdofrvd# fkh#rupdl#gryuhvwh#hvvhuh#fdsdfl# gl#iduh1 Shu#ilqluh#fuhldpr#xq*lvwdq}d# ghood#qrvwud#fodvvh#FxuuhqwLqir# fkh#fkldpldpr#fxuuhqwv/#h#txlqgl# sdvvldpr#od#orfdolw#dood#Urxwlqh# %GrLw%1#Hffr#frph##idwwd=
def DoIt(self,Location): self.getCurrents(1,Location) self.output() def usage(): print __doc__ def main(argv): location = 80013 try: opts, args = getopt.getopt(argv, "hz:l:", ["help=", "zip=", "location="]) except getopt.GetoptError: usage() sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): usage() sys.exit() elif opt in ("-l", "--location"): location = arg elif opt in ("-z", "--zip"): location = arg print "Location = %s" % location currents = CurrentInfo() currents.DoIt(location) #============================================ # Main loop #============================================ if __name__ == "__main__": main(sys.argv[1:])
Prowr#vhpsolfh1#Sdvvldpr#od# orfdolw#h#lo#olyhoor#gl#ghexj#dood# urxwlqh#jhwFxuuhqwv/#h#txlqgl# fkldpldpr#od#urxwlqh#gl#rxwsxw1# Vh#o*xwhqwh#xvd#%0o%#+orfdolw,#r#%0 Dqfkh#vh#dyuhppr#srwxwr# }%#+frglfh#srvwdoh,#o*lqirupd}lrqh# vhpsolfhphqwh#hvhjxluh#o*rxwsxw# iruqlwd#vrvwlwxlu#txhood#lpsrvwdwd# gluhwwdphqwh#gdood#urxwlqh# lqwhuqdphqwh1#Txdqgr#vl#sdvvd# jhwFxuuhqwv/#vwldpr#vyloxssdqgr# xqd#orfdolw/#dvvlfxudwhyl#gl#xvduh#l# od#iohvvlelolw#shu#iruqluh#o*rxwsxw#lq# grssl#dslfl#shu#udffklxghuh#od# gliihuhqwl#prgl#qho#fdvr#qh# vwulqjd#h#gl#qrq#xvduh#vsd}l1#Shu# gryhvvlpr#dyhu#elvrjqr1 hvhpslr/#shu#uhfxshuduh#oh#dwwxdol# frqgl}lrql#gl#Gdoodv/#Wh{dv/#xvduh#0 Lo#frglfh#shu#od#urxwlqh# o#%Gdoodv/Wh{dv%1 jhwFxuuhqwv##prvwudwr#qhood# sdjlqd#vhjxhqwh1 L#ohwwrul#sl#dvwxwl#dyudqqr#jl# lqwxlwr#fkh#l#frqwurool#0}#h#0o#vrqr# Txl#deeldpr#xq#sdudphwur# suhvvrfk#od#vwhvvd#frvd1#Srwhwh# fkldpdwr#ghexjohyho1#Lo#vxr# prglilfduh#0o#shu#frqwurooduh#od# xwlol}}r#fl#shuphwwh#gl#frqwurooduh# hyhqwxdoh#suhvhq}d#gl#vsd}l#h# lqirupd}lrql#xwlol#qho#fdvr#lo# ulirupdwwduh#od#vwulqjd#sulpd#gl# gvmm#djsdmf#nbhb{jof#$48
surjudppd#qrq#vl#frpsruwdvvh# qhood#pdqlhud#dvshwwdwd1##dqfkh# xwloh#doo*lql}lr#ghood#idvh#gl# vyloxssr1#Vh#srl#vlhwh#frqwhqwl#gl# frph#lo#yrvwur#frglfh#ixq}lrqd/# srwhwh#ulpxryhuh#rjql#wudffld# uhodwlyd#d#ghexjohyho1#Vh#dyhwh# lqwhq}lrqh#gl#ulodvflduh#lo#frglfh#do# sxeeolfr/#frph#vh#or#vwhvwh# idfhqgr#shu#txdofxq#dowur/# dvvlfxudwhyl#gl#ulpxryhuh#lo#frglfh#
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#44
1#Idffldpr#txhvwr#shufk/#d#yrowh/# zxqghujurxqg##rffxsdwr#h#qrq# ulvsrqgh1#Lq#txhvwd#pdqlhud#vl# hylwd#gl#gryhu#dvshwwduh# doo*lqilqlwr1#Vh#vlhwh#lqwhuhvvdwl#d# xowhulrul#lqirupd}lrql#vx#xuoole#xq# exrq#srvwr#gd#fxl#lql}lduh## kwws=22grfv1s|wkrq1ruj2oleudu|2xuoole 1kwpo1 Vh#dffdgh#txdofrvd#gl# lqdvshwwdwr#vl#sdvvd#qhood#vh}lrqh# h{fhsw#fkh#vwdpsd#xq#phvvdjjlr# gl#huuruh#h#whuplqd#o*dssolfd}lrqh# +v|v1h{lw+5,,1 Dvvxphqgr#fkh#wxwwr#ixq}lrql/# lql}ldpr#d#fhufduh#l#qrvwul#wdj1#Od# sulpd#frvd#fkh#iduhpr##fhufduh# od#qrvwud#orfdolw#frq# wuhh1ilqgdoo+%22ixoo%,1#Ulfrugdwh/#wuhh# #o*rjjhwwr#dqdol}}dwr#uhvwlwxlwr#gd# hohphqwwuhh1#Lq#edvvr##prvwudwr# sduwh#gl#fl#fkh#ylhqh#ulwruqdwr# gdoo*DSL#gho#vlwr1 Txhvwd##od#qrvwud#sulpd# lvwdq}d#gho#wdj#?ixooA/#fkh#lq# txhvwr#fdvr##%Dxurud/#FR%1# Txhvwd##od#orfdolw#fkh#yrjoldpr# xvduh1#Txlqgl#fhufkldpr# %revhuydwlrqbwlph%1#Udssuhvhqwd# lo#prphqwr#gl#uhjlvwud}lrqh#ghooh# dwwxdol#frqgl}lrql1#Frqwlqxldpr# fhufdqgr#wxwwl#l#gdwl#fkh#fl# lqwhuhvvdqr#0#xvdqgr#od#vwhvvd# phwrglfd1 Shu#ilqluh#fl#rffxsldpr#ghood# qrvwud#urxwlqh#gl#rxwsxw#fkh## prvwudwd#lq#dowr#d#vlqlvwud#qhood# sdjlqd#vhjxhqwh1 Txl#vhpsolfhphqwh#prvwuldpr# oh#yduldelol1 Txhvwr##wxwwr1#Xq#rxwsxw# g*hvhpslr#shu#lo#plr#frglfh# srvwdoh#frq#xq#ghexjohyho#vhwwdwr# d#4##prvwudwr#lq#edvvr#d#vlqlvwud# qhood#survvlpd#sdjlqd1
def getCurrents(self,debuglevel,Location): if debuglevel > 0: print "Location = %s" % Location try: CurrentConditions = 'http://api.wunderground.com/auto/wui/geo/WXCurrentObXML /index.xml?query=%s' % Location urllib.socket.setdefaulttimeout(8) usock = urllib.urlopen(CurrentConditions) tree = ET.parse(usock) usock.close() except: print 'ERROR - Current Conditions - Could not get information from server...' if debuglevel > 0: print Location sys.exit(2) # Get Display Location for loc in tree.findall("//full"): self.location = loc.text # Get Observation time for tim in tree.findall("//observation_time"): self.obtime = tim.text # Get Current conditions for weather in tree.findall("//weather"): self.we = weather.text # Get Temp for TempF in tree.findall("//temperature_string"): self.tmpB = TempF.text #Get Humidity for hum in tree.findall("//relative_humidity"): self.relhum = hum.text # Get Wind info for windstring in tree.findall("//wind_string"): self.winds = windstring.text # Get Barometric Pressure for pressure in tree.findall("//pressure_string"): self.baroB = pressure.text
<display_location> <full>Aurora, CO</full> <city>Aurora</city> <state>CO</state> <state_name>Colorado</state_name> <country>US</country> <country_iso3166>US</country_iso3166> <zip>80013</zip> <latitude>39.65906525</latitude> <longitude>-104.78105927</longitude> <elevation>1706.00000000 ft</elevation> </display_location>
jhwFxuuhqwv#urxwlqh
gvmm#djsdmf#nbhb{jof#$48
lqglfh#a
SURJUDPPDUH#LQ#S\WKRQ#0#SDUWH#44
def output(self): print 'Weather Information From Wunderground.com' print 'Weather info for %s ' % self.location print self.obtime print 'Current Weather - %s' % self.we print 'Current Temp - %s' % self.tmpB print 'Barometric Pressure - %s' % self.baroB print 'Relative Humidity - %s' % self.relhum print 'Winds %s' % self.winds
Vl#suhjd#gl#qrwduh#fkh#kr# vfhowr#gl#xvduh#l#wdj#fkh#lqfoxgrqr# l#ydorul#vld#lq#Idkuhqkhlw#fkh# Fhovlxv1#Vh#ghvlghudwh/#shu# hvhpslr/#ylvxdol}}duh#vror#l#ydorul# Fhovlxv#srwhwh#xvduh#lo#wdj# ?whpsbfA#slxwwrvwr#fkh# ?whpshudwxuhbvwulqjA1 O*lqwhur#frglfh#sx#hvvhuh# vfdulfdwr#gd=# kwws=22sdvwhelq1frp27leMJp:7
Gvmm#Djsdmf# Qpedbtu
##wruqdwr#h#pljolruh#fkh# Jol#dujrphqwl#qhoo*hslvrglr#txdwwur#lqfoxgrqr= #Qhzv#0#ulodvfldwr#Xexqwx#43137 #Rslqlrql #Jlrfkl#0#Vwhdp#duulyd#vx#Olqx{B #Ihhgedfn 111h#wxwwr#lo#vrolwr#xprulvpr1
Location = 80013 Weather Information From Wunderground.com Weather info for Aurora, Colorado Last Updated on May 3, 11:55 AM MDT Current Weather - Partly Cloudy Current Temp - 57 F (14 C) Barometric Pressure - 29.92 in (1013 mb) Relative Humidity - 25% Winds From the WNW at 10 MPH Script terminated.
gvmm#djsdmf#nbhb{jof#$48
lqglfh#a
KRZ0WR
web per le condizioni attuali, ce ne uno per le previsioni. Ecco il link alla pagina delle previsioni XML: http://api.wunderground.com/auto /wui/geo/ForecastXML/index.xml?q uery=80013 Come al solito, sostituite '80013' con la vostra Citt/Paese, Citt/Stato o codice postale. Probabilmente otterrete circa 600 righe di codice XML. C' un elemento root chiamato 'forecast' e quindi quattro sotto elementi: 'termsofservice', 'txt_forecast', 'simpleforecast' and 'moon_phase'. Ci concentreremo su 'txt_forecast' e 'simpleforecast'. Poich l'ultima volta abbiamo gi trattato delle sezioni usage, main e "if__name__", quelle le lascer affrontare a voi e ci focalizzeremo sulle chicche di cui abbiamo bisogno questa volta. Poich vi ho mostrato una porzione di txt_forecast, iniziamo da qui. In basso mostrata una piccola porzione di txt_forecast per la mia zona.
gvmm djsdmf nbhb{jof $49
DISPOSITIVI:
CD/DVD
HDD
ell'ultima sessione, abbiamo trattato l'API di wunderground e scritto un po' di codice per ricavare le condizioni attuali. Questa volta ci occuperemo della parte delle API riguardante le previsioni. Se non avete avuto modo di dare un'occhiata alle ultime due puntate su XML, ed in particolare l'ultima, dovreste farlo prima di procedere ulteriormente. Cos come esiste un indirizzo
indice ^
SURJUDPPDUH LQ S\WKRQ 0 SDUWH 45 un'occhiata alla porzione _init_ per impostare e pulire le <simpleforecast> del file xml che variabili necessarie, come mostrato a destra. mostrato in alto a destra nella pagina seguente. C' un'etichetta <forecastday> per ciascun giorno del periodo di Se non vi interessa supportare previsione, di solito 6 giorni sia Fahrenheit che Celsius, incluso quello attuale. Avete escludete la viariabile che non vi informazioni sulla data in vari interessa. Io ho deciso di tenerle formati (io personalmente entrambe. preferisco l'etichetta <pretty>), temperature massime e minime A seguire, creeremo la nostra previste sia in Fahrenheit che routine principale per recuperare i Celsius, proiezione delle condizioni dati della previsione. mostrata generali, varie icone, una icona in basso a destra nella pagina del cielo (condizioni del cielo alla successiva. stazione di riferimento), e "pop" che sta per "Probabilit di molto simile alla routine della Precipitazione". L'etichetta volta scorsa per le condizioni <moon_phase> fornisce alcune attuali. La differenza principale informazioni interessanti come (finora) l'URL utilizzato. Ora le alba, tramonto e fasi lunari. cose cambiano. Dato che abbiamo figli multipli con la stessa Ora ci addentriamo nel codice. etichetta all'interno del genitore Ecco la sezione degli import: dobbiamo modificare in parte le nostre chiamate all'analizzatore. Il from xml.etree import codice mostrato in alto a sinistra ElementTree as ET nella pagina seguente.
import urllib import sys import getopt
Notate come questa volta si stia usando tree.find, ed i cicli per scorrere i dati. un peccato che Python non fornisca un costrutto SELECT/CASE come in altri linguaggi. La routine IF/ELIF,
gvmm djsdmf nbhb{jof $49
<simpleforecast> <forecastday> <period>1</period> <date> <epoch>1275706825</epoch> <pretty_short>9:00 PM MDT</pretty_short> <pretty>9:00 PM MDT on June 04, 2010</pretty> <day>4</day> <month>6</month> <year>2010</year> <yday>154</yday> <hour>21</hour> <min>00</min> <sec>25</sec> <isdst>1</isdst> <monthname>June</monthname> <weekday_short/> <weekday>Friday</weekday> <ampm>PM</ampm> <tz_short>MDT</tz_short> <tz_long>America/Denver</tz_long> </date> <high> <fahrenheit>92</fahrenheit> <celsius>33</celsius> </high> <low> <fahrenheit>58</fahrenheit> <celsius>14</celsius> </low> <conditions>Partly Cloudy</conditions> <icon>partlycloudy</icon> +<icons> <skyicon>partlycloudy</skyicon> <pop>10</pop> </forecastday> ... </simpleforecast>
indice ^
#================================= # Get the forecast for today and (if available) tonight #================================= fcst = tree.find('.//txt_forecast') for f in fcst: if f.tag == 'number': self.periods = f.text elif f.tag == 'date': self.date = f.text for subelement in f: if subelement.tag == 'period': self.period=int(subelement.text) if subelement.tag == 'fcttext': self.forecastText.append(subelement.text) elif subelement.tag == 'icon': self.icon.append( subelement.text) elif subelement.tag == 'title': self.Title.append(subelement.text)
def GetForecastData(self,location): try: forecastdata = 'http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml?query=%s' % location urllib.socket.setdefaulttimeout(8) usock = urllib.urlopen(forecastdata) tree = ET.parse(usock) usock.close() except: print 'ERROR - Forecast - Could not get information from server...' sys.exit(2)
indice ^
SURJUDPPDUH LQ S\WKRQ 0 SDUWH 45 pagina seguente. comunque, funziona a dovere, solo un po' pi arzigogolata. Ora Ancora, se non volete mostrare analizziamo il codice. Assegnamo le informazioni sia in Centigradi la variabile fcst ad ogni cosa che in Fahrenheit, modificate il all'interno dell'etichetta <txt_forecast> che cos includer codice per mostrare quello che tutti i dati per quel gruppo. Quindi volete. Per finire abbiamo la cerchiamo le etichette <date> e routine "DoIt": <number> dato che sono def semplici etichette di "primo livello" e carichiamo i dati nelle DoIt(self,Location,US,IncludeTo day,Output): nostre variabili. Ora le cose si fanno un po' pi difficili. Guardate al nostro esempio xml di risposta. self.GetForecastData(Location) Ci sono due istanze di <forecastday>. Sotto self.output(US,IncludeToday,Out put) <forecastday> ci sono i sottoelementi <period>, <icon>, Ora possiamo chiamare la <icons>, <title> e <fcttext>. Li passeremo in rassegna ed ancora routine come segue: utilizziamo l'istruzione IF per forecast = ForecastInfo() caricarli nelle nostre variabili.
Ora dobbiamo dare un'occhiata forecast.DoIt('80013',1,0,0) # Insert your own postal code ai dati sulle previsioni estese per i successivi X giorni. Questo tutto per ora. Lascio il Fondamentalmente ricorriamo allo codice per i controlli a voi, se stesso metodo usato per volete cimentarvi. assegnare le nostre variabili; questo mostrato in alto a destra. Ecco il codice eseguibile completo: Adesso dobbiamo creare la http://pastebin.com/wsSXMXQx nostra routine per l'output. Come abbiamo fatto l'ultima volta, sar Divertitevi fino alla abbastanza generico. Il codice per prossima volta. fare ci mostrato a destra nella
gvmm djsdmf nbhb{jof $49
#================================= # Now get the extended forecast #================================= fcst = tree.find('.//simpleforecast') for f in fcst: for subelement in f: if subelement.tag == 'period': self.extPeriod.append(subelement.text) elif subelement.tag == 'conditions': self.extConditions.append(subelement.text) elif subelement.tag == 'icon': self.extIcon.append(subelement.text) elif subelement.tag == 'pop': self.extpop.append(subelement.text) elif subelement.tag == 'date': for child in subelement.getchildren(): if child.tag == 'weekday': self.extDay.append(child.text) elif subelement.tag == 'high': for child in subelement.getchildren(): if child.tag == 'fahrenheit': self.extHigh.append(child.text) if child.tag == 'celsius': self.extHighC.append(child.text) elif subelement.tag == 'low': for child in subelement.getchildren(): if child.tag == 'fahrenheit': self.extLow.append(child.text) if child.tag == 'celsius': self.extLowC.append(child.text)
della RainyDay Solutions, LLC, una societ di consulenza in Aurora, Colorado e programma dal 1972. Ama cucinare, fare escursioni, ascoltare musica e passare il tempo con la sua famiglia.
10
indice ^
11
indice ^
KRZ0WR
xhvwr phvh sduohuhpr ghoo*xvr gl Fxuvhv lq S|wkrq1 Qr/ qrq vwldpr glfhqgr gl xvduh S|wkrq shu gluh sdurodffh/ ehqfk srvvldwh lq fdvr qh vhqwldwh lo elvrjqr1 Vwldpr sduodqgr ghoo*xwlol}}r ghood oleuhuld Fxuvhv shu fuhduh txdofkh vwudydjdqwh rxwsxw ghoor vfkhupr1 Vh vlhwh yhffkl deedvwdq}d gd ulfrugduh l sulpl whpsl ghl frpsxwhu/ ulfrughuhwh fkh/ lq dpelwr odyrudwlyr/ l frpsxwhu hudqr wxwwl pdlqiudph 0 frq vhpsolfl whuplqdol +vfkhupl h wdvwlhuh, shu o*lqsxw h o*rxwsxw1 Srwhydwh dyhuh sl whuplqdol froohjdwl dg xq vror frpsxwhu1 Lo sureohpd hud fkh l whuplqdol ulvxowdydqr glvsrvlwlyl qrlrvl1 Qrq dyhydqr ilqhvwuh/ frorul r frvh gho jhqhuh 0 vror 57 uljkh gl ;3 fdudwwhul +qhooh pljolrul ghooh lsrwhvl,1 Txdqgr l shuvrqdo frpsxwhu glyhqqhur srsrodul/ dl whpsl gl GRV h FSP/ txhvwr txhoor fkh fl vl ulwurydyd1 Txdqgr l surjudppdwrul odyrudydqr vxl orur vwudydjdqwl +shu txhl whpsl, vfkhupl/ vrsudwwxwwr shu
o*lpplvvlrqh h ylvxdol}}d}lrqh gl gdwl/ xvdydqr fduwd judilfd shu glvhjqduh lo frqwhqxwr ghoor vfkhupr1 Fldvfxq eorffr vxood fduwd judilfd udssuhvhqwdyd od srvl}lrqh gl xq fdudwwhuh1 Txdqgr xvldpr l qrvwul surjudppl lq S|wkrq qho whuplqdoh/ dqfrud deeldpr d fkh iduh frq xqr vfkhupr 57{;31 Frpxqtxh/ txhood olplwd}lrqh sx hvvhuh idflophqwh vxshudwd frq xq*dghjxdwd dffruwh}}d h suhsdud}lrqh1 Txlqgl uhfdwhyl yhuvr lo sl ylflqr qhjr}lr gl duwlfrol gl fdqfhoohuld h surfxudwhyl txdofkh eorffkhwwr gl fduwd judilfd1 Dg rjql prgr/ suhsduldprfl d fuhduh lo qrvwur sulpr surjudppd Fxuvhv/ prvwudwr lq dowr d ghvwud1 Yh or vslhjkhu grsr fkh dyuhwh gdwr xq*rffkldwd do frglfh1 Euhyh pd vhpsolfh1 Hvdplqldpror uljd shu uljd1 Shu lql}lduh/ lqvhuldpr jol lpsruw/ fkh rupdl gryuheehur hvvhuyl idploldul1 Lq vhjxlwr/ fuhhuhpr xq qxryr rjjhwwr Fxuvhu shu or vfkhupr/ or lql}ldol}}huhpr h or fkldphuhpr p|vfuhhq1 +p|vfuhhq @ gvmm djsdmf nbhb{jof $4:
fxuvhv1lqlwvfu+,,1 Txhvwd od qrvwud whod fkh glslqjhuhpr1 Txlqgl/ xvldpr lo frpdqgr p|vfuhhq1erughu+3, shu glvhjqduh xq pdujlqh lqwruqr dood whod1 Qrq qhfhvvdulr pd uhqgh or vfkhupr sl judghyroh1 Txlqgl xvldpr lo phwrgr dggvwu shu %vfulyhuh% vxood qrvwud whod d sduwluh gdood uljd 45 srvl}lrqh 581 Shqvdwh do phwrgr 1dggvwu gl Fxuvhv frph dg xq*lvwux}lrqh sulqw1 Shu ilqluh/ lo phwrgr 1uhiuhvk+, uhqghu lo qrvwur odyrur ylvleloh1 Vh qrq ulfdulfkldpr or vfkhupr/ l qrvwul fdpeldphqwl qrq vdudqqr ylvlelol1 Txlqgl dvshwwldpr fkh o*xwhqwh suhpd xq wdvwr +1jhwfk, h srl ulodvfldpr o*rjjhwwr vfkhupr +1hqgzlq, shu shuphwwhuh do qrvwur whuplqdoh gl :
wruqduh dood qrupdolw1 Lo frpdqgr fxuvhv1hqgzlq+, PROWR lpsruwdqwh h/ vh qrq ylhqh ulfkldpdwr/ lo yrvwur whuplqdoh ulvxowhu lq xqr vwdwr gl judqgh glvruglqh1 Dvvlfxudwhyl txlqgl gl xvduh txhvwr phwrgr sulpd ghood ilqh ghoo*dssolfd}lrqh1 Vdoydwh txhvwr surjudppd frph FxuvhvH{dpsoh41s| hg hvhjxlwhor lq xq whuplqdoh1 Dofxqh frvh gd qrwduh1 Rjqltxdoyrowd xvdwh xq erugr/ txhvwr vsuhfd xq fdudwwhuh %xwlol}}deloh% shu fldvfxq hohphqwr gho erugr vwhvvr1 Lq djjlxqwd/ vld od srvl}lrqh ghood olqhd fkh gho fdudwwhuh ylhqh frqwhjjldwd d sduwluh gd ]HUR1
lqglfh a
=================================================== RECIPE DATABASE =================================================== 1 - Show All Recipes 2 - Search for a recipe 3 - Show a Recipe 4 - Delete a recipe 5 - Add a recipe 6 - Print a recipe 0 - Exit =================================================== Enter a selection ->
lqglfh a
# Show the main menu # This is our main input handling routine # Show the All Recipes Menu # Do the input routines for this # Show the main menu # Show the Search for a Recipe Menu # Do the input routines for this option # Show the main menu again # Show the Show a recipe menu routine # Do the input routine for this routine # Show the main menu again so on and so on # Restore the terminal
def DoMainMenu(): myscreen.erase() myscreen.addstr(1,1, "========================================") myscreen.addstr(2,1, " Recipe Database") myscreen.addstr(3,1, "========================================") myscreen.addstr(4,1, " 1 - Show All Recipes") myscreen.addstr(5,1, " 2 - Search for a recipe") myscreen.addstr(6,1, " 3 - Show a recipe") myscreen.addstr(7,1, " 4 - Delete a recipe") myscreen.addstr(8,1, " 5 - Add a recipe") myscreen.addstr(9,1, " 6 - Print a recipe") myscreen.addstr(10,1, " 0 - Exit") myscreen.addstr(11,1, "========================================") myscreen.addstr(12,1, " Enter a selection: ") myscreen.refresh()
<
lqglfh a
43
lqglfh a
Juhj Zdowhuv lo sursulhwdulr ghood Udlq|Gd| Vroxwlrqv/ OOF/ xqd vrflhw gl frqvxohq}d lq Dxurud/ Frorudgr h surjudppd gdo 4<:51 Dpd fxflqduh/ iduh hvfxuvlrql/ dvfrowduh pxvlfd h sdvvduh lo whpsr frq od vxd idpljold1
44
lqglfh a
KRZ0WR
*xowlpd yrowd deeldpr wudwwdwr od oleuhuld Fxuvhv1 Txhvwd yrowd dssurirqgluhpr o*dujrphqwr frqfhqwudqgrfl vxl frpdqgl shu lo froruh1 Vh yl vlhwh shuvl o*duwlfror suhfhghqwh/ hffr xq euhyh uldvvxqwr1 Sulpd gl wxwwr gryhwh lpsruwduh od oleuhuld fxuvhv1 Txlqgl gryhwh lql}ldol}}duh frq fxuvhv1lqlwvfu1 Shu lqvhuluh lo whvwr vxoor vfkhupr vl fkldpd od ixq}lrqh dggvwu h txlqgl uhiuhvk shu prvwuduh l fdpeldphqwl1 Lqilqh fkldpdwh fxuvhv1hqgzlq+, shu ulsulvwlqduh od ilqhvwud gho whuplqdoh do vxr vwdwr qrupdoh1 Rud fuhhuhpr xq surjudppd vhpsolfh h yhorfh fkh xvd l frorul1 prowr vlploh d txdqwr jl idwwr pd frq o*djjlxqwd gl qxryl frpdqgl1 Vl xvd sulpd fxuvhv1vwduwbfroru+, shu gluh do vlvwhpd fkh yrjoldpr xvduh l frorul qho qrvwur surjudppd1 Txlqgl dvvhjqldpr od frssld gl frorul shu lo whvwr h or virqgr1 Srvvldpr dvvhjqduh sl frsslh h vfhjolhuh txdoh xvduh gl yrowd lq yrowd1 O*dvvhjqd}lrqh dyylhqh wudplwh od ixq}lrqh fxuvhv1lqlwbsdlu1 Od vlqwdvvl =
L frorul vrqr lpsrvwdwl xvdqgr %fxuvhv1FRORUb% frq lo froruh ghvlghudwr1 Shu hvhpslr/ fxuvhv1FRORUbEOXH r fxuvhv1FRORUbJUHHQ1 L srvvlelol ydorul vrqr eodfn/ uhg/ juhhq/ |hoorz/ eoxh/ pdjhqwd/ f|dq h zklwh1 Edvwd djjlxqjhuh lq pdlxvfror lo qrph gho froruh d %fxuvhv1FRORUb%1 Xqd yrowd ghilqlwh oh qrvwuh frsslh gl frorul/ srvvldpr xvduoh frph sdudphwur ilqdoh ghood ixq}lrqh vfuhhq1dggvwu frph qhood vhjxhqwh uljd=
myscreen.addstr([row],[column ],[text],curses.color_pair(X) )
Txl [ udssuhvhqwd lo vhw gl frorul fkh yrjoldpr xvduh1 Vdoydwh lo vhjxhqwh frglfh +lq dowr d ghvwud, frph froruwhvw41s| txlqgl hvhjxlwhor1 Qrq fhufdwh gl hvhjxluh xq surjudppd fxuvhv lq xqd LGH frph VSH r Gu1 S|wkrq1 Hvhjxlwhor lq xq whuplqdoh1 Fl fkh gryuhvwh yhghuh xqr ixoo flufoh pdjd}lqh &73
virqgr juljlr frq wuh uljkh gl whvwr uhfdqwl od vfulwwd %Wklv lv d whvw% lq frorul gliihuhqwl1 Lo sulpr gryuheeh hvvhuh qhur0vx0yhugh/ lo vhfrqgr eox0vx0eldqfr h lo whu}r pdjhqwd vxoor virqgr juljlr1 Ulfrugdwh od frssld Wu|2Ilqdoo|1 Lo vxr xwlol}}r fl shuphwwh gl ulsulvwlqduh lo whuplqdoh do vxr vwdwr qrupdoh vh txdofrvd gl vedjoldwr vl gryhvvh yhulilfduh1 Lq dowhuqdwlyd srvvleloh xvduh lo frpdqgr fxuvhv ;
fkldpdwr zudsshu1 Zudsshu hvhjxh lo odyrur do srvwr yrvwur1 Hvhjxh fxuvhv1lqlwvfu+,/ fxuvhv1vwduwbfroru+, h fxuvhv1hqgzlq+, frv gd qrq gryhuor iduh yrl vwhvvl1 Yl gryhwh vror ulfrugduh gl ulfkldpduh fxuvhv1zudsshu qhood yrvwud ixq}lrqh pdlq1 Txhvwd uhvwlwxlvfh xq sxqwdwruh door vfkhupr1 Qhood sdjlqd vhjxhqwh +lq dowr d ghvwud, f* or vwhvvr surjudppd dsshqd fuhdwr pd frq od ixq}lrqh fxuvhv1zudsshu1
lqglfh a
import curses import random class Game1(): def __init__(self): pass def main(self,stdscr): curses.init_pair(1, curses.COLOR_GREEN) curses.init_pair(2, curses.COLOR_BLACK) curses.init_pair(3, curses.COLOR_BLUE) curses.init_pair(4, curses.COLOR_BLUE) curses.init_pair(5, curses.COLOR_RED)
<
lqglfh a
# Letter Specific Stuff self.CurrentLetter = "A" #A dummy Holder Variable self.CurrentLetterPosition = 78 #Where the letter will start on the LetterLine self.DropPosition = 10 #A dummy Holder Variable self.DroppingLetter = 0 #Flag - Is the letter dropping? self.CurrentLetterLine = 3 #A dummy Holder Variable self.LetterWaitCount = 15 #How many times should we loop before actually working? # Bullet Specific Stuff self.Shooting = 0 #Flag - Is the gun shooting? self.BulletRow = self.GunLine - 1 self.BulletColumn = self.GunPosition # Other Stuff self.LoopCount = 0 self.GameScore = 0 self.Lives = 3 self.CurrentColor = 1 self.DecScoreOnMiss = 0 #How many loops have we done in MoveLetter #Current Game Score #Default number of lives #A dummy Holder Variable #Set to 1 if you want to decrement the #score every time the letter hits the #bottom row
Lq SlfnDOhwwhu jhqhuldpr xq lqwhur fdvxdoh wud 98 h <3 +gd %D% d %]%,1 Vh ulfrugdwh/ txdqgr vl xvd od ixq}lrqh udqgrp elvrjqd iruqluh xq ydoruh plqlpr h xqr pdvvlpr1 Vwhvvd frvd shu SlfnGursSrlqw1 Hvhjxldpr dqfkh xqd fkldpdwd d udqgrp1vhhg+, lq hqwudpeh oh ixoo flufoh pdjd}lqh &73
urxwlqh fkh dvvhjqd do jhqhudwruh fdvxdoh xq qxphur glyhuvr dg rjql fkldpdwd1 Od txduwd ixq}lrqh FkhfnNh|v1 Txhvwd vl rffxsd gl frqwurooduh l wdvwl suhpxwl gdoo*xwhqwh h wudgxuol lq prylphqwl gho fdqqrqh1 Frpxqtxh shu lo prphqwr qrq od frpsohwhuhpr/ or iduhpr sl wdugl1 Deeldpr elvrjqr 43
ixq}lrqh fkh lpsrvwl fldvfxqd qxryd sduwlwd1 Od fkldpldpr QhzJdph +sdjlqd vhjxhqwh/ do fhqwur d ghvwud,1 Qhfhvvlwldpr dqfkh ghood urxwlqh SulqwVfruh fkh prvwud lo sxqwhjjlr fruuhqwh h lo qxphur gl ylwh uhvwdqwl +sdjlqd vhjxhqwh/ lq edvvr d ghvwud,1 Rud greeldpr vror djjlxqjhuh xq sr* gl frglfh +sdjlqd vhjxhqwh/ lq edvvr d vlqlvwud, dood qrvwud ixq}lrqh
def Explode(self,scrn): pass def ResetForNew(self): self.CurrentLetterLine = self.LetterLine self.CurrentLetterPosition = 78 self.DroppingLetter = 0 self.PickALetter() self.PickDropPoint() def PickALetter(self): random.seed() char = random.randint(65,90) self.CurrentLetter = chr(char) def PickDropPoint(self): random.seed() self.DropPosition = random.randint(3,78)
lqglfh a
# 'Q'
def NewGame(self,scrn): self.GunChar = curses.ACS_SSBS scrn.addch(self.GunLine,self.GunPosition,self.GunChar,cu rses.color_pair(2) | curses.A_BOLD) scrn.nodelay(1) #Don't wait for a keystroke...just cache it. self.ResetForNew() self.GameScore = 0 self.Lives = 3 self.PrintScore(scrn) scrn.move(self.ScoreLine,self.ScorePosition)
stdscr.addstr(11,28,"Welcome to Letter Attack") stdscr.addstr(13,28,"Press a key to begin....") stdscr.getch() stdscr.clear() PlayLoop = 1 while PlayLoop == 1: self.NewGame(stdscr) self.GameLoop(stdscr) stdscr.nodelay(0) curses.flushinp() stdscr.addstr(12,35,"Game Over") stdscr.addstr(14,23,"Do you want to play again? (Y/N)") keyin = stdscr.getch(14,56) if keyin == ord("N") or keyin == ord("n"): break else: stdscr.clear()
45
lqglfh a
def MoveGun(self,scrn,direction): scrn.addch(self.GunLine,self.GunPosition," ") if direction == 0: # left if self.GunPosition > 0: self.GunPosition -= 1 elif direction == 1: # right if self.GunPosition < 79: self.GunPosition += 1 scrn.addch(self.GunLine,self.GunPosition,self.GunChar,cur ses.color_pair(2) | curses.A_BOLD)
if keyin == 260: # left arrow - NOT on keypad self.MoveGun(scrn,0) curses.flushinp() #Flush out the input buffer for safety. elif keyin == 261: # right arrow - NOT on keypad self.MoveGun(scrn,1) curses.flushinp() #Flush out the input buffer for safety. elif keyin == 52: # left arrow ON keypad self.MoveGun(scrn,0) curses.flushinp() #Flush out the input buffer for safety. elif keyin == 54: # right arrow ON keypad self.MoveGun(scrn,1) curses.flushinp() #Flush out the input buffer for safety. elif keyin == 32: #space if self.Shooting == 0: self.Shooting = 1 self.BulletColumn = self.GunPosition scrn.addch(self.BulletRow,self.BulletColumn,"|") curses.flushinp() #Flush out the input buffer for safety. def MoveBullet(self,scrn): scrn.addch(self.BulletRow,self.BulletColumn," ") if self.BulletRow > self.LetterLine: self.CheckForHit(scrn) self.BulletRow -= 1
Juhj Zdowhuv lo sursulhwdulr ghood Udlq|Gd| Vroxwlrqv/ OOF/ xqd vrflhw gl frqvxohq}d lq Dxurud/ Frorudgr h surjudppd gdo 4<:51 Dpd fxflqduh/ iduh hvfxuvlrql/ dvfrowduh pxvlfd h sdvvduh lo whpsr frq od vxd idpljold1
46
lqglfh a
47
lqglfh a
KRZ0WR
xhvwr phvh dqguhpr dg hvsoruduh S|jdph/ xq vhw gl prgxol surjhwwdwr shu vfulyhuh jlrfkl1 lo vlwr zhe kwws=22zzz1s|jdph1ruj21 Xqd flwd}lrqh gdo iloh uhdgph gl S|jdph= %S|jdph xqd oleuhuld pxowl0 sldwwdirupd surjhwwdwd shu uhqghuh idfloh od vfulwwxud gl vriwzduh pxowlphgldol/ frph l jlrfkl/ lq S|wkrq1 S|jdph ulfklhgh lo olqjxdjjlr S|wkrq h od oleuhuld pxowlphgldoh VGO1 Sx dqfkh iduh xvr gl dowuh glyhuvh oleuhulh prowr qrwh1% Vl sx lqvwdooduh S|jdph dwwudyhuvr V|qdswlf frph *s|wkrq0 jdph*1 Idwhor rud lq prgr fkh srvvldpr dqgduh dydqwl1 Lq sulpr oxrjr lpsruwldpr S|jdph +yhgl vrsud d ghvwud,1 Vxffhvvlydphqwh lpsrvwhuhpr rv1hqylurq shu idu v fkh od qrvwud ilqhvwud vld fhqwudwd vxo qrvwur vfkhupr1 Grsr gl fkh lql}ldol}}huhpr S|jdph/ srl lpsrvwhuhpr od ilqhvwud S|jdph d ;33{933 sl{ho h srl od glgdvfdold1 Lqilqh ylvxdol}}huhpr od vfkhupdwd h dqguhpr lq xq orrs gl dwwhvd ghood suhvvlrqh gl xq wdvwr vxood wdvwlhud r gl xq sxovdqwh gho prxvh1 Or vfkhupr xq rjjhwwr fkh frqwlhqh txdoxqtxh frvd ghflgldpr gl
lqilodufl1 fkldpdwr vxshuilflh1 Shqvdwh frph vh irvvh xq sh}}r gl fduwd vx fxl glvhjqhuhpr oh frvh1 Qrq prowr hfflwdqwh/ pd jl xq lql}lr1 Uhqgldpror xq sr* phqr qrlrvr1 Srvvldpr fdpelduh lo froruh ghoor virqgr frq xq txdofrvd gl phqr vfxur1 Kr wurydwr xq surjudppd gl qrph %froruqdph% fkh srwhwh lqvwdooduh wudplwh Xexqwx Vriwzduh Fhqwhu1 Txhvwr yl shuphwwh gl xvduh od %uxrwd ghl frorul% shu suhqghuh lo froruh fkh yl sldfh h yl gdu l ydorul UJE ryyhur Uhg/ Juhhq/ Eoxh gl txho froruh1 Greeldpr xvduh l frorul UJE vh qrq yrjoldpr xvduh l frorul suhghilqlwl fkh S|jdph fl riiuh1 Vl wudwwd gl xq surjudppd dffxudwr gl fxl vl gryuheeh suhqghuh lq frqvlghud}lrqh o*lqvwdood}lrqh1 Vxelwr grsr oh glfkldud}lrql g*lpsruwd}lrqh djjlxqjhwh111
Background = 208, 202, 104
Lo phwrgr vfuhhq1iloo+, lpsrvwhu lo froruh d wxwwr fl vx fxl sdvvldpr vrsud1 Od olqhd vxffhvvlyd/ s|jdph1glvsod|1xsgdwh+,/ lq uhdow djjlruqd l fdpeldphqwl dl qrvwul vfkhupl1 Vdoydwh txhvwr frq lo qrph gl s|jdph41s| h dqgldpr dydqwl1 Rud prvwuhuhpr dofxql whvwl vxo qrvwur prghvwr vfkhupr1 Qxrydphqwh lql}ldpr frq o*lpsruwduh oh qrvwul glfkldud}lrql h od yduldeloh gl dvvhjqd}lrqh gl edfnjurxqg gho qrvwur xowlpr surjudppd1 ;
import pygame from pygame.locals import * import os Background = 208, 202, 104
Rud/ djjlxqjhwh xqd yduldeloh djjlxqwlyd shu lo froruh gl sulpr sldqr ghood qrvwud irqw1
FontForeground = 255,255,255 # White
Txhvwr lpsrvwhu od yduldeloh Edfnjurxqg vx xq froruh grudwr1 Vxffhvvlydphqwh grsr od olqhd s|jdph1glvsod|1vhwbfdswlrq/ djjlxqjhwh oh vhjxhqwl olqhh111
screen.fill(Background) pygame.display.update()
Txlqgl djjlxqjhuhpr qhood pdjjlru sduwh gho frglfh gdo qrvwur xowlpr surjudppd +prvwudwr d ghvwud,1
frqwhqwv a
Od olqhd vxffhvvlyd +wh{w1jhwbuhfw+,, dvvhjqd xq rjjhwwr uhwwdqjroduh fkh font = xvhuhpr shu lqvhuluh lo whvwr vxoor pygame.font.Font(None,27) text vfkhupr1 Txhvwd xqd frvd = font.render('Here is some lpsruwdqwh gdo prphqwr fkh txdvl text', True, FontForeground, Background) textrect = wxwwr lo uhvwr gl fxl fl rffxshuhpr text.get_rect() frq l uhwwdqjrol +fdsluhwh gl sl lq xq screen.blit(text,textrect) vhfrqgr prphqwr,1 Srl pxryldpr pygame.display.update() +eolw, lo uhwwdqjror vxoor vfkhupr1 H ilqdophqwh djjlruqldpr or vfkhupr Dqgdwh dydqwl/ vdoydwh lo shu idu prvwuduh lo qrvwur whvwr1 Frvd surjudppd frq lo qrph gl yxro gluh %eolw% h shufk gldplqh s|jdph51s| hg hvhjxlwhor1 Qhoor Vfkhupr lq dowr d vlqlvwud vl gryuheeh gryuhl iduh txdofrvd fkh vxrqd frv vwudqrB Lo whuplqh ulvdoh djol dqql *:3 h yhghuh lo whvwr Khuh lv vrph wh{w1 yhqlyd gd [hur{ SDUF +gd fxl Dqgldpr d vfulyhuh dofxql frpdqgl1 surylhqh prowd ghood whfqrorjld rglhuqd,1 Lo whuplqh ruljlqdoh hud Lq sulpr oxrjr fkldpldpr lo phwrgr Irqw h or sdvvldpr d gxh dujrphqwl1 Lo ElwEOW fkh vljqlilfd Elw +ru Elwpds, Eorfn Wudqvihu1 Srl yhqqh fdpeldwr lq sulpr lo qrph ghood irqw fkh Eolw +iruvh shufk sl fruwr,1 ghvlghuldpr xvduh h lo vhfrqgr od Sudwlfdphqwh vwldpr pxryhqgr od glphqvlrqh ghood irqw1 Lq txhvwr prphqwr fl olplwhuhpr d xvduh *Qrqh* qrvwud lppdjlqh r lo qrvwur whvwr h odvflduh fkh lo vlvwhpd vfhojd xq wlsr vxoor vfkhupr1 gl fdudwwhuh shu qrl h lpsrvwldpr od Fkh iduh vh yrjoldpr fkh lo whvwr glphqvlrqh gho fdudwwhuh d 5: sxqwl1 yhqjd fhqwudwr vxoor vfkhupr lqyhfh fkh vxood uljd lq dowr gryh fl yxroh xq Grsr deeldpr lo phwrgr sr* gl whpsr shu yhghuorB Wud od olqhd irqw1uhqghu+,1 Txhvwr kd txdwwur wh{w1jhwbuhfw+, h vfuhhq1eolw lqvhulwh oh dujrphqwl1 Lq ruglqh fl vrqr= l whvwl ixoo flufoh pdjd}lqh &74
irqw1vhwblwdolf+Wuxh, d ghvwud grsr od olqhd s|jdph1irqw1Irqw1 Ulfrugdwh/ deeldpr glvfxvvr euhyhphqwh vxoo*lpsrvwd}lrqh *Qrqh* txdqgr lpsrvwldpr lo wlsr gl fdudwwhuh d xq irqw jhqhulfr1 Lppdjlqldpr fkh gl yrohu xwlol}}duh xq irqw sl hoderudwr1 Frph kr ghwwr sulpd lo s|jdph1irqw1Irqw+, phwkrg kd gxh dujrphqwl1 Lo sulpr vl ulihulvfh do shufruvr h do qrph gho iloh ghood irqw fkh yruuhppr xvduh/ lo vhfrqgr id ulihulphqwr dood glphqvlrqh gho fdudwwhuh1 D txhvwr sxqwr lo sureohpd lo shufruvr1 Frph idffldpr d vdshuh lo yhur shufruvr h lo qrph gho iloh ghood irqw fkh yruuhppr xvduh lq xq txdoxqtxh vlvwhpdB Shu iruwxqd
frqwhqwv a
Dghvvr vwldpr ulohydqgr lo fhqwur ghoo*rjjhwwr vfkhupr +ulfrugdwh/ vxshuilflh, qhooh srvl}lrql lq sl{ho { h | h vwldpr lpsrvwdqgr l sxqwl fhqwudol { h | gho qrvwur rjjhwwr wh{wUhfw d txhl ydorul1 Hvhjxlwh lo surjudppd1 Rud lo qrvwur whvwr fhqwudwr qhood vxshuilflh1 Srwhwh lqrowuh prglilfduh lo whvwr xvdqgr +qho qrvwur vhpsolfh frglfh, irqw1vhwberog+Wuxh, h2r <
shufruvr h lo qrph ghood irqw1 Fl vrqr dowul prgl shu iduh od vwhvvd frvd/ pd or odvflr fdsluh d yrl lq prgr fkh srvvldpr dqgduh dydqwl1 Vh lo whvwr ehoor/ od judilfd shu pljolruh1 Kr wurydwr xq wxwruldo yhudphqwh fdulqr shu S|jdph vfulwwr gd Sh|wrq PfFrooxjk h kr shqvdwr gl suhqghuor h prglilfduor1 Shu txhvwd sduwh deeldpr elvrjqr gl lql}lduh frq xqd iljxud fkh vl pxryhu lqwruqr od qrvwud vxshuilflh1 Txhvwd iljxud qrwd frph *vsulwh*1 Xwlol}}dwh JLPS r txdofkh dowur vwuxphqwr shu fuhduh xqd iljxud vwlol}}dwd1 Qlhqwh gl idqwdvwlfr/ vror xqd jhqhulfd iljxud vwlol}}dwd1 Vl suhvxph fkh vwldwh xvdqgr JLPS1 Fuhdwh xqd qxryd lppdjlqh/ lpsrvwdwh oh glphqvlrql gl dowh}}d h odujkh}}d d 83 sl{ho h qhooh rs}lrql dydq}dwh lpsrvwdwh lo ulhpslphqwr vx wudvsduhqwh1 Xwlol}}dwh or vwuxphqwr pdwlwd frq xq shqqhoor ulwrqgr +36,1 Glvhjqdwh od yrvwud slffrod iljxud h vdoydwhod frph vwlfn1sqj qhood vwhvvd fduwhood fkh dyhwh xvdwr shu lo frglfh1 Hffr frph dssduh txhood pld1 Vrqr vlfxur fkh yrl vdshwh iduh gl phjolr1 Or vr111 qrq vrqr xq*duwlvwd1 Wxwwdyld shu l qrvwul vfrsl edvwd1 Deeldpr vdoydwr lo iloh ixoo flufoh pdjd}lqh &74
import pygame from pygame.locals import * import os Background = 0,255,127 os.environ['SDL_VIDEO_CENTERED'] = '1' pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption('Pygame Example #4 - Sprite') screen.fill(Background)
Qho plr vlvwhpd lo ydoruh uhvwlwxlwr %2xvu2vkduh2irqwv2wuxhw|sh2pvwwfruhi rqwv2frxu1wwi%1 Vh shu lo irqw qrq ylhqh wurydwr lo ydoruh gl ulwruqr Qrqh1 Dpphwwhqgr lo fdvr fkh od irqw vwdwd wurydwd/ doorud srvvldpr dvvhjqduh d xqd yduldeloh lo ydoruh uhvwlwxlwr h gl frqvhjxhq}d srvvldpr xvduh oh vhjxhqwl dwwulex}lrql1
courier = pygame.font.match_font('Courie r New') font = pygame.font.Font(courier,27)
frph 1sqj h deeldpr lpsrvwdwr or virqgr vx wudvsduhqwh lq prgr fkh yhqjdqr prvwudwh vror oh slffroh olqhh qhuh ghood qrvwud iljxud vwlol}}dwd h qrq xqr virqgr eldqfr r gl xq dowur froruh1 Yhgldpr dghvvr frvd yrjoldpr fkh lo surjudppd idffld1 Yrjoldpr prvwuduh xqd ilqhvwud gl S|jdph frq od qrvwud iljxud vwlol}}dwd lq hvvd1 Yrjoldpr fkh od iljxud vl pxryd txdqgr suhpldpr txdoxqtxh iuhffld gluh}lrqdoh +vx/ jl/ ghvwud/ vlqlvwud, vhpsuh fkh qrq vldpr vxo erugr ghoor vfkhupr h od iljxud qrq vl srvvd pxryhuh xowhulruphqwh1 Yruuhpr xvfluh gdo jlrfr txdqgr suhpldpr lo wdvwr t1 Rud vsrvwduh or vsulwh lq jlur srwuheeh vhpeuduh idfloh h or / pd xq sr* sl gliilfloh gl txdqwr vhpeul lql}ldophqwh1 Lql}ldpr fuhdqgr gxh uhwwdqjrol1 Xqr shu or vsulwh vh vwhvvr h xqr ghooh vwhvvh glphqvlrql pd eldqfr1 Pxryldpr or vsulwh vxood 43
vxshuilflh shu lql}lduh/ srl txdqgr o*xwhqwh suhph xq wdvwr pxryldpr lo uhwwdqjror eldqfr vrsud or vsulwh ruljlqdoh/ ulohyldpr od qxryd srvl}lrqh h pxryldpr qxrydphqwh or vsulwh vxood vxshuilflh qhood qxryd srvl}lrqh1 Sl r phqr txhoor fkh deeldpr idwwr o*xowlpd yrowd frq lo jlrfr ghoo*doidehwr1 Txhvwr wxwwr shu txhvwr surjudppd1 Fl gdu xq*lghd gl frph phwwhuh hiihwwlydphqwh xq hohphqwr judilfr vxoor vfkhupr h pxryhuor1 Txlqgl lql}ldpr xq qxryr surjudppd h or fkldpldpr s|jdph71s|1 Srvl}lrqdwhor qhood fduwhood lqfoxghv fkh deeldpr xvdwr gxudqwh txhvwr wxwruldo1 Txhvwd yrowd xwlol}}huhpr xqr virqgr gl froruh yhugh phqwd/ txlqgl l ydorul gryuheehur hvvhuh 3/ 588/ 45: +yhgl vrsud,1 Vxffhvvlydphqwh fuhldpr xqd fodvvh fkh jhvwlu od qrvwud judilfd r or
frqwhqwv a
Fdpeldwh od yrvwud xowlpd yhuvlrqh gho surjudppd lqvhuhqgr txhvwh gxh olqhh h surydwh gl qxryr1 O*xowlpd olqhd glfh txhvwr= xvdwh xq fdudwwhuh fkh yrl VDSHWH hvvhuh glvsrqleloh qho frpsxwhu ghoo*xwhqwh ilqdoh rssxuh lqfoxghwhor txdqgr glvwulexlwh lo yrvwur surjudppd h frglilfdwh lo
class Sprite(pygame.sprite.Sprite): def __init__(self, position): pygame.sprite.Sprite.__init__(self) # Save a copy of the screen's rectangle self.screen = pygame.display.get_surface().get_rect() # Create a variable to store the previous position of the sprite self.oldsprite = (0, 0, 0, 0) self.image = pygame.image.load('stick3.png') self.rect = self.image.get_rect() self.rect.x = position[0] self.rect.y = position[1] def update(self, amount): # Make a copy of the current rectangle for use in erasing self.oldsprite = self.rect # Move the rectangle by the specified amount self.rect = self.rect.move(amount) # Check to see if we are off the screen if self.rect.x < 0: self.rect.x = 0 elif self.rect.x > (self.screen.width - self.rect.width): self.rect.x = self.screen.width - self.rect.width if self.rect.y < 0: self.rect.y = 0 elif self.rect.y > (self.screen.height - self.rect.height): self.rect.y = self.screen.height - self.rect.height
44
Juhj Zdowhuv lo sursulhwdulr ghood Udlq|Gd| Vroxwlrqv/ OOF/ xqd vrflhw gl frqvxohq}d lq Dxurud/ Frorudgr h surjudppd gdo 4<:51 Dpd fxflqduh/ iduh hvfxuvlrql/ dvfrowduh pxvlfd h sdvvduh lo whpsr frq od vxd idpljold1
45
frqwhqwv a
HOW0TO
Forza, iniziamo.
empo fa promisi a qualcuno che avrei trattato le differenze tra Python 2.x e 3.x. La volta scorsa dissi che avremmo continuato la programmazione con pygame ma sento che dovrei mantenere la mia promessa cos approfondiremo di pi pygame la prossima volta. In Python 3.x sono stati fatti molti cambiamenti. Sul web c' una gran quantit di informazioni riguardo questi mutamenti e alla fine dell'articolo includer alcuni collegamenti. Vi sono anche molte preoccupazioni relativamente al fare il cambiamento. Mi concentrer sulle variazioni che riguardano le cose che avete imparato finora.
PRINT
Come ho detto prima uno degli argomenti pi importanti il modo in cui affrontiamo il comando print. Con la versione 2.x possiamo usare semplicemente:
print "This is a test"
Non un cambiamento molto grande ma qualcosa di cui dobbiamo essere consapevoli. Potete prepararvi alla migrazione utilizzando questa sintassi sotto Python 2.x.
>>> print "This is a test" File "<stdin>", line 1 print "This is a test" ^ SyntaxError: invalid syntax >>>
di formattazione '%s' e '%d' spariranno. Il nuovo modo, mostrato sotto, usare le dichiarazioni di sostituzione '{x}'. In effetti mi sembra essere pi facile da leggere. Potete anche fare cose come questa:
>>> print ("Hello {0}. I'm glad you are here at {1}.format("Fred","MySite.com ")) Hello Fred. I'm glad you are here at MySite.com >>>
e cos sar fatto. Tuttavia, con la Anche la formattazione e la 3.x, se ci proviamo otterremo il sostituzione di variabile sono messaggio di errore mostrato sopra cambiate. Con la versione 2.x a destra. abbiamo usato cose simili all'esempio mostrato sotto a Non bello. Per usare il sinistra e, con la versione 3.1, comando print dobbiamo mettere potete ottenere il giusto risultato. ci che vogliamo stampare tra Comunque ci dovuto al parentesi tonde cos: cambiamento dato che le funzioni
>>> months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] >>> print "You selected month %s" % months[3] You selected month Apr >>> VECCHIO METODO
Numeri
>>> months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] >>> print("You selected month {0}".format(months[3])) You selected month Apr >>> NUOVO METODO
Non uguale
Sotto la versione 2.x avremmo potuto fare un test di "non uguaglianza" con "<>". Tuttavia ci non consentito nella versione 3.x. L'operatore di prova adesso "!=".
Input
Un po' di tempo fa abbiamo avuto a che fare con un sistema di men che usava raw_input() per ottenere una risposta dall'utente della nostra applicazione. Qualcosa che andava cos:
response = raw_input('Enter a selection -> ')
Python 3.x +======================================+ arriva con una | Item 1 3.00 | utility che aiuta a | Item 2 15.00 | convertire +--------------------------------------+ un'applicazione 2.x | Total 18.00 | in codice conforme +======================================+ Script terminated. alla versione 3.x. Non funziona sempre ma vi ci porter vicini in Quando viene eseguito sotto la molti casi. Lo strumento di conversione viene chiamato "2to3". versione 2.x, l'output simile a quello mostrato sopra a destra. Prendiamo come esempio un programma davvero semplice. Naturalmente quando lo L'esempio sotto preso da eseguiamo sotto la 3.x non Programmare in Python Parte 3 di funziona. tempo addietro.
#pprint1.py #Example of semi-useful functions def TopOrBottom(character,width): # width is total width of returned line return '%s%s%s' % ('+',(character * (width-2)),'+') def Fmt(val1,leftbit,val2,rightbit): # prints two values padded with spaces # val1 is thing to print on left, val2 is thing to print on right # leftbit is width of left portion, rightbit is width of right portion part2 = '%.2f' % val2 return '%s%s%s%s' % ('| ',val1.ljust(leftbit-2,' '),part2.rjust(rightbit-2,' '),' |') # Define the prices of each item item1 = 3.00 item2 = 15.00 # Now print everything out... print TopOrBottom('=',40) print Fmt('Item 1',30,item1,10) print Fmt('Item 2',30,item2,10) print TopOrBottom('-',40) print Fmt('Total',30,item1+item2,10) print TopOrBottom('=',40)
Questo andava bene sotto la versione 2.x. Tuttavia sotto la 3.x otteniamo:
Traceback (most recent call last): File "<Stdin>", line 1, in <module> NameError: name 'raw_input' is not definited
Questo non un grosso problema. Il metodo raw_input() stato sostituito da input(). Semplicemente, cambiate la riga in:
indice ^
versione 2.x.
Proveremo a lasciare che l'applicazione di conversione lo sistemi per noi. Per prima cosa dovremmo creare una copia di riserva dell'applicazione che sar convertita. Io lo faccio creando una copia del file e aggiungendo un "v3" alla fine del nome:
Vi sono molteplici modi di eseguire l'applicazione. Il modo pi semplice lasciare che l'applicazione controlli il codice e ci dica dove sono i problemi, il che viene mostrato sotto a sinistra. Notate che il codice sorgente originale non cambiato. Dobbiamo usare il flag "0w" per dirgli di scrivere sul file i
Noterete anche che l'output identico. Questa volta, comunque, il versione 3.x? file sorgente (mostrato nella Molti dei problemi sono comuni pagina successiva) cambiato in un a qualunque cambiamento in un file "versione 3 compatibile". linguaggio di programmazione. I cambiamenti di sintassi abbondano Adesso il programma funziona ad ogni nuova versione. A volte come dovrebbe sotto la versione spuntano fuori dal nulla scorciatoie 3.x. E, dato che era semplice, come += o 0= e rendono la nostra funziona ancora anche sotto la
> 2to3 -w pprint1v3.py RefactoringTool: Skipping implicit fixer: buffer RefactoringTool: Skipping implicit fixer: idioms RefactoringTool: Skipping implicit fixer: set_literal RefactoringTool: Skipping implicit fixer: ws_comma RefactoringTool: Refactored pprint1v3.py --- pprint1v3.py (original) +++ pprint1v3.py (refactored) @@ -15,9 +15,9 @@ item1 = 3.00 item2 = 15.00 # Now print everything out... -print TopOrBottom('=',40) -print Fmt('Item 1',30,item1,10) -print Fmt('Item 2',30,item2,10) -print TopOrBottom('-',40) -print Fmt('Total',30,item1+item2,10) -print TopOrBottom('=',40) +print(TopOrBottom('=',40)) +print(Fmt('Item 1',30,item1,10)) +print(Fmt('Item 2',30,item2,10)) +print(TopOrBottom('-',40)) +print(Fmt('Total',30,item1+item2,10)) +print(TopOrBottom('=',40)) RefactoringTool: Files that were modified: RefactoringTool: pprint1v3.py
> 2to3 pprint1v3.py RefactoringTool: Skipping implicit fixer: buffer RefactoringTool: Skipping implicit fixer: idioms RefactoringTool: Skipping implicit fixer: set_literal RefactoringTool: Skipping implicit fixer: ws_comma RefactoringTool: Refactored pprint1v3.py --- pprint1v3.py (original) +++ pprint1v3.py (refactored) @@ -15,9 +15,9 @@ item1 = 3.00 item2 = 15.00 # Now print everything out... -print TopOrBottom('=',40) -print Fmt('Item 1',30,item1,10) -print Fmt('Item 2',30,item2,10) -print TopOrBottom('-',40) -print Fmt('Total',30,item1+item2,10) -print TopOrBottom('=',40) +print(TopOrBottom('=',40)) +print(Fmt('Item 1',30,item1,10)) +print(Fmt('Item 2',30,item2,10)) +print(TopOrBottom('-',40)) +print(Fmt('Total',30,item1+item2,10)) +print(TopOrBottom('=',40)) RefactoringTool: Files that need to be modified: RefactoringTool: pprint1v3.py
10
indice ^
secondo un bignamino di 4 pagine che ho scoperto essere un riferimento molto buono. Il terzo a ci che considero essere il miglior libro sull'utilizzo di Python (questo fino a che decider di scrivere il mio). Arrivederci alla prossima volta. Collegamenti Utilizzo di 2to3 http://docs.python.org/library/2to3 .html full circle magazine #42
Passare da Python 2 a Python 3 (un bignamino di 4 pagine) http://ptqmedia.pearsoncmq.com/i mprint_downloads/informit/promo tions/python/python2python3.pdf Dive into Python 3 http://diveintopython3.org
Greg Walters il proprietario della RainyDay Solutions, LLC, una societ di consulenza in Aurora, Colorado e programma dal 1972. Ama cucinare, fare escursioni, ascoltare musica e passare il tempo con la sua famiglia.
11
indice ^