From 5a8ddc6f1e7fc52c5cbca0483950b84db6bf446f Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sat, 25 Oct 2014 21:35:34 -0700 Subject: [PATCH 01/14] Finished dict_set_lab.py for session04 homework. --- Students/salim/session03/.mailroom.py.swp | Bin 0 -> 16384 bytes Students/salim/session04/.dict_set_lab.py.swp | Bin 0 -> 12288 bytes Students/salim/session04/dict_set_lab.py | 81 ++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 Students/salim/session03/.mailroom.py.swp create mode 100644 Students/salim/session04/.dict_set_lab.py.swp create mode 100644 Students/salim/session04/dict_set_lab.py diff --git a/Students/salim/session03/.mailroom.py.swp b/Students/salim/session03/.mailroom.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..ff45e89472383821d60dea169fa640e2f256205d GIT binary patch literal 16384 zcmeI2Tc{*Q8OO`SH8HxYBnlfrsGSjJhRn|8T*#iIC*o!e9%bXnIg_kmb{PB2)R}3w zr)%u4-jm6)Ufv9XFELM15FZ2+uP?bk9s&j8IGeA7(6cJa;m7CSphj zkKXpETzLBY*`3BX9JU*WPGcY^11D4sU#PU+w^D=6b8-+(gs;NPuf4%oO0T&yQ)B7# z>PoAqiDv%u+?`-a=XsByxQ_WC>p)38?YIEYaULfV9F`cCi+Fw=yt3XD9<7{=M z-J%`k(kXt|oeyV@*`HPctAJI&Dqt0`3RnfK0#*U5!24YRHNAy>8=bsm-qFYA-ybM^ z-#Y&vO9Xl|ciE=ge7F6w3RnfK0#*U5fK|XMU=^?mSOu&CRspMkRp9?n0SC|aPr|QH z&;kH%?#=!GwU06O7I+i94xR=P*al_rj}wf&41NWE34Q^d1m6P^?0`+M0nUI=gJa*!SBH{;5%Rp9t5l4-ydP@Z{V-sFW?pM9PmIH z{OJzHUINd8XTZb#N!R{vpPG4SozB2QzR1JOb9iJIByp@GAHTn1LN|0{s1h zjQs{Y0X_$gfj6)q^IPyV*ax2lC%|!V4Y7O%6@*Xqi!BB(AVR<>+9#CJU5VA#i@I*2@vQ+DYwo^`6| z5Q3g@C#SRt;}&1Z6fwq(7p4@?2YY$;FI2ke;N(2JQD7FD$Oom^|9L=6ujsqXL!r|A z*HhvDB4XSAWxRo3IYaO`@S0qIM{U7vSpz}EFth)>-QeCu@W z<%dR@PXjrbDjtOx#u(2783baWC|LqL8OV0t$oFoExR{oe6180-`yi>P8?OGTJ`ybNSaF}*vBb`u2Du(gcL$GM(VqxvEl;<`P;bYf5k<%?23^S48!_G z|6Ed~Bb-S|Hv?^W=>n2wIz^(pls`xdCk}EZjDmU5 zjG=SF3HX)G@G4r1bChz7Qb8LX37o`a6sF?H1OAySn=AE3>)>jG$Ck7P(7MWo0w+>r zJc;Gyg(&D2Ul}!mPzCNZb0&!Q^Lr4`q@9a?#b_Hwld6mJbQfp1RNG9Yi;Dizk&qtJ z)ml9*qRw@gp~+^bb0VHr=B3g2g9u`5t0QShAQU=y@J08sc!d{V+7&t(n@++;p_@Bz zuC(II)wCx_ySbm{97)-yPj^Q;PNF-*VPDBOyR-RMpLefT@GQ>W{yyGv&bdb}W{x4K zogfmqB1gMuTu!HGlvT5-h(p%u)u=OwcwFG^1ZRZwBX}> z)?IJ4>U@Jf@T=A8_2O(K(c`UKIZNa90zO=45>lPDbre6dvDWL=nJH!pcSL|Q>)ymw zV=8)P9VQn`eOZoulF@e3tv32a6-c<{GcV;~`BXCsgXX^LH-&$hPxV{&jPC#6!M*ej?z`#!-#p*{ zBku9P3+@A3;8WnAxPN~Gya=v<6>v8=34VwAPk?U#vh`J9H>-eEz$#!BunJfOtO8a6 ztAJI&D)4?*AbYd8xK3t{nj?jUHFG$Apph==;BGlyM~iR5@vJL(DwA1{q1s7Fx`D=R zV|IliIkv+!}?!wrX6Dpl25O)oAcf#=DpeSW1LYcs|h`d(aZ I&ac(~2f+3$6#xJL literal 0 HcmV?d00001 diff --git a/Students/salim/session04/.dict_set_lab.py.swp b/Students/salim/session04/.dict_set_lab.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..62aa4ba9bd392bcb2c139ab414593fa7089550d7 GIT binary patch literal 12288 zcmeI2J!~9B6vro2;UfVN2}IINxMKGtXYX$Bh$Bl$B%m?GBFH9TW$ ze7YHSFD$RfMQ#a5~q<$bx6klzE;W4oLG7Gyce0U=WQ!5 z$kRX>>t))`=Dj`(*m*t=%2a38%-yX9QJyEA^Aj88nRNYbZ_w^6XST@K^7>(C)s|s3 zs|wXI+L$=cx`R#_2X@nFyP2q=H=fLr@*OL{3J6i!(TP)sMBndqNsiXj$K{d7Utwif z0akz&UumY?AE5HiehYBeCwto!2_3u1{#pCz?>G%I%9u?we@Dum|ybrE{HSi*M0r;Q= zj)JGaUx(ojegr>&Z@`z}3-B?x32uO0P=HI|C2$HXf|KCZAt8PP--EBgSKtP?4&DSQ zNWcYf7Mua6!Jm%^@dx+>dbnfE8c`SOHdm6<`JKxdJhr(v+vA z+8h^gW@R-N^?gY;A!aTZdT`Q((SgN5Pj^TjZBaQ^LCB-b=1ih;fo)XeS9J!v>!hks zbf(m4E!n!;bq?oFaYS`+H=kAu+L?hD8&eJ`yz$$@ z^lu-xWDx0Ki_#m>s9*-uoBs61$AW5!Y@{1!Gia7wsO+M4y9?3>gEl3(lci4<|4tSk zmX=J_mX)0`|DeJvVrWERZ?o44=ytl#zN~+UP#y$YKx3Bi6g`@Y7SE4 zwwFXm``LL7Yb=e1RoYwzg;rKeB{RJ(>F}@Ij%_3jPAgM1BZsAxS(y%XA@h+$CPSgC z>`;1td+YC6-;e~Q^zPMo>?Zz#M3qTR3}q4l=vE?2|&(JH#wm=y9P9&Os}BDe#4eR#CS>?<8fPpN01zm0i-T_so7b z?(eyAX9ZoCJ59N2SzSsU8#%S9SxKpFNrSUOH~|{1nb`Q(PZSl70?s+36{wn3vdC2@Ia&Y>N!+8TL1in9`&n}p% Date: Sat, 25 Oct 2014 21:37:49 -0700 Subject: [PATCH 02/14] class notes modified --- Students/salim/notes/.class_notes.py.swp | Bin 0 -> 4096 bytes Students/salim/notes/class_notes.py | 90 ++++++++++++++++++ Students/salim/session03/list_lab.py | 1 + Students/salim/session04/.dict_set_lab.py.swp | Bin 12288 -> 12288 bytes Students/salim/session04/dict_set_lab.py | 3 + 5 files changed, 94 insertions(+) create mode 100644 Students/salim/notes/.class_notes.py.swp mode change 100755 => 100644 Students/salim/session03/list_lab.py diff --git a/Students/salim/notes/.class_notes.py.swp b/Students/salim/notes/.class_notes.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..e1ce5017c2bc78a6bf4f9cdc35b1066b42f373a2 GIT binary patch literal 4096 zcmYc?2=nw+FxN9-00IF9hBKP(A&yp48O%8u7>W~fGIKK$b5m15lDI)INL{h6uTy|t zMsbRvUU{Nka(-@dVsVLHUTO(KUme0geV6>?(%jU%l42xQaB@a|evW=XWl2VUo`Qyv zfuV_}zGq%ZQGQ51L{LAtq%;Mr3v85rUVcexv3_z+VsUXin5|b(iLh^!H5vk=A%GkL zybQ)hh6W%JWhF%gVWCiD$x-%b2#kinXb6mkz-S1JhQMeDjE2By2#kinFb@F$OPM?s literal 0 HcmV?d00001 diff --git a/Students/salim/notes/class_notes.py b/Students/salim/notes/class_notes.py index 32b6b7e0..0f7e014d 100644 --- a/Students/salim/notes/class_notes.py +++ b/Students/salim/notes/class_notes.py @@ -643,3 +643,93 @@ def func(c, list=[]): # this is wrong because it dones't create a function le return list.append(c) +############################## SESSION03 ############################## +""" +you almost never have to loop through sequences using range() +- zip() will zip lists together +- unpack embedded squences using this construct +""" + +a_list = [(1,2), (3,4), (5,6)] + +for i, j in a_list: + print i + print j + +""" +enumerate allows you to get the indix while you are looping through a sequence +""" + +for i, item in enumerate(a_list): + print i + print item + +""" +buidling up a long string: + - one option is to continue to keep += to the string. however, this is + an inefficent process + - a better way is to build a list, then use " ".join(list) + +sorting data: + - when you + +""" + +fruits = ['Apples', 'Pears', 'Grapes'] +numbers = [1, 2, 3] +combine = zip(fruits, numbers) + +def sort_key(item): + return item[1] + +combine.sort(key=sort_key) + +""" +you can build up strings for formatting before you subistiute values in +""" + +s = 'Hello ' + '%d' * 4 +print s % (1,2,3,4) + +""" +dictionaries: + - create a dict with d = {} + - keys don't have to be the same type and values don't have to be the same + type + - keys can be any immutable object (technically "hash" objects): + - number + - string + - tuple + - dictionaries are unordered (due to the way they are built using hasing) + - dictionaries are very effecicent + +dictionary methods + - dict.setdefault() <-- will use this in the homework + - dict.iteritems() <-- will not return a list + +hashing: + - missed this so read the class notes +""" + +""" +Exceptions: + - you can use "finally" at the end of an exception, which will always get + run + - they also have an "else" which will run if there is no exception +""" +# never do this! this doesn't give you information about the exception +try: + do_something() +except: + print "something went wrong." + +""" +reading and writing files: + +text files: + - f +""" + +f = open('secrets.txt') +secret_data = f.read() +f.close() diff --git a/Students/salim/session03/list_lab.py b/Students/salim/session03/list_lab.py old mode 100755 new mode 100644 index efc1e803..fe3dbc16 --- a/Students/salim/session03/list_lab.py +++ b/Students/salim/session03/list_lab.py @@ -1,5 +1,6 @@ #!/usr/bin/env python + # print original list a_list = ['Apples', 'Pears', 'Oranges', 'Peaches'] print a_list diff --git a/Students/salim/session04/.dict_set_lab.py.swp b/Students/salim/session04/.dict_set_lab.py.swp index 62aa4ba9bd392bcb2c139ab414593fa7089550d7..c4179beab6c45ef3903a3beef187bd795139c4ef 100644 GIT binary patch delta 89 zcmZojXh;xCG6?hZRWR2xVE_UF1_pyFpO8$ijbgv}8ACP;3Vi10<>6#tsNjOg0)-U3 i8M&%}+)5y>;M&Z{!p+H*8DE@QqF@VDv$ Date: Sat, 25 Oct 2014 21:38:43 -0700 Subject: [PATCH 03/14] python compiled program --- Students/salim/notes/.class_notes.py.swp | Bin 4096 -> 16384 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Students/salim/notes/.class_notes.py.swp b/Students/salim/notes/.class_notes.py.swp index e1ce5017c2bc78a6bf4f9cdc35b1066b42f373a2..7edb8eaf6a7f6f77c4652f91a987085eaca073be 100644 GIT binary patch literal 16384 zcmeI3U5sQ!700iD;s*=HjTi~hqDL}4Y?~_$7jc2v-O=6I$i+qMy*=;nywneaUf1vG zw%mO4&x+Jb>qo9xZgkW3Ok?0TT5+%Cr&%M?*{I!}BZ1S`#jU)jqbwb}T4{CTIGkSI z%(`);sqb!M6V_P`AlI3mF%7~hd;!LO0t;;zs5B&H-&-)R01Uv{5um+BUL*OG| z7F59pz;hpcmaG5JP9_z1{i=Y zXoE%20NcS|-|l(OgWrMYz(e56;7i~>a5vZiUOM0No&w(o-vp0>2f+Q{v*0!`03Qbj z!2z%UJ_`1M=ilaep9lNED{n;xSOyn>r_b}e$H6B+9lT6(}U zgA2hk=)upy6QBn~FK!0^z^SoFBCsR?btMD8JQ;^T^dr zH`7e_-l(p<$r+=k*xasx%lyg-M5Po!EA^!2p7}Z@5!!Kl7V@s+DxkIz+0UhoQ=1 zvnT`I^i(tPqgJ;l>hXpTgivAm+J(tdD55VaaEemCyv zL7bd26;Zi?Z*M*6=MpDZXK&(9G@}0d7nq2Ku4jVysRu610yp zn9{;@(K|6pAxRX!>kEgY*$49S76vF%GF24@pdJOKVz)Bo9l$L0hTrRlMiCO!psm#) zKn;xzU>BRkLZqr%L5tDw$`n;lWHankHFY-7Xdm(nX7JKD^v5{gk#1umesSjoj!K* z7Sy7j^d7|n(_OmRYsR5*c186u%hVgXm1k&xD%#d$RYq=uVk0qb8s}JVYBXNv2GDtxBqf3U0iL-vx z%EHPDRd>#+v(}rit5Uy`9cVY01G~U1nDNw3rPK`Ir=nPKTTxA2>8Ty{di@RIsoT{u z*aR8qf*3^V_OrDzda}B3{i<3yym;;6(m`48pmtJSrB2oYr6w$kDa5weybNKd{V>;J zMkkFj2Cn|@+MG9G{T6o0YmX?G>g8b;gkm#x!Ld2#@r>KS33#4QXHDs<85@@`KE7#; zKhZci<7u72r_yS-X|elErGp-2HVdn0^sIYWyC=nU-}P=hNK?~MF8fG~ewoSCR5Q<1 zJJxA5DV~8X5No#jLalae6$@>#@{DGoK1)Ye)j&Mcumc=W-@YRnq_!?4y%^6K;>&Y? zU8l9N+TwzSPRfoLik+(ycctwB-(1#^R;oImb(+n|Z-&}68jTGnv1Q`JdAaqH*IrfJ z*NIQxcKk&L;(S|il=)0ZTwRp+n(VNsK?<2{Kn#|-g`8*jQBx3XtE8S2F|Sk?>mSJZ z0*1x)n%%`LL28X{<%T2I96h{(682g5OjX1}Py6UwkXCAHZp*6YshG6XF((so^$==W z8vkqNvvuq3%K^-)a-;|5C}YfE`PkwTcCfmCb>YaulDN)YYKPh*nn?o`SvoiMiR zVfJm?sLY<}c>>p>}`i6Vt%)i?sCH|k6*p%2+;{U^Z$>+Po^Ah`i3p@z!1Tl!fNpKXL z2VNv@e-b#1(Ym$p4l;||b;kGI6@Poi6s!rMpX(QXnCa1;@?5d+YIdZE`K;*y)QCiw) zr>zD_U?LxPPY$T&euo_8=wz1RO?ieu-zcz#6(g~@$ zTvcakv$b8dIgFj!lZQ09QZ-2yWb*R%B&lEi6s4~G#sw}!xN&&|QO6r+ZZf&&qDEB; zVbgOm81t<`zuHOiAd?i7Nl~R!p1a`ojWabhTT{Dk@@yq3n%v))jK*Y5O)hIcF&76( z$WwHaov$OccyQ!N|Kh*I6%Gx@m+Za-&7yM{zpS9)hlf~9y(Wtpp?z38PrXj^Afzhg zg$kldu+ZTNp!hkS`VrT=44xv3fr}M`ae^fg7erRgPifs(JFY4;-Y!K$Qf=Y^rCSC= zHj=@#$>^-hddYJ&u54YW1;Vv;y27fNvis?=iYkx{yzWVgO~a?82zAw8GgE*AS;}Gg qmZx2KDWl0j)DAYpi`hpg#wK~}V{#5zH;MCgdE%GKLpYv|djAC5ojx4^ delta 7 OcmZo@U~EuWAOHXgJOWYx From 59e900870cc2b275db5fe5349b0ef6b413d8f2a0 Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 26 Oct 2014 13:43:52 -0700 Subject: [PATCH 04/14] added exception lab --- Students/salim/notes/.class_notes.py.swp | Bin 16384 -> 0 bytes Students/salim/session03/.mailroom.py.swp | Bin 16384 -> 16384 bytes Students/salim/session04/.dict_set_lab.py.swp | Bin 12288 -> 0 bytes Students/salim/session04/dict_set_lab.py | 3 --- Students/salim/session04/exception_lab.py | 11 +++++++++++ 5 files changed, 11 insertions(+), 3 deletions(-) delete mode 100644 Students/salim/notes/.class_notes.py.swp delete mode 100644 Students/salim/session04/.dict_set_lab.py.swp create mode 100644 Students/salim/session04/exception_lab.py diff --git a/Students/salim/notes/.class_notes.py.swp b/Students/salim/notes/.class_notes.py.swp deleted file mode 100644 index 7edb8eaf6a7f6f77c4652f91a987085eaca073be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI3U5sQ!700iD;s*=HjTi~hqDL}4Y?~_$7jc2v-O=6I$i+qMy*=;nywneaUf1vG zw%mO4&x+Jb>qo9xZgkW3Ok?0TT5+%Cr&%M?*{I!}BZ1S`#jU)jqbwb}T4{CTIGkSI z%(`);sqb!M6V_P`AlI3mF%7~hd;!LO0t;;zs5B&H-&-)R01Uv{5um+BUL*OG| z7F59pz;hpcmaG5JP9_z1{i=Y zXoE%20NcS|-|l(OgWrMYz(e56;7i~>a5vZiUOM0No&w(o-vp0>2f+Q{v*0!`03Qbj z!2z%UJ_`1M=ilaep9lNED{n;xSOyn>r_b}e$H6B+9lT6(}U zgA2hk=)upy6QBn~FK!0^z^SoFBCsR?btMD8JQ;^T^dr zH`7e_-l(p<$r+=k*xasx%lyg-M5Po!EA^!2p7}Z@5!!Kl7V@s+DxkIz+0UhoQ=1 zvnT`I^i(tPqgJ;l>hXpTgivAm+J(tdD55VaaEemCyv zL7bd26;Zi?Z*M*6=MpDZXK&(9G@}0d7nq2Ku4jVysRu610yp zn9{;@(K|6pAxRX!>kEgY*$49S76vF%GF24@pdJOKVz)Bo9l$L0hTrRlMiCO!psm#) zKn;xzU>BRkLZqr%L5tDw$`n;lWHankHFY-7Xdm(nX7JKD^v5{gk#1umesSjoj!K* z7Sy7j^d7|n(_OmRYsR5*c186u%hVgXm1k&xD%#d$RYq=uVk0qb8s}JVYBXNv2GDtxBqf3U0iL-vx z%EHPDRd>#+v(}rit5Uy`9cVY01G~U1nDNw3rPK`Ir=nPKTTxA2>8Ty{di@RIsoT{u z*aR8qf*3^V_OrDzda}B3{i<3yym;;6(m`48pmtJSrB2oYr6w$kDa5weybNKd{V>;J zMkkFj2Cn|@+MG9G{T6o0YmX?G>g8b;gkm#x!Ld2#@r>KS33#4QXHDs<85@@`KE7#; zKhZci<7u72r_yS-X|elErGp-2HVdn0^sIYWyC=nU-}P=hNK?~MF8fG~ewoSCR5Q<1 zJJxA5DV~8X5No#jLalae6$@>#@{DGoK1)Ye)j&Mcumc=W-@YRnq_!?4y%^6K;>&Y? zU8l9N+TwzSPRfoLik+(ycctwB-(1#^R;oImb(+n|Z-&}68jTGnv1Q`JdAaqH*IrfJ z*NIQxcKk&L;(S|il=)0ZTwRp+n(VNsK?<2{Kn#|-g`8*jQBx3XtE8S2F|Sk?>mSJZ z0*1x)n%%`LL28X{<%T2I96h{(682g5OjX1}Py6UwkXCAHZp*6YshG6XF((so^$==W z8vkqNvvuq3%K^-)a-;|5C}YfE`PkwTcCfmCb>YaulDN)YYKPh*nn?o`SvoiMiR zVfJm?sLY<}c>>p>}`i6Vt%)i?sCH|k6*p%2+;{U^Z$>+Po^Ah`i3p@z!1Tl!fNpKXL z2VNv@e-b#1(Ym$p4l;||b;kGI6@Poi6s!rMpX(QXnCa1;@?5d+YIdZE`K;*y)QCiw) zr>zD_U?LxPPY$T&euo_8=wz1RO?ieu-zcz#6(g~@$ zTvcakv$b8dIgFj!lZQ09QZ-2yWb*R%B&lEi6s4~G#sw}!xN&&|QO6r+ZZf&&qDEB; zVbgOm81t<`zuHOiAd?i7Nl~R!p1a`ojWabhTT{Dk@@yq3n%v))jK*Y5O)hIcF&76( z$WwHaov$OccyQ!N|Kh*I6%Gx@m+Za-&7yM{zpS9)hlf~9y(Wtpp?z38PrXj^Afzhg zg$kldu+ZTNp!hkS`VrT=44xv3fr}M`ae^fg7erRgPifs(JFY4;-Y!K$Qf=Y^rCSC= zHj=@#$>^-hddYJ&u54YW1;Vv;y27fNvis?=iYkx{yzWVgO~a?82zAw8GgE*AS;}Gg qmZx2KDWl0j)DAYpi`hpg#wK~}V{#5zH;MCgdE%GKLpYv|djAC5ojx4^ diff --git a/Students/salim/session03/.mailroom.py.swp b/Students/salim/session03/.mailroom.py.swp index ff45e89472383821d60dea169fa640e2f256205d..06352d29b7dc31792cce951a83e1c653da694ea7 100644 GIT binary patch delta 15 WcmZo@U~Fh$oFKuZ!o5-InLPj|Fa*p1 delta 15 WcmZo@U~Fh$oFKtu&bd+QnLPj|m;~Jb diff --git a/Students/salim/session04/.dict_set_lab.py.swp b/Students/salim/session04/.dict_set_lab.py.swp deleted file mode 100644 index c4179beab6c45ef3903a3beef187bd795139c4ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2J!~9B6vro2d?bKC0wpvrT(NtSb02$099c4vfF>apk!;df#+uumV@KYPV`nzb zIRZ-*&_ETG3MB$jfJBW1f({Bw5H++w0ihus;{SH{@DYXBMVg3N>8IV9_h#PA|Gl+* z+8OmOoLQm8&QRcbREXZrxix+EeX;m}5Jo0Cjb*ALHvadu%6{g=%5&#Cv5ESfZP^L) zG?d16GG+J1y|Fi8_k}zxQrM(1_~Eu(5w zHC5LrV|1SNhTTYqcGD=knaELRGTjU6o}26kNHSiKR1s1_caN~#&zk?sZH{fe<4O|6p zffOX*0yqtx1{aFW7AOG2HV3(# zWx$r;c9sB^7Nv4ak&O#A3vjnIAY9R4eM?O@5dES|N`>>mWroC9Xg$sgf^DI;kj@B4 zh&6H!QscLmM8x~K{5sZH8U-uaoWep$t4LC&wuuk_(zdoS8Jt$;*$jTnW!xCV|B^r zJ;I+g;749!5-inuTHnAt%|3amdWRTAg_;z~;2gB%mjXYCcolUS^iOj1`B8WeQtGj0 z{bvrk@nGMLdn>5A+-uTR%j$DzZD?kbdnx6zWerXX;e{x)W? zGe_D?5;?8R+$jXCbCKumvpm-?P1J|$x;HLLZ9Oi+W`zikKLjK*f|dnl&i{!$dl`AC zN>Fs`^}0DH=uoJ=dJLzI*FQg?&-LnMs6}syyyxRW8*hQUP}?bYtfF*nqN*;|qVmbZ mJV8Z!T;@&s>Y_PVsrL8HSnGJVG(~r$v#!c6(xf_NFa8E3DD;#7 diff --git a/Students/salim/session04/dict_set_lab.py b/Students/salim/session04/dict_set_lab.py index fb2e2cc2..81abd531 100644 --- a/Students/salim/session04/dict_set_lab.py +++ b/Students/salim/session04/dict_set_lab.py @@ -79,6 +79,3 @@ print u_set print i_set - - - diff --git a/Students/salim/session04/exception_lab.py b/Students/salim/session04/exception_lab.py new file mode 100644 index 00000000..233e4806 --- /dev/null +++ b/Students/salim/session04/exception_lab.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + + +def safe_input(): + try: + return raw_input('Type ^c or ^d to raise an error.') + except (KeyboardInterrupt, EOFError): + return None + +if __name__ == '__main__': + safe_input() From 5b240763c5b7314d40b57d3630279978cb715ddf Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 26 Oct 2014 16:54:01 -0700 Subject: [PATCH 05/14] Modified mailroom after reading solution to be better. --- Students/salim/notes/.class_notes.py.swp | Bin 0 -> 40960 bytes Students/salim/notes/class_notes.py | 6 + Students/salim/session04/.mailroom2.py.swp | Bin 0 -> 20480 bytes Students/salim/session04/mailroom2.py | 161 +++++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 Students/salim/notes/.class_notes.py.swp create mode 100644 Students/salim/session04/.mailroom2.py.swp create mode 100755 Students/salim/session04/mailroom2.py diff --git a/Students/salim/notes/.class_notes.py.swp b/Students/salim/notes/.class_notes.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..78fdbcc77e7804ba806063161ec26ec16120a18f GIT binary patch literal 40960 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 LmwXKs55>O$m%@Lq literal 0 HcmV?d00001 diff --git a/Students/salim/session04/mailroom2.py b/Students/salim/session04/mailroom2.py new file mode 100755 index 00000000..05169abc --- /dev/null +++ b/Students/salim/session04/mailroom2.py @@ -0,0 +1,161 @@ +#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python + +from textwrap import dedent + + +def create_donation_list(): + """Build inital list of donors.""" + d_list = [['Salim Hamed', [100, 900, 1500]], + ['Iris Marlin', [300]], + ['John Doe', [200, 1904343]], + ['Terry Smith', [850]], + ['Bill Williams', [450, 894]], + ['Richard Sherman', [500, 900, 50000]]] + return d_list + + +def inital_prompt(): + """Display inital prompt and return user response.""" + prompt = dedent(""" + Hello, what would you like to do? + + 1 <- Send a Thank You Letter + 2 <- Create a Donation Report + q <- Quit + + """) + return raw_input(prompt) + + +def thank_you(donor_list): + """Prompt for name and add donation amount to history.""" + + # prompt user for donor name + name_prompt = dedent(""" + Enter donor's name. + ('b' to go back or 'l' for donor list) + """) + response = raw_input(name_prompt) + + # remember if donor is in list + donor_in_list = in_list(response, donor_list) + + # evaluate user responses + if response.lower() == 'b': + return + + elif response.lower() == 'l': + list_doners(donor_list) + + else: + # ask user for donation amount + while True: + amount_prompt = dedent(""" + How much money was donated? + ('b' to go back) + """) + amount = raw_input(amount_prompt) + + # exit function if user wants to go back + if amount.lower() == 'b': + return + + # convert entry to float + try: + amount = float(amount) + except ValueError: + print '\nInvalid Entry! Please Try Again.' + else: + break + + # add donation to history + if donor_in_list: + send_mail(response, amount) + add_existing_donor_to_list(response, amount, donor_list) + return + else: + send_mail(response, amount) + add_new_donor_to_list(response, amount, donor_list) + return + + +def send_mail(name, amount): + """Print thank you letter for donation.""" + email = dedent(""" + Dear {:s}, + + Thank you very much for your generous donation of ${:,.2f}. We + appreciate your thoughtfullness and we will make sure your donation + goes to the right cause. + + Kind Regards, + Donation Team + """) + print email.format(name, amount) + + +def list_doners(d_list): + """Print the current list of donors.""" + for doner in d_list: + print doner[0] + + +def in_list(name, d_list): + """Return True if donor is in donation list.""" + for item in d_list: + if str(item[0]).lower() == name.lower(): + return True + return False + + +def add_existing_donor_to_list(name, amount, donor_list): + """Add donation amount to list of historical dontations.""" + for donor, donations in donor_list: + if donor.lower() == name.lower(): + donations.append(amount) + return donor_list + + +def add_new_donor_to_list(name, amount, donor_list): + """Add new donor and donation amount to list of historical dontations.""" + return donor_list.append([name, [amount]]) + + +def display_report(d_list): + """Print Donation Report.""" + # create report header + header = '\n| {:<30s} | {:>21s} |'.format('Donor Name', 'Total Donation') + border = '=' * 58 + + # print header + print header + print border + + # print lines + for name, donations in d_list: + line = '| {:<30s} | ${:20,.2f} |'.format(name, sum(donations)) + print line + + # print final board below lines + print border + + +if __name__ == '__main__': + # get donation list + donation_list = create_donation_list() + + while True: + # capture user response from inital prompt + response = inital_prompt() + + # exit program if user enters 'q' + if response.lower() == 'q': + break + # send thank you letter + elif response == '1': + thank_you(donation_list) + # create a donation report + elif response == '2': + display_report(donation_list) + else: + print 'Invalid Entry! Please Try Again.' From 0186453ecb4586e2039cc7f2ab1f6216c0e0a989 Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 26 Oct 2014 18:22:48 -0700 Subject: [PATCH 06/14] finished files lab. --- Students/salim/notes/.class_notes.py.swp | Bin 40960 -> 0 bytes Students/salim/session04/.dict_set_lab.py.swp | Bin 0 -> 12288 bytes Students/salim/session04/.files_lab.py.swp | Bin 0 -> 12288 bytes .../{.mailroom2.py.swp => .kata_14.py.swp} | Bin 20480 -> 12288 bytes Students/salim/session04/files_lab.py | 48 ++++++++++++++++++ Students/salim/session04/kata_14.py | 3 ++ 6 files changed, 51 insertions(+) delete mode 100644 Students/salim/notes/.class_notes.py.swp create mode 100644 Students/salim/session04/.dict_set_lab.py.swp create mode 100644 Students/salim/session04/.files_lab.py.swp rename Students/salim/session04/{.mailroom2.py.swp => .kata_14.py.swp} (58%) create mode 100644 Students/salim/session04/files_lab.py create mode 100644 Students/salim/session04/kata_14.py diff --git a/Students/salim/notes/.class_notes.py.swp b/Students/salim/notes/.class_notes.py.swp deleted file mode 100644 index 78fdbcc77e7804ba806063161ec26ec16120a18f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 literal 0 HcmV?d00001 diff --git a/Students/salim/session04/.files_lab.py.swp b/Students/salim/session04/.files_lab.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..e1cd0e0daa6c5dc8fb831220df7f6c16fa29bc17 GIT binary patch literal 12288 zcmeI2O^X{h7{`_7);4L$(z{|4Jf<6syDXy{>M6}L_>V`L=k+Je!C0f-&1>8I zoY-WzK4fhE&Gt@f|67(EXUxi3KA+0D%KXEBzXsmUp54BDT}*A(7Y9;|&3r7a6I!{( z?@kjiy<*0Txzf%q-3`W5V`k~~BR4ggCmX%~W;ea2U1@eqoJ~3s4rg*CilZhY-4OvI5C|;Xvm~}zK7!R|9}1a|N9RZdjUO%9zwg&C1@S`7+QmlL%*G5>__Ma=qdCBdJKIH zO`siU09}C2K!2WK>}TjD^bC3ceFc@!E`+}**&1{T`s01ZeusX79zowh525?eJ?Km5 z3+M>C2z>&m=H zx-m_B%y~ZHGXQFy@{7C|(|MCnjW5HO)J(TILjGN*_4!d{)1bFTofWmPL3aDMge_*d zOFHYIU*`uOKiR};f-HL@SnkxkjD3Zv^$$#W+g4}j a#iX7|Z>rLtl(*@IIG2ucofhGgJ^Krmqsw{# literal 0 HcmV?d00001 diff --git a/Students/salim/session04/.mailroom2.py.swp b/Students/salim/session04/.kata_14.py.swp similarity index 58% rename from Students/salim/session04/.mailroom2.py.swp rename to Students/salim/session04/.kata_14.py.swp index 9011d7c04e96664455eb5504169414d465f49829..ee3547caef69bbcafbf496dca25ca1dd4bb001cc 100644 GIT binary patch delta 123 zcmZozz}S!=m1Gd+>8oI_XTksk0t^gEbA3bBm(O9)V4f(ojy*fEBr)F5WaC8%=FQKU zrFr-n8R~)Rm_UkwfO)c@fcWMNff@W0KR8TMV3C{7&%m%Bh(RVXgOxBa90c+YfWpF literal 20480 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 LmwXKs55>O$m%@Lq diff --git a/Students/salim/session04/files_lab.py b/Students/salim/session04/files_lab.py new file mode 100644 index 00000000..35c2d75b --- /dev/null +++ b/Students/salim/session04/files_lab.py @@ -0,0 +1,48 @@ +#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python + + +def read_file_to_list(a_file): + """Return a list of the lines in a file with newlines removed""" + # move file to begining + a_file.seek(0) + + # add lines to list + a_list = [] + for line in a_file: + a_list.append(line.strip()) + + return a_list + + +def parse_languages(a_list): + """Return a list of distinct languages.""" + a_set = set() + + # parse text file + for item in a_list: + # split students and languages + student_lang = item.split(':') + + # split languages + lang = student_lang[1].split(',') + + # add languages to set + for l in lang: + if len(l.strip()) > 0: + a_set.add(l.strip()) + + # convert to list + b_list = [] + for language in a_set: + b_list.append(language) + + # sort list + b_list.sort() + + return b_list + + +path_students = '../../../Examples/Session01/students.txt' +file_students = open(path_students, 'r') +list_students = read_file_to_list(file_students) +list_languages = parse_languages(list_students) diff --git a/Students/salim/session04/kata_14.py b/Students/salim/session04/kata_14.py new file mode 100644 index 00000000..e5671e95 --- /dev/null +++ b/Students/salim/session04/kata_14.py @@ -0,0 +1,3 @@ +#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python + + From 8b5264a41b44544649757c7d41c52369605464ef Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 26 Oct 2014 21:00:30 -0700 Subject: [PATCH 07/14] First version of Kata Homework. --- Students/salim/session04/.kata_14.py.swp | Bin 12288 -> 12288 bytes Students/salim/session04/kata_14.py | 100 +++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/Students/salim/session04/.kata_14.py.swp b/Students/salim/session04/.kata_14.py.swp index ee3547caef69bbcafbf496dca25ca1dd4bb001cc..ea5935cdb757c1f9dd908fb4dc1d027ba44638a9 100644 GIT binary patch literal 12288 zcmeHNJ!~9B6rMo%NkS5obbw&uEA}kxz4H%BFc<+skxs%8@?%ActkvA@oNse`JIBtP z9V<$Zpy5xVg94NSS}G7tia=5zXh1Yj5E@zvDu@J;;Cr*bXFEcoi?Sy9Dz4_jo zH)DC)&E?h-KkUvkJP$H<UT4yMHmcvVjz8Ly!CT}`swMV=a0EP?a#RD z!tJO*M`+_l(iGz^76KbDsLp60Bcn@SCptZ)!p5-;(^Cw1%Ldn?S%38|9|%P|JD7BeFc08yaPN3JPR~| z2Jq`X#y$r=11g0;8T$da47>*@KmacTF9A!yEHDE+1pIU#V;=zT1E+vTfQNzK?geMS72p!^ z2Jkv?7B~((20RMfxCb(TAAwJScYzMj2A%*80tbMb@XPnWcfe(U{A7J~8^&5?@}0~8 z-}DUQATpkbgVk6J>gn6_gN~Wv+KAYA>nis36puy&Pj!=$XOw3LPBIc#%l(acts zMe#-69tEMF>#;JuFwiEGVB5JEmr-hqal>An0jzbNpX_S zRhL^KiA|Y^vb0zZL(!3SXTq7{j+2Ppt|Q4F7HX-)*L#71)*%FN5&1lp1GOgkt0QHk z-lEgtj(b)GQN24h^^S^gn@Y>XVpuN5r<2LC69NxGD9Hg-tamdng+U~zxQu+%M>3rS z=Bb79mtKH#l6lo~z4Y;)x;;G*VOX*Niz8$I|JXoEYuuMz;&DyH zfoO*mT0xh4UW8kLp2rvAE6*ER8IE(>8O1T~KYCgkSNMK? zO@yO#&5@n-)HoVI$vT{dMp|dI1k#ZlBX23PV9Kg?(HGMZqtMj*asv|peP^uHmC1y= zL?tN&wH!pEOIaNm%Dbp16IO#Y8F5G&Hy|-{kt2GOB!4FG&+*6k+zQLY(;MSppL2de zU*PoPxR5&#rcQ)TZ5chYvf08U(L;>38PlrO);QX93Y!p6WWdurL;}l=n&i`bt_ZIh zS5dfOskRO!nn?_WBjy?-D+8t%OPTBgkk(C=5FgMmWg95)Bw|j+!pM@kL{%C))*YBV zX-GE$#M<#BTJo*SHsd<1h&S9U6vubJVm6y1PS~VgaF7w7)VpGcWbW6C1fR8Iwlq{=OtRhC@<+k_%wk?w*jj^5 zHN;Uu*bNlp@Cl>*yf1bXq)};PT=1T5rt|_?#Yu$>A&L2EB{{69kv$tx_e4g%8myr4 z)!@;QBTJmro+V@wUV5C?X_pRB>2E73wD3-HNXa$u_ZcVYKX2V~IV_}`;@|F#IUPLjLBJYS{GA3WHV@E8pW%`TF z;-t0MwA)7QP~*j*9b?Tmj*@Q>jeVWop?AAkO=B6y52Oa&m~{^~+CkJ9+FSPQU&JT& Ai2wiq delta 65 zcmZojXh;xCG6?hZRWR2xVE_UF28N`$z9H+&H;Vn@XJp= end_line: + break + + else: + # check if line starts with text in ignore list + start_with_ignore = False + for word in ignore_list: + if line.startswith(word): + start_with_ignore = True + break + + # only add line to list if it's non-blank and non-uppercase + if line and not line.isupper() and not start_with_ignore: + a_list.append(line) + + return a_list + + +def build_trigram(all_words): + """Return a trigram dictionary.""" + trigram_dict = dict() + for idx, word in enumerate(all_words): + + # only add words to dict if there are three words left + if idx < len(all_words) - 3: + + # build keys and values for dict + key = '{:s} {:s}'.format(word, all_words[idx + 1]) + value = all_words[idx + 3] + + # get or set the current_set for the given key + current_set = trigram_dict.setdefault(key, set([value])) + + # add new value to the current set + current_set.add(value) + + return trigram_dict + + +def print_trigram(trigram, start_words, num_of_words): + """Print trigram.""" + print start_words + + for i in range(num_of_words): + next_words = trigram.get(start_words) + if next_words: + start_words = next_words.pop() + print start_words , + else: + break + + +if __name__ == '__main__': + + # define variables + # path_book = ('/Users/salimhamed/Documents/Documents/School/' + # 'Python (2014)/downloads/sherlock_small.txt') + + path_book = ('/Users/salimhamed/Documents/Documents/School/' + 'Python (2014)/downloads/sherlock.txt') + + start_line = 0 # starting line of the file + end_line = 0 # ending line of the file + + num_of_words_to_print = 200 + start_words = 'I have' + + # read file to list + f = open(path_book) + f_list = file_to_list(f, start_line, end_line) + + # condense list to a single string + f_string = ' '.join(f_list) + + # strip white space and remove quotes + f_string = f_string.strip() + f_string = f_string.replace('"', '') + + # split single string into list of words + words_list = f_string.split() + + # build a trigram + trigram_dict = build_trigram(words_list) + + # print trigram + print_trigram(trigram_dict, start_words, num_of_words_to_print) From 68be21a3bed4eb6d57e9ec590824fac562378eec Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Tue, 28 Oct 2014 00:16:43 -0700 Subject: [PATCH 08/14] Finished first version of Trigrams. --- Students/salim/session04/.kata_14.py.swp | Bin 12288 -> 16384 bytes Students/salim/session04/kata_14.py | 74 +++++++++++++++++------ 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/Students/salim/session04/.kata_14.py.swp b/Students/salim/session04/.kata_14.py.swp index ea5935cdb757c1f9dd908fb4dc1d027ba44638a9..911fc2388d4303640ef9cb954e064c30e398ff36 100644 GIT binary patch literal 16384 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 Sju(-IkbE*b{tQPI&OZRqj{H9W delta 821 zcmZY6O=uHA6u|M9nyP7QH!4JIrH%>0MoJouVyy-hJm?{Q6fNFrVz(huldxH~ir55u z(P|N0s0X13y?UupkOtAbv%pauPJT5ZIE-!ja5^Y+b5spKi03Z$Za zhZ1UMWV-T10*DsOR`i0vi9u5>L$ zq^gNL#S>h`e(XaOUHI54QpSCZ;3E3agI)0A-71k6c#aB2a1t^2Fxw(B(?V}mCg%}@ zhE~isi~Ph7%;F(#Baa-SXhsv>H;GJQ7&dm}yHDgBp5ZR;U<_Aq8OP9#ppU!R#N^jX zk=Ll;I&w(j2o58GZPx33llhj4QR)w<=h&kF^N%J!Wr~pBRVkGNDaK%!RH>X z;WSck*VbYU=6RY|c!>(!r?S0MA09L~rEc$fRX6fxCTsOuW+rVW&z7Sh|1xKM&uGBS z2&n;MFq1WuoisDa)R0kd#^N0waUOTJ6^)^S(Ia(*RIQRKSV`0BAI_Nr1=aaaygm|F zS>xPdS|p##>*2qtnZdf)(jS)cRa{wSpw@3BZCH9;-LNyE>j(a8q*gl^3?6mQ%I1Z= iEC>f&==;wN=!;P&9%?V!;ef{zE01s4+~`!h_WlM^U$9>Q diff --git a/Students/salim/session04/kata_14.py b/Students/salim/session04/kata_14.py index 0c94b539..78862b0d 100644 --- a/Students/salim/session04/kata_14.py +++ b/Students/salim/session04/kata_14.py @@ -1,5 +1,7 @@ #!/Library/Frameworks/Python.framework/Versions/2.7/bin/python +import string + def file_to_list(a_file, start_line=0, end_line=0): """Read lines of file into a list. Ignore blank and all cap lines.""" @@ -43,7 +45,7 @@ def build_trigram(all_words): # build keys and values for dict key = '{:s} {:s}'.format(word, all_words[idx + 1]) - value = all_words[idx + 3] + value = all_words[idx + 2] # get or set the current_set for the given key current_set = trigram_dict.setdefault(key, set([value])) @@ -54,33 +56,65 @@ def build_trigram(all_words): return trigram_dict -def print_trigram(trigram, start_words, num_of_words): +def get_trigram_output(trigram, start_words, num_of_words): """Print trigram.""" - print start_words + trigram_output = start_words.split() + key_string = '{:s} ' * 2 + key_string = key_string.strip() for i in range(num_of_words): - next_words = trigram.get(start_words) - if next_words: - start_words = next_words.pop() - print start_words , - else: + # build the key to lookup the set of next words from dictionary + key = key_string.format(*trigram_output[i:i+2]) + + # get the set of next words + try: + return_set = trigram[key] + except KeyError: break + # randomly choose and remove a word from the set + next_word = return_set.pop() -if __name__ == '__main__': + # add the new work to the output list + trigram_output.append(next_word) - # define variables - # path_book = ('/Users/salimhamed/Documents/Documents/School/' - # 'Python (2014)/downloads/sherlock_small.txt') + return trigram_output + + +def clean_string(s, lowercase = False, punctuation = False): + s = s.strip() # strip whitespce + + if lowercase: + s = s.lower() # convert to lowercase + + if punctuation: + # create list with all punctuation + delete_characters = list(string.punctuation) + + # exclude some punctuation from being removed + delete_characters.remove('!') + delete_characters.remove('.') + delete_characters.remove('?') + delete_characters.remove(',') + delete_characters.remove("'") + + s = s.translate(None, ''.join(delete_characters)) + + return s + +if __name__ == '__main__': path_book = ('/Users/salimhamed/Documents/Documents/School/' 'Python (2014)/downloads/sherlock.txt') + # path_book = ('/Users/salimhamed/Documents/Documents/School/' + # 'Python (2014)/downloads/sherlock_small.txt') + start_line = 0 # starting line of the file end_line = 0 # ending line of the file num_of_words_to_print = 200 - start_words = 'I have' + start_words = 'I should' # read file to list f = open(path_book) @@ -90,8 +124,7 @@ def print_trigram(trigram, start_words, num_of_words): f_string = ' '.join(f_list) # strip white space and remove quotes - f_string = f_string.strip() - f_string = f_string.replace('"', '') + f_string = clean_string(f_string, lowercase = False, punctuation = False) # split single string into list of words words_list = f_string.split() @@ -99,5 +132,12 @@ def print_trigram(trigram, start_words, num_of_words): # build a trigram trigram_dict = build_trigram(words_list) - # print trigram - print_trigram(trigram_dict, start_words, num_of_words_to_print) + # get trigram list + trigram_list = get_trigram_output(trigram_dict, + start_words, + num_of_words_to_print) + + # print trigram list + print_string = ('{:s} ' * len(trigram_list))[:-1] + print 'Trigram of {:d} words:'.format(len(trigram_list)) + print print_string.format(*trigram_list) From f4bba979ab7ad532327b2f02fd021844372937b9 Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Tue, 28 Oct 2014 00:17:38 -0700 Subject: [PATCH 09/14] .swp files removed --- Students/salim/session04/.dict_set_lab.py.swp | Bin 12288 -> 0 bytes Students/salim/session04/.files_lab.py.swp | Bin 12288 -> 0 bytes Students/salim/session04/.kata_14.py.swp | Bin 16384 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Students/salim/session04/.dict_set_lab.py.swp delete mode 100644 Students/salim/session04/.files_lab.py.swp delete mode 100644 Students/salim/session04/.kata_14.py.swp diff --git a/Students/salim/session04/.dict_set_lab.py.swp b/Students/salim/session04/.dict_set_lab.py.swp deleted file mode 100644 index 9de0bede109a15d09cd9280d8c494f9a35f96775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2J!~9B6vrpf@D)HHfk>JOTkM`Nw|9F-f-HqdKob&+Ae%InvF3Ki?8^Ja&TPy% z0!tLoKoyh;r|^1r6e@^wZ7Edoyq5|K3_Y z-Ao4OPcO+6{jtDvuMj_MpIv$6%saxnRS2WfB#Tw1BQpN;vrK;G(WNKP^a*4g7K^)(4-0PrwJ@D!2^Z0&jvHP=Iyt0$2kN zf(L*Aze2C;;2ZEY_!ztmE`c`y>A4N~VFg$LR)7^?1y})AfECzPpsbSI%7kuhind)h zZP5(LlTuN)4<}t29a>!U^d>aa6OH4pN1e}^MB@V6MpbO<9PXZ*sY=nEQn!bH2Af4y z6nSofe$$0_p_Y-642`z7eo-m`o_8l3K4Ky-`#WwuROrlU(8oae|zK%y_*;5z%=rzJfj0 zM#Cy?A;U^5tEG~;-ja0rS8gRXmIk+#X*DA!wUv3DO>`xT4T(sGmTsa$>4TkZv~PYR z5|qMw+ezuA!Gc7VNlkQRnixw_v0ZWzf|M{pUzMfKBQMr3dvr$llLpkJEvCU@o2S(^ ztka#7mTFIkS+de)r48;uD|#vLg@|_1mcj5iMW3IA_aKu4(rozHK@T46dvJFNRadxO zx>{L13Y{1^v#Gt5QrVIQr-X1r6k0d2^KVBKC5{%Hb4DppHk*~B#FVL;Hf9*x=9azq6C;H0)&Kwi diff --git a/Students/salim/session04/.files_lab.py.swp b/Students/salim/session04/.files_lab.py.swp deleted file mode 100644 index e1cd0e0daa6c5dc8fb831220df7f6c16fa29bc17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2O^X{h7{`_7);4L$(z{|4Jf<6syDXy{>M6}L_>V`L=k+Je!C0f-&1>8I zoY-WzK4fhE&Gt@f|67(EXUxi3KA+0D%KXEBzXsmUp54BDT}*A(7Y9;|&3r7a6I!{( z?@kjiy<*0Txzf%q-3`W5V`k~~BR4ggCmX%~W;ea2U1@eqoJ~3s4rg*CilZhY-4OvI5C|;Xvm~}zK7!R|9}1a|N9RZdjUO%9zwg&C1@S`7+QmlL%*G5>__Ma=qdCBdJKIH zO`siU09}C2K!2WK>}TjD^bC3ceFc@!E`+}**&1{T`s01ZeusX79zowh525?eJ?Km5 z3+M>C2z>&m=H zx-m_B%y~ZHGXQFy@{7C|(|MCnjW5HO)J(TILjGN*_4!d{)1bFTofWmPL3aDMge_*d zOFHYIU*`uOKiR};f-HL@SnkxkjD3Zv^$$#W+g4}j a#iX7|Z>rLtl(*@IIG2ucofhGgJ^Krmqsw{# diff --git a/Students/salim/session04/.kata_14.py.swp b/Students/salim/session04/.kata_14.py.swp deleted file mode 100644 index 911fc2388d4303640ef9cb954e064c30e398ff36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeI3U5q6~6@Xie_yY)PA`iUO&XC-@?99D0!y0hnfFdjof4i{DiVSPhb8p?b&GhZQ zbobqvVRylQL6#o{MFl~HpwUDWqXu3SeFa~9GEv{a2PFX#U&M&tsp`MGvm+SA5baLB z+tbxmr%s(yRb6$uXL)A-;^pd`)=r1xG{^bD1-tj1eCq>F^UaQvc!59Ydjs8-n_C}y zC0{aq`2~Ag{iHkFTJu_+XwdPJv=!>KEO&D$uzg|F84YxpCY8VTcKT5iwD)YJ{U}t; zxtZCW+uMs_8b|vgo7mo)j=H9l5!Fs~lK4?Lv$MVGrJg&xvo+i(>#P5&El^t^v%o0r zO`m&;bN1ZqjHFCXY*X)f_tmv|Y75jBs4Y-ipteA5f!YGK1!@b_7WhB1Ksr3ZxrO$g zkhS^B?EI!<&V&QZab9+QFgxe@vdj8ZTcEZ;ZGqYXwFPPm)E1~MP+Oq3Ky88A0<{Hd z3%mg>;PGyM`7Ms~%M($K_y76+|EW_Q=NIre{0M#shhYw8VH+s;%{v|E5qKCP2;pMb z0cXKqPH~*4;YoM`z7G*B!kO^blO5+7_%S>VH^7kHS&#;Ck2w ze|v}HybQmFyPyv%Fa>{nyW>0uKZASW9ykOy!3HeAneg)49On=4Bs>B4!EQJm-U~0i z)p4GMpTnbYFWdvy!uwz+oCv?ij=ux3=l9^N@CZB%--d6&H{l_85WWEq!2R%b_!>x= z``|0^Ww;mafiJ-q;cmDK?u0wwDBKQTfZO0!_&j_LJ`10LPs69+lkf?+1#X5Ta2O83 zO|Sv$um%TV1SupC!;LV62tpV@0IP5V_|S(H=z)eVbYK}gxE@^iI2?fMUYx!#>yxSHYFA2X@01a5-ECm%=5m2p@rqVHaEk7s7|(0{9So5YC4VL9LS@aur8v zeqw(m_6Ba?C#hOcD>`-4EGZhL!%^DIFS~vxol;5a#i_d%#oc5|g`QC5J+@NSRhfJ!OPgdAW$Hv{(-VucModiN=&_G_2U;Wfa-NvRb)PYkfbZ z)*%9v7j{*w2hl;TZX89aPBzuqP>t3NksmgDV@>ZwA)oyu+G>pE-gt9zIhosfexStx za@p+VUJCqBPbnRCNe^|_3fdVBb=VwwY2RIrqSf4JvG%%31gXqWwvLL!DcV?6eea-d z7w#t)66voMJLcJ!#VpY5^ zjRQjK^raBdf zSc)Tz-+X52Me)E(n`e!ibjhFhcg!8A8q&^IVmgr_V~D{u8XmtwYXF&2`I^s*H;l$q zrFFVA;c|_#%j+tG@pAMqGssES`EfyH}e`gfOeDG-c6@9aL&Q2amMCadOx@`AuVESLQ5y4s=U%AP7!P!9d9$HZ-oR@V8%pi`Sl&sMsh)zEf9 z#3W|OnQ9Xy%8lFE?11jJ_P$;!sO{=r3!zBtC!ZJS?hl-g+jG{DcjTzRE_G7KH z41w-t&NMx_yFO(HJ3U&{nRV=?x>B93D({d+^n$4&d!W+cuCfziu>>%;?T9J*CQay5`{I#y z@(lSoYgx+_NY+r@tic$nc@8;?E5-jZFWHtELyl)UUY)zV0OhNqCV3v{&T3&&Td|Uw zRVs6FQH6c%Cp(uf4ZFyT@4)tj2awh@b;D!Hh-L zhoWI3tuqTnv!?cpvs!A=bbD3yVuqsXctcyJ7_MVWRc}-C7iP*8>%xqAZ1{s=6w3&c zbvz&PZfjrWFULGI+q=Y7bk5Zz`-Z;N%TwC>S=BL9B<;D@IqhXXY!A&>_KxiTA7kJ8 zEB3gu|Igp=zrx=B?;vr22jG6V4VK_q*ac_6bL{b-g~#AF=)eM;4llC5e*u09KY{PU zci<@84wt~Y;53jJz#VWDu7eq9!>RBRd;AySx9}9)33osbcELq(20X)l|7my#j=*8) z!TaG{*apwD*MAa@z+vdXG`v9jjSXI}C2cLYwm@xx+5)u&Y75jBC@diBIU5=^zgvYF zB$8)0pf+=3pAG5A+Uq|c;?R8eh~2f#7rRW^46?>5!ok@FxT+>A!e$v!*j!*~etOof zM~{jBnl)m%qBc#~@~0a3I3}#TWtrkewiPh}YDZG5O+x=yi*TDVS*R#8x%k5Bp3BNM ztK(Zwvr9IcBkQHA79D7naX>q)2Alpp_Y^*BbY(`oh$~VLFUkzv%Rp)=astT3L z|Glc&f4gqT9?o^u0+BD*9e94|x{YkNp9KrEwe`G|*$?*TmA7wY({@En%sNEK2$AqM>!4-}Z-V04T$GC_CZ|k*Eo>$sTevbGCBu$3G3c?0 Sju(-IkbE*b{tQPI&OZRqj{H9W From 1306b2a4d65a1ca8522cde0475dea47fd0b0ac1d Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Tue, 28 Oct 2014 09:47:16 -0700 Subject: [PATCH 10/14] added python program for paths and file procressing homework --- Students/salim/session04/paths_files.py | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Students/salim/session04/paths_files.py diff --git a/Students/salim/session04/paths_files.py b/Students/salim/session04/paths_files.py new file mode 100644 index 00000000..b9c9332a --- /dev/null +++ b/Students/salim/session04/paths_files.py @@ -0,0 +1,31 @@ +#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python + +import pathlib + + +def copy_file(source, destination): + # read cotents of source file + file_to_copy = open(source, 'r').read() + + # open new file and write contents of source file + file_to_write = open(destination, 'w') + file_to_write.write(file_to_copy) + + # close file + file_to_write.close() + + +# find file directory +file_path = pathlib.Path(__file__) +parent_path = file_path.parent + +# print files in directory +for f in parent_path.iterdir(): + print f + +# copy file +source = ("/Users/salimhamed/Documents/Documents/School/Python (2014)/" + "IntroToPython/Students/salim/session04/dict_set_lab.py") +destination = ("/Users/salimhamed/Documents/Documents/School/Python (2014)/" + "IntroToPython/Students/salim/session04/cp_dict_set_lab.py") +copy_file(source, destination) From edda034446d69f8754372e0e7d52dc793f0203e5 Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Tue, 28 Oct 2014 18:16:53 -0700 Subject: [PATCH 11/14] Class 5 notes. --- Students/salim/notes/class_notes.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Students/salim/notes/class_notes.py b/Students/salim/notes/class_notes.py index 7e5f4847..db83e41b 100644 --- a/Students/salim/notes/class_notes.py +++ b/Students/salim/notes/class_notes.py @@ -733,9 +733,25 @@ def sort_key(item): reading and writing files: text files: - - f + - f """ f = open('secrets.txt') secret_data = f.read() f.close() + + + +############################## SESSION04 ############################## + +""" dealing with "ordered" / "sorted" dicts """ + +# option #1 +import collections # package with tools for dealing with dicts +o_dict = collections.OrderedDict() # this will create an ordered dict + +# option #2 +sorted() # built in function that sorts iterables + + + From e63d857d51463bccbc7ad5f0ebf6a1bf20bf5cab Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sat, 1 Nov 2014 21:46:08 -0700 Subject: [PATCH 12/14] Added notes to class notes. --- Students/salim/notes/class_notes.py | 39 ++++++++++ Students/salim/session04/cp_dict_set_lab.py | 81 +++++++++++++++++++++ Students/salim/session04/kata_14.py | 2 +- Students/salim/session04/paths_files.py | 4 +- Students/salim/session05/keywords_lab.py | 33 +++++++++ 5 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 Students/salim/session04/cp_dict_set_lab.py create mode 100644 Students/salim/session05/keywords_lab.py diff --git a/Students/salim/notes/class_notes.py b/Students/salim/notes/class_notes.py index db83e41b..d134a7dc 100644 --- a/Students/salim/notes/class_notes.py +++ b/Students/salim/notes/class_notes.py @@ -753,5 +753,44 @@ def sort_key(item): # option #2 sorted() # built in function that sorts iterables +""" Advanced argument passing """ +# keyword arguments +def fun(a, b = True, c = False): + return + +# functional arguments + +def func(x, y, w=0, h=0): # positional arguments are tuples + # keywork arguments are dictionaries + print "%s %s %s %s" % (x, y, x, h) + +a_tuple = (1, 2) +a_dict = {'w':1, 'h': 2} +func(*a_tuple, **a_dict) # you can pass the tuple and dict in directly + +def func(*args, **kwargs): # you can recieve an undefined number of args + print args + print kwargs + +"""mutablility""" + +import copy # for making copies of objects + +copy.deepcopy() # this is how you make a deep copy + + +"""list comprehensions""" +l = [1, 2, 3] +[i * 2 for i in l] +[i * 2 for i in l if i > 1] # you can have an if statement here + +# searching 'in' a sequence is faster with sets because they are hash tables + +"""set comprehension""" + +"""dict comprehensions""" + + +"""testing in python""" diff --git a/Students/salim/session04/cp_dict_set_lab.py b/Students/salim/session04/cp_dict_set_lab.py new file mode 100644 index 00000000..81abd531 --- /dev/null +++ b/Students/salim/session04/cp_dict_set_lab.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + + +# #############################Lesson 1############################## + +# create dict +d1 = {'name': 'Chris', 'city': 'Seattle', 'cake': 'Chocolate'} +print d1 + +# delete entry for cake +del d1['cake'] +print d1 + +# add an entry to the dict +d1['fruit'] = 'Mango' +print d1 + +# display the values +d1.values() + +# display the keys +d1.keys() + +# is 'cake' a key in the dict? +'cake' in d1 + +# is 'Mango' a value in the dict? +'Mango' in d1.values() + + +# #############################Lesson 2############################## + +# create list from 0 to 15 +l2 = range(16) + +# create list with hex representation +s2 = [] +for item in l2: + s2.append(hex(item)) + +# zip lists into dict +d2 = dict(zip(l2, s2)) + + +# #############################Lesson 3############################## + +# use d1 to create a new dict with same keys but number of 't's in values +d3 = {} +for key, value in d1.iteritems(): + d3[key] = value.count('t') + + +# #############################Lesson 4############################## + +# make three sets +s2 = set(range(0, 20, 2)) +s3 = set(range(0, 20, 3)) +s4 = set(range(0, 20, 4)) + +# print the sets +print s2 +print s3 +print s4 + +# check sets +s3.issubset(s2) +s4.issubset(s2) + + +# #############################Lesson 4############################## + +a_set = set('Python') +a_set.add('i') + +b_set = frozenset('marathon') + +u_set = a_set.union(b_set) +i_set = a_set.intersection(b_set) + +print u_set +print i_set diff --git a/Students/salim/session04/kata_14.py b/Students/salim/session04/kata_14.py index 78862b0d..626d58c0 100644 --- a/Students/salim/session04/kata_14.py +++ b/Students/salim/session04/kata_14.py @@ -114,7 +114,7 @@ def clean_string(s, lowercase = False, punctuation = False): end_line = 0 # ending line of the file num_of_words_to_print = 200 - start_words = 'I should' + start_words = 'I did' # read file to list f = open(path_book) diff --git a/Students/salim/session04/paths_files.py b/Students/salim/session04/paths_files.py index b9c9332a..1297e761 100644 --- a/Students/salim/session04/paths_files.py +++ b/Students/salim/session04/paths_files.py @@ -1,4 +1,4 @@ -#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python +#!/usr/local/bin/python import pathlib @@ -25,7 +25,7 @@ def copy_file(source, destination): # copy file source = ("/Users/salimhamed/Documents/Documents/School/Python (2014)/" - "IntroToPython/Students/salim/session04/dict_set_lab.py") + "IntroToPython/Students/salim/session04/dict_set_lab.py") destination = ("/Users/salimhamed/Documents/Documents/School/Python (2014)/" "IntroToPython/Students/salim/session04/cp_dict_set_lab.py") copy_file(source, destination) diff --git a/Students/salim/session05/keywords_lab.py b/Students/salim/session05/keywords_lab.py new file mode 100644 index 00000000..5e75ea69 --- /dev/null +++ b/Students/salim/session05/keywords_lab.py @@ -0,0 +1,33 @@ +#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python + + +def func(fore_color='White', + back_color='Black', + link_color='Blue', + visited_color='Green'): + """Print colors.""" + s = ('{} ' * 4).strip() + + print s.format(fore_color, back_color, link_color, visited_color) + + +def func_args(): + """Print colors.""" + s = ('{} ' * 4).strip() + + print s.format(fore_color, back_color, link_color, visited_color) + + +# call the function with various parameters +func((1, 2, 3, 4)) # prints the tuple in the first argument + +func(*(1, 2, 3, 4)) + +args = (1, 2, 3, 4) +func(*args) + +kwargs = {'fore_color':'hey', + 'back_color':'there', + 'link_color':'how', + 'visited_color':'you'} +func(**kwargs) From 291a7264f8fde2a7c922eab9178667bc6ff89ffa Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 2 Nov 2014 18:56:45 -0800 Subject: [PATCH 13/14] Added session 5 homework. --- .../arg_test.cpython-27-PYTEST.pyc | Bin 0 -> 376 bytes .../test_codingbat.cpython-27-PYTEST.pyc | Bin 0 -> 3162 bytes ...est_pytest_parameter.cpython-27-PYTEST.pyc | Bin 0 -> 2190 bytes .../test_random_pytest.cpython-27-PYTEST.pyc | Bin 0 -> 3570 bytes .../test_random_unitest.cpython-27-PYTEST.pyc | Bin 0 -> 2111 bytes Examples/Session05/codingbat.pyc | Bin 0 -> 571 bytes .../test_count_evens.cpython-27-PYTEST.pyc | Bin 0 -> 7673 bytes .../test_mailroom.cpython-27-PYTEST.pyc | Bin 0 -> 9050 bytes Students/salim/session05/count_evens.py | 6 + Students/salim/session05/count_evens.pyc | Bin 0 -> 507 bytes .../session05/dict_set_comprehensions_lab.py | 59 ++++++++ Students/salim/session05/keywords_lab.py | 10 +- Students/salim/session05/mailroom3.py | 135 ++++++++++++++++++ Students/salim/session05/mailroom3.pyc | Bin 0 -> 4020 bytes Students/salim/session05/test_count_evens.py | 39 +++++ Students/salim/session05/test_mailroom.py | 26 ++++ 16 files changed, 270 insertions(+), 5 deletions(-) create mode 100644 Examples/Session05/__pycache__/arg_test.cpython-27-PYTEST.pyc create mode 100644 Examples/Session05/__pycache__/test_codingbat.cpython-27-PYTEST.pyc create mode 100644 Examples/Session05/__pycache__/test_pytest_parameter.cpython-27-PYTEST.pyc create mode 100644 Examples/Session05/__pycache__/test_random_pytest.cpython-27-PYTEST.pyc create mode 100644 Examples/Session05/__pycache__/test_random_unitest.cpython-27-PYTEST.pyc create mode 100644 Examples/Session05/codingbat.pyc create mode 100644 Students/salim/session05/__pycache__/test_count_evens.cpython-27-PYTEST.pyc create mode 100644 Students/salim/session05/__pycache__/test_mailroom.cpython-27-PYTEST.pyc create mode 100644 Students/salim/session05/count_evens.py create mode 100644 Students/salim/session05/count_evens.pyc create mode 100644 Students/salim/session05/dict_set_comprehensions_lab.py create mode 100755 Students/salim/session05/mailroom3.py create mode 100644 Students/salim/session05/mailroom3.pyc create mode 100644 Students/salim/session05/test_count_evens.py create mode 100644 Students/salim/session05/test_mailroom.py diff --git a/Examples/Session05/__pycache__/arg_test.cpython-27-PYTEST.pyc b/Examples/Session05/__pycache__/arg_test.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..264f9101544ef7d0a8597556cf9fabc10e2f6048 GIT binary patch literal 376 zcmYjMJx{|h5WS`)g%TDvHpU>Nx_nLubpQbiLP}Y(SRt_*M@}61F3|jBW_|!%QU$Pl z&-dPa_-_1lF#F6;R~G<~vh~MfT(aRcL&kRm1|S{{z6Zq^iV4I!gW^N%gYu!6!owq{ zM`71PfAe_`ciE+V1}WbfZAe#AQowv!w}XOo)Fsp{DWrLVs2piq&7JyiniTDE^jD=R zvmr9uHtOnR;%LkiTck->;MVUUzwigRW-4B}Jqk>WF7u>RnYgoQQ>u#apBJUMwMM+O zl-ue!JYSq$o`|Q4oL$+iDDF2&SsR5SQiwe6;!5zJvfqJM=@!2!ZPpld+t1~*5Wpb> F-Vb+YVg&#I literal 0 HcmV?d00001 diff --git a/Examples/Session05/__pycache__/test_codingbat.cpython-27-PYTEST.pyc b/Examples/Session05/__pycache__/test_codingbat.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a75522a6718f58d400168ab724458b2ee55abb24 GIT binary patch literal 3162 zcmd^>&u`pB6vyBG-gQ&@18B?57bLHQvPnoHRRXjK3gQwfCvb?6EN4CGI(Y4sXO?tD z!hs-e{43lza)Lhyi31WB_`Wx`w8h4gOi$poj-Za+k7b@3rmb#NL zbq|!AFH-k7Hd8mvv~poKU#{{vPW%UcJ05%@Bd+1#`s=F2tH z!SjPK(W=m_7tf92x#>CRAvQkSm=%ced>I@p;>5(MHeD!^Y=SWicSReoX%Ob-9;$(! zW{V^Way8F`M@e=NCP5m`lwnr_9UdxfF)yL^u6P4p9^`qJo0qu*;F^UdP><(Hn1%+8 zh#X>&rOIP4%ryv}jt#||RoxnHd1xjPdWO>I69i0;beP1mDP|Fk-p?kBnM#eWm3Al7 zEK5cYmu3ohy^Xc?&Ee>y)a2P-W|gA{kHgtKQF^qiG$X#YH4?9@jj)O^+{7D2d&mI} zL~{5v$B7y@s7pW5J-d%NwiV?a?1X~y<~ijnU<7FB-!8x|8@qu0L&A!JtOE8=r3$Vt zfxT|_RcU5n|E@H<2s=iqoBdFlVV2kH(cd=Q`|d z&<fmbtfv;y=s1 zf}sUZ5ERlbLr{Q{*1w7%ua_X`^P0XGoY~~Zw7r5kU6%WvMH!aj|M`Wt3Gd&aOz08H z&Hov=Wsm0X Tu-BR+*ln)RZMxYSwE6!hv|gf; literal 0 HcmV?d00001 diff --git a/Examples/Session05/__pycache__/test_pytest_parameter.cpython-27-PYTEST.pyc b/Examples/Session05/__pycache__/test_pytest_parameter.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..566806210883789351ca039a99242fcc116a56a2 GIT binary patch literal 2190 zcmd5-O>ZMb5Uug}bJj_ASzvcrka{JM#vI~gcasH#*&xV)OISJK5+Mz3cRL$M#2?_q89`O|*p3k=F6?+*uBxu8sd@dn9R9HpMF%fV1{HuIl-Di% zJ;1N|355VSMHzsoKo-DhWub>KslucNr}c%W0jCWRA$*T1O%ShvxCi0^h=(9HKvY50 z;4B2O31SPxZPG_rZLzfS*U5i|m0KViFo|Gt3&fisTX2o>cd7n0cG9Mnj^nqe(=Sm( zvr8+DW%7bgXPIPb#5kLA&8N~zoqi()qxC2{`uybZ17^okOO_f88u2tM$jBKvAF(0N z*`+GjD7|2*eI7;WUw9o25hYlBKcVL~QOxlU;NEc@kmqd_5yMMMTj<=-bC@Znz8#(m zHgL-^#z9QQEah=02i{9d#-iwcVWc))!?Scc#`h52Pt~xP%G{b8+VOC#RMvfQX~!yO z@#CG{r=9L+xz*}Kd1v>~V`93;(wJ1`J9}NiBJq$VOO&?J5mGxsw5bW|52`8sq~uR) zB>qG&&QQVYx96o&J+M`@?Km~1!mVkQ9t45gl-@I~lW342?5wMo&kAd4K}%C)*1=3B zeI3kQOhr5p=^p^DDlo@8fb$Amg)k4nJPHuLi6ax5BP8o)8G}r^u0o3B3jyB@DSHiY zUI+6P;g0mhvPdSaoLMi;9BGPo750&{YiU20Y1j&-{amJblhSG+>ab6>>(l}Ui3XNw zu9x|BQ6_L@eqWSvCY8bS(}MliudwkgK;-7Aw8??}G+cBO<~2&j`?~;gcT%f}4MHLS z&&6#7@5pUnuV;4Acqg7+KIxd~+frdYM%qrt#P5=_+cBN!iuJsEuVea-owV&3)u)|u z+`!24_er02s5JJ7uwXV(aD%k9uKKf%Dc7I*^FcLxJ+J?#uKwi-afC&Ex1=4EtmfL@ zK{FZhEK9VU>7kk;)1@V9V^A_E(#)p0aoo!k#uL?s5v6*-*t|NWs5Lq41;QDpKX(#@+V>OmV`fp*wxhJpXQAN~zK8~9ED literal 0 HcmV?d00001 diff --git a/Examples/Session05/__pycache__/test_random_pytest.cpython-27-PYTEST.pyc b/Examples/Session05/__pycache__/test_random_pytest.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..511760dec5edae61aaa2db9f91be7605090c1ab5 GIT binary patch literal 3570 zcmd5;OLH4V5bl*^SyJRj5)u+9V0oliaj+bdm_T6&m81d}Ral2dxr*9aYghI z!D|OG6FFG(ZD_aOM>PAGRii!PDf=>a&!Kzhuh3qFliQ2MiR^|Cf&?<8CnAuOIS&c&}elE>KWiwQuL96V$ zW#f&Shq}W?QHxg3?_=sBB@XRDnB$Hb=~LpZO?%=EQ@?a56A09>&>E6}wF40A-f85n zr)r$R`2JgxTg9+hTT{z;UGhe|%N^yet+_0&c2w&NE4Zd>rK3FVxzbUc*1oP9Px6K- z!Y4wdw_@9~V&7Nndlfaqx98D>O2vQ&JG<6VcKn)$x{?ja$p0p;V?N;VH#OtOAQ9EU zhqlLqK^prI87JrfVtr1CX4qW^GJ(V(EHo!B=!a<<6!EC&=fhE0#JX)J1)Jj})k&tr zf0|>S(ihl5ZRg`O5}RNv%{Rj|$iiW)d5;7t9K`HRb7=2LI+8rQRTK!~EKeBZ#W2)C z{9u%ZS*S56LH6=2_BhihyaXATT)uupzj{Q!e5f18ZyeFz^x%%9QTHKrKSG66SA}UZ z+(y(<_h#N7593U$DQUgGo#$!yj@iWC%JStao$d#jF7ms%>FnNm5DrIath(#5Qdq_E z)vn~#R3b20Uc!s>DI>NpoEUW;4OQlxmeZ`%sg1unJ*3lgVZwZewD1f&C}{zh0@X#> z6jiVS!=IDZ!{#AMxX1~^*W>1BpJbQ4n%FFE5(PAH>F(~1VyTngfaY`8BzGs7K+e^4 z0)u2Y9P4m1ji1Jd>??Bm5Q))#n6^hy4%5a|Nz6fDLNFev1AM4{Bb!dp6X+3qa>~xJ zREYzoDm+v#sj@F7vzE?^Lez#;ne*^p166`yg@q3c!+vkg@Oh@nAFY{DCk%TY)E2dc z3L$_inHy0Z4ihoT`87?2B?Zo5tvxtH(KB@hFJ>Sny(AMd0>cS6#A(b>_Zclh5IzIN z=bRm-7m%UP`4qzPpD(2+ct6J4W8e#x1Zmh&N#C%N&s*G=VGi8q9pNuTpRv{8Z}7 zbks|pLhCWX_h z$yszfCM;prAiz~W2;}w=ly|2f@R{KBMKtA&z+7u^VOT2S&x=Hxd(&aBII|;$CmS#} zx#NTy9I`|IIc{F&hGX(yMKgicN#>3tetVcl<1~JUx3yvn)GKW|Lv5#BZC9JkX018X GocSAwFb+}x literal 0 HcmV?d00001 diff --git a/Examples/Session05/__pycache__/test_random_unitest.cpython-27-PYTEST.pyc b/Examples/Session05/__pycache__/test_random_unitest.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1bf205df0dcc7187da38de8fe063bac691ed3a12 GIT binary patch literal 2111 zcmd5-+iuf95S_JiY1$O3a#17ofkz`DQf_aER}GcC**$aS?8N`IzPh@1+}-tw`ZWKrO?x~{%F}?qirDI@h3(PU zr*VaP)rF@URNpMDU{h(7fiq*rNBp;M2Fk-V{n2P%_8Izg2W zOn&p{$lhbKtBvjGvr=b${ie+NHpw%ygsJ$A*F4N4p7a7BAJy{!8HNuaFe-Bt3_0us z6%Obl9K++W&%@l|$qJB}qD!Jk67B?e;V4<&t_`;6z>_PB!=gISj?YEgN@^0>& z?ZfkUGEKEOsko zNIQf=g;!Qp(w}n)0Xqu2MX5!~!j7=6Qw>SpymnD&Vah?@43eM|A*s&> z1j;d@&YxSPtO(eN7n)_keqe&$eLR0g|2$*Kdvx%5o94V$7rb(Ra=f1H5<)v7-lOC$ zpO%1Ik$H$BTCn;)PD`h`E9Q+{R#9=dju7A$zQbEs^0-+^E{S$X?=v2!NVTC_YFkN; z78;GBjQds;Nv=^e$p>Z1%MfJ=u}ydz6H0ZJmRL8`07FJXKqm>+yoTRsG%E94CUKHQ zQ6M)G;G^hEnWPp@3+LYSV&O5ig%`M^qOrQW!;SZGp}!T}Y^B{Sy>g8fPoN6kNQ4|0 xP8FaMO&U(Y(q&^mHd^3@^6vxC0Qi6KC@5dLdcQ(@F(9Z(o77ZIueH@we*igp>xTdU literal 0 HcmV?d00001 diff --git a/Examples/Session05/codingbat.pyc b/Examples/Session05/codingbat.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70b301cf8602a22168a1be2f34cdad22d2202b82 GIT binary patch literal 571 zcmc(bO-lnY5QejD{b1FTh}Rs~i>acQA|m(!UZlA7BFGZ6qq}rBvm~>vg&zIK{sAZb z!2SaR^XAPYVV;@p&p{mD3`a(+R>b=ahd*S=g?MF+#5bErPiCH+L9!JC;pF4QUSHZ)_JHV z;A7L_3hTHHC68I=LXZ&Sj=&=^j|4@*@25$CeoDe~>amPm3$(@NL02A@`5it^0miwW z(JuRmHkwMb345^+U$9dz9-LQRS7lx38gg}qrmew}-*BlZ5GysDQGr$_=l!#b6ZL4x z;Ru&WwH}U2!F#ULzucHivt;lUK$Derj|=-iFQQc!fi}x>G+Fi>I{KshC)BGN^R|NP K0JcEg?)?JCwUj;p literal 0 HcmV?d00001 diff --git a/Students/salim/session05/__pycache__/test_count_evens.cpython-27-PYTEST.pyc b/Students/salim/session05/__pycache__/test_count_evens.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24130a0867229f019e76c20e7349fa11fa10e226 GIT binary patch literal 7673 zcmeHMTW{k;6h2Ozv`y11?6O={A%T*YChhjJl_**SJn&K>clV_)mN#}=cO5(OOkk^R zc%UmGt@siAGbEmnK)fI%o`CPn*l}*6*&=PpDs6mx=I*(C^PMx3|9zqK{MUyMe#j9u zDEWg<_wk5J2p2zt0-_@$)pK-~r!$j|3MwW?L6Mq8Ix3Rk=II%-&X8*=WtQB6Qs&4l zDy2m3j8f*womEPi+&QHzkXus9BDwQQS>m=2D`k9#|2O^)Dh5PQwNl zLdVlET0wZ8c5Zjj)C&3dKq!kGfi}=K>Y1gB0_Vf;TZ2M1O(yzhqF*L@f{tP04lAn| zjRT)26xBfFS(p%lQzzU_hwa8OP#fS9lKi<7RvAl z5Fu0Y-b~(G$$J-rfmRkF93i||sw(%YB1zv`7i+$Yeii`+@XBA$b)A5%LLnhf9dls2#YfjC~SBkDR~` zou((}RHAe2acz=&`ibhPABCUCaTLqfIKy!iHyte0C#}E<9f?HA<9`r^UWHpyi<#Tk z!?ZCFzB>@!83=E8!@8k+-TvtCM!kYYND0w~R(puq5H;Zhe)AOFaBH7Mjds%urRdQP z8>dke)V@5Ir%||8*{pADRcl{_GL9ZZIsTVaF?N+U|{J=N=PvPV<$ff1Li0LuZw~44ZJHc zaMK1}X4~;@?K2vtK$vJU*kbA$8wh_O^9c=c0Nk8m2j|C>1Ij4}EDUjg+0Ow%KL==k zr`N%Oe^MCWfMPeSIUwT*%>i(T6bCG(9H2a&7j|%%^$(^Ce)6rK?c3Rc*N(uyIRi%K z;A`(5Tm66mG;;I*C0+dEZ~jmE7yoxE*t_^|dh=&v*k{{V!9e->)6IXPH~*ctGAyiK zX$6geg^@(?Dq=yMboB#biiL^B!tQ%7f`vbk87}b&7W@Dm;DC477Wyfr1DHViuosT; zfIkeAq}Lyg`sv`CAv(aJcxL-(e>k&!v@Mh!25Vag{;{%!mQq`&d@X;N&pmn$d#4M3 zq8I+X_p^mRcO?m2b;AUby_P&mNsqbyNvA9noN>cPuGs0xCGh)5Lg0FxquFztm%zB%} pJ1pL1!Q_;kDBtug3!jpI)QsGA;C;*o_=3Aprd3+b&zb%I{{YHT>!1Jt literal 0 HcmV?d00001 diff --git a/Students/salim/session05/__pycache__/test_mailroom.cpython-27-PYTEST.pyc b/Students/salim/session05/__pycache__/test_mailroom.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c00ff1400b654e22ee322d9430df32fc0cccedc GIT binary patch literal 9050 zcmeHMO^h5@5w6*p{h8VS^{(wWcDzn(GfSe~o!LJd$B}^~0t6mp^L_Pxrl)tju@ei6DE9W7 zSJm%TzgJaV_0{X_zb6Y{_~+MNzm^r*7W;1qzt?a@0h${AGSU>em2v$c*~!XIPHqi5 z&WPL^mD-T}0K>+lmeo#PYB}u`q&BRbaf-T89D&%zef+zwk0i>G zvv_rpz15|t$lncj3mtoF&9Tt2tkP1nydBo7alKM&x2kcY-KsPjQC#R2mkM3{EnYQZ zFE2&dIee|L9m5_Xdk2@55g+W;En`&~yVXY1GD`M$&HirK-z|6$e2H7CMo~SCb>$^2 zMkVYWluE@(+zj}{cplB5H3n1$UjeETZ^Yg~T#w>PHH>FLR<^6nW+kleh1>1jy=qv8 zUUg9AjeRVz(TdC$N`DU~IMzvXKRd?%gUT;=!*C{QY0`+NK zHI(&A7`DUs7zf;Lhr89dQvdE=vuZS{o4MX@)%A^v$1w_vte7pAQ}lX@-b~S#{QAv< zN~>u`xrhgdHc^P)%2%PDdMl0+y&Kzi+U@4bYX|Y2c5AU% zUM;OJt$e-}hwazfhPiSh-mmE_6}1x8qX=7H-B?k5)81jby}JzkKZVCCbCA78aWkSZ zC6kxDOyK{h+?R|j$Vn62s7D`Z{siOuNQ2mc_W@CZ0S19bW5->6I~aR3K;T8g>jf8M z>>1{3H4*;U#U711U@`XOH1_CF8+#CA@LG>pK?o4~nuE^qy>!uHl)=cxrgvO;FhSnh!Dv$~K7L>B?mgv8yvdX2R1Z$V?)ZP4z$KRo%7= zmElb#M-q{9N@~*#LkPMvQkylg3B(+k2#h{9As9b6HsuhUa!@;?naK%AF0d3f0TUFY zGbSCx%7V~R2z2AJGbvpJLyVb}&V+O(DZY!<9Fy*}bf%;;t>&AN&J4^qo8`_CuZ{U; z)O_=5J{@Y!hm9KZjjOp9ppcZ_zdpnfU>dzQl!QW(dbhzHdWV%^_2XX8d8JQydRpm| zp2h|-{wYuEu4<<|J*D@b_Vk3(r>W~%HNY8T01(fRIhQcN9LM4>ksQXL^gONtu5nyU z7?ZfBaLrJUk7kUs4{3~_FlMFIuv{I zmcdA@n=ZSKAF_H#0}eAmN0)VeX?3+o_+W62YR#F+=>0Tr5~lyWymQnU2EV5WnGtyY3l)@%!DS9JCZ>8wV z{sDFgr8HwL&DcycHax?wIt`G@t4|&e(RPZ5yn8YPM6aPC2pYlvX%B?XDG)m4`Mf`& z*QoqM?_E6N-Zo{@-X1`mN6%&g(?JpjZbCLe&1PVf0th5=cxNAm$|W(>pEK|>fFoPK z84P9WH()4$DM&&6hIo!)qb%x}4YNqXxIM24250aYTt5Vbwv2K6RRXQIcY0Eta_TsU&}%evle=d>;8a^QqYSTzE>6wf?hN> zYz)MuDz^Yk!HGp*Q;NRk(h1*A1ONlFfpg4AjQ$Mm2!KLVHmeRXC!INCst8q_y;Fe zNjl7Fsh#m+)F?!WR;+=RXFYA8=^}mUm^#=w<6t13C39X7i#Zn#Hctiipd}sbC}=r{ z`_l$u&bq*Y!s#KM?zyzn)y_+IL7i(M>0JLA=IT<;b-_8;f^#l7jnS)jE=w<{R}Ao) zv^kgbLEibUDEZ;NEU9t*u6t*CzRi{S~)m7zJKdG@U8iHOzC<=#?zPEhv7XU|Q6QIB4Q))-Eo zm$cZhRCzr(LnAD*=`S;y^;YmK*luJwcqTy|g52ev$;yn7w%ju1$6r8xq-s!GJ$M%;h z!Sm$3keqJ|gkDKv8R-(DoGu~CYr$qxkf{>N>4lWH{8Fvt9>W$Ey+>IYr6*rl(85|+ zB#g^yF}jJyoUfV_R&&OB)0YEHizH@rx{$ z;l2i0B=B*G;R~LRON{qB;QgVZU61x2bikWJdp&e#;BK!bFg3z}n&4OcrN$ozl^P$Q zCKz|%-4u~$9C%L_k&lY@+_^BS!^7vo9=xZ{h2Ian>$$L^J;Ef9_I?B6v7)_NBf|Hu z1Aauqhq3=Zz!zMBMuN|vF`(gZPC*`cJwCuUP*?v0%tzc{PJCbFX7$*2002{{H3(k> z*Dy^#NSlL9o^ti?#iJa$z{FG|abdd+hiu@|>TX&_R$H@A9wqm}MFB`an54p=>{X1bJHs85D z7oROf>>WLl*3aPXWAB>zI`A~c1fOE_Wj0?y)6=TR{vpP$qD>g|1hPA566KgH`61A9ys-~-^E3k7MSS;=MIVQew38F8I z+GTdH&POfb1|s2{D>Fscpuwyv>msY2HKUNXwey4+9S(9) M2isQeG6t2LKW5Q<5C8xG literal 0 HcmV?d00001 diff --git a/Students/salim/session05/dict_set_comprehensions_lab.py b/Students/salim/session05/dict_set_comprehensions_lab.py new file mode 100644 index 00000000..c004178c --- /dev/null +++ b/Students/salim/session05/dict_set_comprehensions_lab.py @@ -0,0 +1,59 @@ +#!/usr/local/bin/python + + +def print_dict(a_dict): + """Returns the printed version of food_prefs dict.""" + s = ('{name} is from {city}, and he likes {cake} cake, {fruit} fruit, ' + '{salad} salad, and {pasta} pasta.') + print s.format(**a_dict) + + +def build_dict_list_comp(n): + """Return a dict with hexadecimal representation range of numbers.""" + a_list = [[k, '{:x}'.format(k)] for k in range(n)] + return dict(a_list) + + +def build_dict_dict_comp(n): + """Return a dict with hexadecimal representation range of numbers.""" + return {k: '{:x}'.format(k) for k in range(n)} + + +def dict_number_a(a_dict): + """Return a dict with the number of 'a's.""" + return {k: v.count('a') for k, v in a_dict.iteritems()} + + +def create_sets(): + s2 = {i for i in range(21) if i % 2 == 0} + s3 = {i for i in range(21) if i % 3 == 0} + s4 = {i for i in range(21) if i % 4 == 0} + print s2 + print s3 + print s4 + + +def create_sets_better(): + l = [] + for x in range(2, 5): + l.append({i for i in range(21) if i % x == 0}) + return l + + +def print_sets_better(): + l = [] + for x in range(2, 5): + l.append({i for i in range(21) if i % x == 0}) + print str('{}\n' * 3).format(*l) + + +def create_sets_better_comprehension(): + return [{i for i in range(21) if i % x == 0} for x in range(2, 5)] + + +food_prefs = {"name": u"Chris", + u"city": u"Seattle", + u"cake": u"chocolate", + u"fruit": u"mango", + u"salad": u"greek", + u"pasta": u"lasagna"} diff --git a/Students/salim/session05/keywords_lab.py b/Students/salim/session05/keywords_lab.py index 5e75ea69..2fe64c29 100644 --- a/Students/salim/session05/keywords_lab.py +++ b/Students/salim/session05/keywords_lab.py @@ -1,4 +1,4 @@ -#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python +#!/usr/local/bin/python def func(fore_color='White', @@ -11,11 +11,11 @@ def func(fore_color='White', print s.format(fore_color, back_color, link_color, visited_color) -def func_args(): +def func_args(**kwargs): """Print colors.""" - s = ('{} ' * 4).strip() + s = '{fore_color}, {back_color}, {link_color}, {visited_color}' - print s.format(fore_color, back_color, link_color, visited_color) + print s.format(**kwargs) # call the function with various parameters @@ -30,4 +30,4 @@ def func_args(): 'back_color':'there', 'link_color':'how', 'visited_color':'you'} -func(**kwargs) +func_args(**kwargs) diff --git a/Students/salim/session05/mailroom3.py b/Students/salim/session05/mailroom3.py new file mode 100755 index 00000000..c0629d68 --- /dev/null +++ b/Students/salim/session05/mailroom3.py @@ -0,0 +1,135 @@ +#!/usr/local/bin/python + +from textwrap import dedent + + +def create_donation_list(): + """Build inital list of donors.""" + d_list = {'salim hamed': [100, 900, 1500], + 'iris marlin': [300], + 'john doe': [200, 1904343], + 'terry smith': [850], + 'bill williams': [450, 894], + 'richard sherman': [500, 900, 50000]} + return d_list + + +def inital_prompt(): + """Display inital prompt and return user response.""" + prompt = dedent(""" + Hello, what would you like to do? + + 1 <- Send a Thank You Letter + 2 <- Create a Donation Report + q <- Quit + + """) + return raw_input(prompt) + + +def thank_you(donor_list): + """Prompt for name and add donation amount to history.""" + # prompt user for donor name + name_prompt = dedent(""" + Enter donor's name. + ('b' to go back or 'l' for donor list) + """) + response = raw_input(name_prompt) + + # evaluate user responses + if response.lower() == 'b': + return + + elif response.lower() == 'l': + print list_doners(donor_list) + + else: + # ask user for donation amount + while True: + amount_prompt = dedent(""" + How much money was donated? + ('b' to go back) + """) + amount = raw_input(amount_prompt) + + # exit function if user wants to go back + if amount.lower() == 'b': + return + + # convert entry to float + try: + amount = float(amount) + except ValueError: + print '\nInvalid Entry! Please Try Again.' + else: + break + + # send thank you letter + print send_mail(response, amount) + + # add donation to history + donor_list.setdefault(response.lower(), []).append(amount) + return + + +def send_mail(name, amount): + """Print thank you letter for donation.""" + email = dedent(""" + Dear {:s}, + + Thank you very much for your generous donation of ${:,.2f}. We + appreciate your thoughtfullness and we will make sure your donation + goes to the right cause. + + Kind Regards, + Donation Team + """) + return email.format(name, amount) + + +def list_doners(d_list): + """Return print read string with the current list of donors.""" + s = ('\n' + '{}\n' * len(d_list))[:-1] + return s.format(*d_list.keys()).title() + + +def display_report(d_list): + """Print Donation Report.""" + l_report = [] + + # create report header and boder + header = '| {:<30s} | {:>21s} |'.format('Donor Name', 'Total Donation') + border = '=' * 58 + + # create report rows + s = '| {:<30s} | ${:20,.2f} |' + rows = [s.format(k.title(), sum(v)) for k, v in d_list.iteritems()] + + # build report list + l_report.append(header) + l_report.append(border) + l_report.extend(rows) + l_report.append(border) + + return ('\n{}' * len(l_report)).format(*l_report) + + +if __name__ == '__main__': + # get donation list + donation_list = create_donation_list() + + while True: + # capture user response from inital prompt + response = inital_prompt() + + # exit program if user enters 'q' + if response.lower() == 'q': + break + # send thank you letter + elif response == '1': + thank_you(donation_list) + # create a donation report + elif response == '2': + print display_report(donation_list) + else: + print 'Invalid Entry! Please Try Again.' diff --git a/Students/salim/session05/mailroom3.pyc b/Students/salim/session05/mailroom3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbacc161ebaddcd2943656fae30c067e085edfa4 GIT binary patch literal 4020 zcmc&%O>Y~=8Gd({qO{b99mh#iByA@_05O3=T5@BchV#){K^!D7l$9E%MjLj;9g!>T z2R$=uny{FQ(_7JFPyGu8iXM9GAq9f|gI@XrddVp{_0l}=yCkK$haN>~hqE*9yz}us z@AC|UZ`NBIUw?AYr`gBH_q%xPS11zvdz2C79^LoIOMLo*=)O-$AeDfUhEy7qEJM+xZ`nZJ?_q-B-#DjlzJJqgA53GF@jj9ZhI zy#Il8gLFtwu#j2Ds&xE?G$xUb_wS%5StI$rSHRag?YB3umGnROv^~^ZlXs>QT{zh_ zw>9wG#$!K4kz(y0VXxTbK(=@TyBnaXNjI=7Y-WJY5HBrhUPWzm=R6dZjTnsa1JwGWhvBkNL;O56G^dc3ch%xYKC_FJkMoF%xC;)D6=w;UN8-d)8rl zm}Z$8qe$c2rr&bk-rvx734JE*4`Y)kJJcqRi#D3*+!6M8<#i+XSR6NXe{Qw0U0JZK zx4T>Rs~l%-&(-$(!?Mh}dlNS-3)SAaw*BMRx*rtIlm}(q*xh#(M`-4%Yqhm$SzLRw zo5yKp$}+#+8BN?(OxZU&cDje-iycg4RUBf=VJH7tujQ@F^Q_nB7LGTg{5Br@JPIc$ z2doe$=W(b|-*2;x?V{LC?I?>U^LUL+nU9=`i$odiDpRNmdq&-k%EIc7{T;@%)a-Ld zXIZ(W#>3dDaakekld?k0PqcC+g7i*nVY;nuy`lCs{Ko2F7#An%7cl)uJ4A0`w8KWX zWy>(zoo!l0dQ=*>uzJ8&A6KcXy~|!AEQ?%-!o=fVT8t`p7R-867aL55W1SPddO6Ra z!Ez|c50*o(&yhn)$RpAF7hcYy=SlQDj^5O#Q=g87Y>>#zJsnQx{j=7FwB98b%p(5& zo#OZO=#X54%%8>WlDG=QEm#U}8+6+EZ@0e@x0B1{mbkArx>r0;4e-nf819ecc^;Sp zl=Lxux`*PPTjtfVwU1`t?Re#ExdXrtOAlw>JYF?F?PYA%UPrN41MsLcssJSj65}Lc z0+9?*ab8x1V|)#fp{1F0>>kD~(D7aYMAdw=X~jop(bwKQ+~kpiQXR(q6NO1OvrWa5 z2|)>6y(Z?!74XMh`O575^D`{aUyfB?^@l1i3q4We*w(Am$vcY~=eAGHT+cD@w6C!H z4~mCi!bD*MX7aL9dzp@{RtMm=pAO=*=(Jlf6QDEoaZHG^a;%MG8fCs>o&ZB3$V3OG z(qeLym9cX?_LDfP^n1o2nK)A{va!dEBb`>eL?6Xf=0ro{(Fombo_xZ1}X%5j9s)CHP8rsSlJ1yh2D`6|W3?N3ldwFHj@ zJ&;A*RvhXB#KsNf%=?uwxJf*H&$7&3Ez76(c-pG3hwK%40H)AIBv%7&Infg=ARuGV@wqDETkcBFS{a2$2K+6DklD94C(X7>6wvTO=PuGLeh>)hTYd zO;$J9u^b^caqaol>-0-lEzz_ovWLEIC3_QAu#i52M@3(meayhGMVUY{E4|4xyzrD8kipJ1p#ykgAhaG&MR;p8@M)*ePCU7d zUc{TA#a4O5_hnH9{m4NTqVMBfb`c3wct2Us$SqCGhJY$$iKBE_8dM{pN;W=`6+RS+ zGUfPU5$5<7ozyqr+4_Ht7Rx+CeiNe53Yy+q!8&9Bf4)dvk2SOC^<*Otq}-Nr$G(hV z|5wKEwwXG_mBV?CO+2baotYzI!HpOILNE~rCE7$Wn_6_YCn}qq|4k4vG9vyB7I8G% xc+M3U@#}?`aVsyAD${Q>*yNIPIS5z7_3(}GQrHZiTk}Ky6YX8Y@veCr{&&?i%2)sZ literal 0 HcmV?d00001 diff --git a/Students/salim/session05/test_count_evens.py b/Students/salim/session05/test_count_evens.py new file mode 100644 index 00000000..dd3a9b16 --- /dev/null +++ b/Students/salim/session05/test_count_evens.py @@ -0,0 +1,39 @@ +#!/usr/local/bin/python + +from count_evens import count_evens + + +def test_count_evens_1(): + assert count_evens([2, 1, 2, 3, 4]) == 3 + + +def test_count_evens_2(): + assert count_evens([2, 1, 2, 3, 4]) == 3 + + +def test_count_evens_3(): + assert count_evens([2, 2, 0]) == 3 + + +def test_count_evens_4(): + assert count_evens([1, 3, 5]) == 0 + + +def test_count_evens_5(): + assert count_evens([]) == 0 + + +def test_count_evens_6(): + assert count_evens([11, 9, 0, 1]) == 1 + + +def test_count_evens_7(): + assert count_evens([2, 11, 9, 0]) == 2 + + +def test_count_evens_8(): + assert count_evens([2]) == 1 + + +def test_count_evens_9(): + assert count_evens([2, 5, 12]) == 2 diff --git a/Students/salim/session05/test_mailroom.py b/Students/salim/session05/test_mailroom.py new file mode 100644 index 00000000..b03537c5 --- /dev/null +++ b/Students/salim/session05/test_mailroom.py @@ -0,0 +1,26 @@ +#!/usr/local/bin/python + + +import mailroom3 as mail + + +def test_create_donation_list(): + assert type(mail.create_donation_list()) == dict + + +def test_send_mail(): + assert type(mail.send_mail('Salim Hamed', 100)) == str + assert mail.send_mail('Salim Hamed', 100).count('Salim Hamed') == 1 + assert mail.send_mail('Salim Hamed', 100).count('100') == 1 + + +def test_list_doners(): + assert type(mail.list_doners(mail.create_donation_list())) == str + assert (mail.list_doners(mail.create_donation_list()).count('\n') == + len(mail.create_donation_list())) + assert mail.list_doners(mail.create_donation_list()).count('Salim') == 1 + + +def test_display_report(): + assert type(mail.display_report(mail.create_donation_list())) == str + assert mail.display_report(mail.create_donation_list()).count('Salim') == 1 From 821f8514d4eca2df5dbe026b0a77a61333ae9f40 Mon Sep 17 00:00:00 2001 From: Salim Hamed Date: Sun, 2 Nov 2014 20:34:29 -0800 Subject: [PATCH 14/14] Finished Session 5 Homework. --- Students/salim/session05/email/salim.txt | 9 +++++++++ Students/salim/session05/mailroom3.py | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 Students/salim/session05/email/salim.txt diff --git a/Students/salim/session05/email/salim.txt b/Students/salim/session05/email/salim.txt new file mode 100644 index 00000000..c18e549e --- /dev/null +++ b/Students/salim/session05/email/salim.txt @@ -0,0 +1,9 @@ + +Dear salim, + +Thank you very much for your generous donation of $100.00. We +appreciate your thoughtfullness and we will make sure your donation +goes to the right cause. + +Kind Regards, +Donation Team diff --git a/Students/salim/session05/mailroom3.py b/Students/salim/session05/mailroom3.py index c0629d68..419e1d27 100755 --- a/Students/salim/session05/mailroom3.py +++ b/Students/salim/session05/mailroom3.py @@ -1,6 +1,7 @@ #!/usr/local/bin/python from textwrap import dedent +import pathlib def create_donation_list(): @@ -74,6 +75,13 @@ def thank_you(donor_list): def send_mail(name, amount): """Print thank you letter for donation.""" + # create email pretext + pretext = dedent(""" + The folowing email has been saved to the "email/" sub directory + ===================================================================== + """) + + # create email email = dedent(""" Dear {:s}, @@ -84,7 +92,14 @@ def send_mail(name, amount): Kind Regards, Donation Team """) - return email.format(name, amount) + + # write email to file + parent_path = pathlib.Path(__file__).parent + email_file = open(str(parent_path) + '/email/' + name + '.txt', 'w') + email_file.write(email.format(name, amount)) + email_file.close() + + return (pretext + email).format(name, amount) def list_doners(d_list):