From d5933c459ba6625373a9a5c418146f94146878b4 Mon Sep 17 00:00:00 2001 From: AceVest Date: Wed, 1 Mar 2017 23:49:28 +0800 Subject: [PATCH] ... --- .gitignore | 1 + .../Basics.xcplaygroundpage/Contents.swift | 124 +++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 18967 -> 18964 bytes .../UserInterfaceState.xcuserstate | Bin 15044 -> 15257 bytes learn/cc/string.cc | 34 +++++ learn/doc/mac_bash_profile | 3 +- learn/doc/vimrc | 8 +- learn/python/dictionary.py | 15 ++- learn/python/list.py | 24 +++- learn/python/set.py | 6 + learn/python/utils.py | 15 ++- tools/comm/htc.c | 4 +- 12 files changed, 214 insertions(+), 20 deletions(-) create mode 100644 learn/cc/string.cc diff --git a/.gitignore b/.gitignore index 687f5a3..9d63951 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ ish *.swp *.ef *.conf +*.diff dvwa diff --git a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift index 1f82280..4890fa0 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift @@ -2,18 +2,134 @@ import UIKit -let str = "Hello, playground.小狗:🐶 锤子:🔨" +// String values can be constructed by passing an array of Character values +let catCharacters: [Character] = ["C", "a", "t", " ", "猫"] +let catString = String(catCharacters) +print(catString) + +// Character 加到String的方法 +var welcome = "Hello World" +let exclamationMark: Character = "!" +welcome.append(exclamationMark) +print(welcome) + +// ############# Type Alias ################ +typealias AudioSample = UInt + +let maxAmplitudeFound = AudioSample.max + + +// ############# Tuple ################ +let http404Error = (404, "Page Not Found") +let (httpRetCode, _) = http404Error +print("Http RetCode \(httpRetCode) Error Message \(http404Error.1)") + +let httpStatus = (statusCode: 200, description: "OK") +print("Http RetCode \(httpStatus.statusCode) Message \(httpStatus.description)") + + +// ############# Optionals ################ +let possibleNumber = "123" +let convertNumber : Int? = Int(possibleNumber) // of type Int? + +if convertNumber != nil { + print("ConvertNumber is \(convertNumber)") + print("ConvertNumber is \(convertNumber!)") +} else { + print("ConvertNumber is nil") +} + +// ############# Optionals Binding ################ +if let actualNumber = Int(possibleNumber) { + print("\"\(possibleNumber)\" has an integer of \(actualNumber)") +} else { + print("\"\(possibleNumber)\" could not to be converted to an integer") +} + +if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 { + print("\(firstNumber) < \(secondNumber) < 100") +} + +// ############# Implicitly Unwrapped Optionals ################ +let possibleString: String? = "An Optional String" +let forcedString: String = possibleString! + +let assumedString: String! = "An Implicitly Unwrapped Optional String" +let implicitString: String = assumedString + +print("\(possibleString!) \(forcedString) \(assumedString) \(implicitString)") + +// ############# Nil-Coalescing Operator ################ +let defaultColorName = "yellow" +var userDefinedColorName: String? +// 等价于 userDefinedColorName == nil ? defaultColorName : userDefinedColorName +var colorNameToUse = userDefinedColorName ?? defaultColorName +print(colorNameToUse) + +userDefinedColorName = "red" +colorNameToUse = userDefinedColorName ?? defaultColorName +print(colorNameToUse) +// ############# Nil-Coalescing Operator ################ +for index in 1...5 { + print("Closed Range Operator \(index) of [1,5]") +} + +for index in 0..<5 { + print("Half-Open Range Operator \(index) of [0,5)") +} + +var word = "cafe" +print("the number of characters of \(word) is \(word.characters.count)"); +word += "\u{301}" +print("the number of characters of \(word) is \(word.characters.count)"); + + +let str = "Hello, playground.小狗:🐶 锤子:🔨" // Index -let strInx:String.Index = str.startIndex +var strInx:String.Index = str.startIndex str.index(after: strInx) -print(strInx) +print(str[strInx]) +for strInx in str.characters.indices { + print("\(str[strInx])", terminator: "") +} +print() +// utf8 编码格式 +for c in str.utf8 { + print(c, terminator: "-") +} +print() + +// unicode +for c in str.unicodeScalars { + print("\(c)\t\(c.value)") +} + +welcome.insert("~", at: welcome.endIndex) +print(welcome) +// contentsOf 是一个 Collection 所以要加 .characters +welcome.insert(contentsOf: " Hello Swift".characters, at: welcome.index(before: welcome.endIndex)) +print(welcome) + +welcome.remove(at: welcome.index(before: welcome.endIndex)) +print(welcome) + +let range = welcome.index(welcome.endIndex, offsetBy: -12).. = [ "Apple", "Google", "Facebook", "Tencent" ] print(company[0], company[1], company[2], company[3], separator: "#", terminator: " $$$$$\n") @@ -101,4 +217,4 @@ for value in DictD.values.sorted() { } let keys = [Int](DictD.keys) -print(keys) +print(keys) \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index dde461ff1d914a43b20e7ded157907d50ca6841a..a208718ee0cd558cb5f6d0c14f210a5583fb4d80 100644 GIT binary patch literal 18964 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 T<9^hDVcdW61oz+f$ua#OnxHEh literal 18967 zcmd5jd0f-w|IhO|I5v*YIL6op4q-!(-6ygkAgFjCafzbN0UvQXH{6CwL_MDlt<2Q! zG7k_m)5^@N)GV{ZEHkal%&hFPO!KI$OnK8z#Fuix_f{eAHd*q-Nk-}m!a+vsxo z{2I-B00Io)fB+;2Azvros7{+jdwouiyE@HNJB_aM`^Kd?ymeEZvuJNcn%~nH1K`{h z&j{ca5DLOTEQkZ~ARP<<86Xo31X(}{R6q^%ARCMUrQilo2FgJNs03ADET{(Kzybj&~Z-N8hAb1ZP0!P6o;0y32I1PRPXTVwT6AXjlkO%oN0!G3p7!4_y z4EsSDOo9DjDolfNsDSBE3w6*8Z7>%OhC|>mI2;zkF|ZU?z-l-S+F>o60vq5A=!SlH zGrR>N$iO?`!|)OKD0~bqfsezba2Z?<*TQx1Dfl#e2Cj$C!VPdM+zwxYFT-8%HTXJw z1HJ|K!*}5!_#r$Bzl2}Gui5XetRE)B(y$CniD@w-mV@PC z!?9v)1XhNXV-vASm>rvp&BA75bFgOYMyv(932Vh}#%{q7b{jSiyBk}8EyC`{9>6-V zPHYvn8hZj;gFS<-$2MbIu$Qr2*elp>>`iPR_73(wb_Dwj`yBfQJB9s({fu3}0S<8t z=iz)j0vF+lxEPnv1z~!L7Ir&&Lb!q4+R-Bt8l+#c#kX@hW^gUW425 z>9`A@fxB@J-h?;fH{x^gdH9|96Zks(Dg0S{1HKvGf^WmO<1gVaWJC(l zpGYOr2sxoA41|#|5rsq%F_aiaR1#IhSfZMkN;rvW#B{<%%plx^mzYJ&Cgu>$#603o z;vwQ;;t}Fe;xS?g@i?)RSVpWPo+6$mwi7#u7m2rsw~2kkJH%1q6XF>0DRGK8P5eMy zATAQWlaRzniWHDBq>M}<`;)0;8Yw3gWI8#397N`lgUKOeAvv5ZCP$McWEojbjwP$f zdXgrmkPYNi(n(GuXOXkXIppo+9pqec9(h0c0Qn&K5ZO+yBs<7X@>y~N`5d{C+(d3B zw~$-O-Q=s}Yn5s4CYS3V2nRgC2N56|#EdN|S52pzed9~YRb9SXl~(6+_k z;q8C|0z{ziQJ$Sj%P%k*OeV8InQs}YRT@m%p~`$qVYbpzU@FoW3QXA=jmb{M6&Dtb z^?0ZI8Xa|Xp{K5C2JQ9-5eq>wP^<jv`Pbibfa;MPj5yhDj`Rr@P)Wd#KkjgSJyC#f3#{M=VlKL##bz0LAl=5R;wC>J5NH z--Dpi?VQ;}7uVBnzjKO{_S&g_#f3%rb$;h8`p-$SQ;FSdRCqkDT8FpTSLO6MYhARR z67{S(Y76=-CA74d3|TU>r8P^|qBUqVS+Z=MuC?_*K&u*{YXgZW6h$2X24DmxU>?sY z)a{r-S95>TzOg0c`ChN1xgD5*rMjeiOdw7NH8cnm0>v7T1FXOXa=~Db2l7Dy7=kDy zKrtv5#i4j4L^L^f}U^lSqdQHN}NR6^`0b zj#}Dfr>Nq>qVlPp*(Huy&IX6y<3cF%lyk(jh;31ht`dv=SNYRBUl!Q6W9W(d6&nJ)Zj%fJMdkh26E^P6>iwdnt*f zqqJK#y$F z%0vS@z+5m7+zIYNS;&aY$bt;jqv$CCD;ZbjY?vDOYdoj99uB&R>?SIRW)XOhMY9;( z2kr+CASF^EHPUndIT#Hd0cl8!bV!fHtnejO4zJTu>!N+EO|oM2l{sctIb2P&&rXT^ zuF@{L&QI5u*LfOgJ0U8<(fWj#l-2NX+TMhQKv+M;i>;?P!V0Z`YM+ImI%ImR&)V#R^dO>&}d@!k7Y=Q8&61>j_$RNlM z!AC6DhtbeBa0Crwxt4S8&=m~+%7lXej)Biu0H31aZQyfMj0_c{9nS96ufVq;W+nI< zd;?CP5ojbDwGw;>MuYDWs}V1oe>3`^EB8D6bh%@e)7=pGvs@aVjzc7G!acgcBDmwe& z^E+lVvTWAX(LSHY+nn!qd$^!B)>+SHm9#&c>M8(+Om%o2b$;4g=5ROA6NfwN>3o-~ z*yjrb6Zszw1y$SkRBHZ?{cFD*ar@HLJbH4#%4=G*+H7N%%wjUPj%(2x4dyJFruBU| z0A>I_%!C7B7F0qNR6~uOqJoT!^3(;w@T4Arav6~-^vrNLd&!wCY25YnoH0{^XM2vI z>8K95Q7xKgr_|MTo_bnUT-cSgyOhjb`yXO6NDzn=* zMmqf}E?NYMRP~e(EUO3Mc)*7>umnzoqu55K*5RXTO3GDU+T~yiZv@ax}pv z<&|Zl+Tmni;Vh~S=-OaC@}Vd@72ndLVZDK^skH`8mdvQNw6+H0!BjX6DB7SCHMPO% zXx6_S_@M{R3$T^(>0Tn*%K4Z0i6 zM_P2xzlihy*K%^x9mjbqJJtFf3{$F`VEe~jPH!Ht3Vy#?Ke?hS<7#hj@>&+7OE zw6G^|-WP~mi>?~EUST5_x}S?tMSWvb{@;sHcFJ@$4=?vLdF$vQo_bn2#p{`&?D6>C z-u_C!v+w6vdz)o#AA0x?UaZp@by+ft+1TU72jF|G7av5Aw!!z&V^=9!;bE|?9exCl zpe1NochL$zfuHp*DdFevIC>l{MS0`8`=Hc3MifZ4LDTvMe%I&BN%%clj#jXy6dmZ- zYMX-nS884p)#vP4cn&C5tmugrKf#~5FW!T{!r$OUz=yxX5_lN{b}Gi}@%XtqlMFu$Iq>Z8o7GqiY2rT0n~w>`2fQ(9Plv$Be4)z0)NNC!7~^S ztf;P=>U7n6X?Inl!%MsUHFYdpx1X)=?365+=>94v)OftkU~7i}T8ExSoxN%hECP#U zZ5X4_TC^%)!%qejjl}?6I~I$@q1EV#9y<;c09?NBO3IidVA^Z0YTALM%%$HxjAC+F zf`x+>umr3?Pa%MwMqG=9WwLg58Fh5ES(pk_+o|-woK*DHL_4No6XCUP59BONhw1H9 z>NQ|!#|$j=YuVammY4~%1RFRk8$F8*oQ$ntTRUdMa?u8~soU){cH)UM!>QXt)25)Yz$*-sp#UJxz^1I~CVc z0_lv|Su&F`I90?L?A8_Nbnj~sM*9N! z))zecD)xFe9dDqIQC@IiFZLFfc>0=&Ns}eB=*-<=mu~Q9qR$`0rp`x*@w}m z-6;+G82f}>IEp@N3y^5&)3pWhAIHAz4p(2H7hn+`XqOVxVvg7A&wX-wQ)V#*LK0)jk>|&q8zhjrsH|PY)>pQ4U&0D;`_crZ=)j}!Xq>_Y z=oC7Qen4kB@K`(!j|XY!ECWLs7{-k;MVy8AZM-VWM)~YibkOX%%MW&{*)_T4b_a$! zzM&p3w>_@FOFO1FdYo>*FK`j!@YD5yIDjXCZBOFKct2c*r{MkZR6Grr;|e?-okKsO zpV2SqH}pHY%s|LMoPi`N>{a~XS%Kp3{C~4)?u}j>K>w4Ss_t74|IMDg%NNzGZTM8a z+0H5c-q=h5Y!~cQ!*#*-FKwm|t2qJWzuKv~>xjI-;d9nqX{>z^=LHa7v{O^ABjTY= z?!X}YU*IkZ;J#$1>aQd2Auf-v$xC11qJ6j?!D410xZbE8KHr~2hd!vsaHugmHS;=h z{a30E^dWBlpO||EM+afQPTgj2R~pB`4zUZcggMGN>_|;H!&BcB7`$~&)$CpFIN0TI zH#9jKXd72e_Ozv=x)xOBtg9*l4y&BPUPH43J7uH8KhUdQM;%5 z8yg#STGLE(L#?5{E<3xfe%g(eI*mr7X>hA6)P2Si9LmN9wWDc{)8%w{n>jLl>LO#I zMr+JADs={nPH8AK7AgxgX039lS#Q)7>a>Lg<{@&OMxEc-=yGyXTVL0()zR44Eq8Sx zJ&Sg+c|%?5a`>lsyfb`iXX#Xrn=W_GXmYVvvg}+ju+nSuC}*wL;cZq2Zrua($^Qbf zQm>QE96dO@WX{P%$=+()dZq+ji@y5lHfJNtkT1wkwo2c%=y!MpE++8FIL&5I2VRTU;q?p*XCRM(d%14ZZ@1H}xKGBBBe zG6wc%U>XAz3>?6~Oa^8>jX#P%hA+V%$Cu*E@a6alybW*1SK=LbC%%e-Dh8Svn8Uy! z3>?P5kqjKez#0ZlWZ)DAIvMCTArin>gf&cFJ>IY>4B#((QNpU39%%r(wU4>omG6l5THHeu1Mxaz%mlk3?{lqP$N^ z+R0&0x}w7RN7(-=?e^w-H;1|36`22K8OurkS}^b7FsIn5>Hj&sUsdP(I0{m)=pg=) z)UST+)?4-mIsEb~-0mOA{uO1i>_*o!_ ziTIBUG%(PJv}h6oO@Tq?A6^*rdd%>*F1fDq0^*t9J`DMPlV#i&FWERdt{S+es8gR&gA|%ePDW72rXKZHcMtUw*Fz!C$q`4J^Nb&Co{M&xPzK3na*I& z4jyC=XmWV1flCX*NBHejbkDU#fX$VJk7x=!f95`?=I_||;=~7~3%iUVTiaUQqGcaj z_gLDE1iE@4V0r?D%~uV zoapZCKg$bjebUaeRcZ3fr-SooRphb`e*f$@{6^%qNO!0TD``YCCkv)r%YGt9{&1~ zT$lHeI2q2$=r0pG$s_qevuS1E&ArVg?u+X4Z=DL5jaH)#3W$s)6M>?Wj3eVoA(=pm z7>F3iFz{9e-p0V&J4rDq0dnj-nasdD7&sSc(N_$d_rL1UvCmiZpPd`bi-8xT8cXl2 zOJvHK}3XT@0MhK$3wA7`Tvuiy3(TYEnn)NdsvlO{AH$Fz`VJ zKF+}93|z^;)eKzAz~}nd5NYG|e7BvNcr`s=^V7)SHA@LSTdvcv7w%WwwU7lI&U^kl zS3Be|4&A+W>ZU8k(ShOezd3~dn={W|ohdnrBWaPH8hc%(&i1BP%KHWm+kIEa`)@X7 zK^_13RT^2vp?lzZqYDf@y13&yFLE3?2`D~6&3`G1TSx@t$bTzIi7yt4Vz$fi0| zH*t583s{g`ob4TDZ|@-QB^LrYxtM_+4D4hlpYH1D|H#GackQ@+lxEpJCv720qI|-0+{s2G?v1 z;$cG-r~DizMl)Od8jQUP3-WpL#lIBJPVyxnCwDP$BLg?FtZeQQ&YCrcswS|ISV8NI z+SWiy(U~>6)<8){pU3?zd7U?4DpL0~ZcEWQQbjlYE- z!au=}<6q)m<0tV`_z(D5B9YJ#HewV}LX;9^Ld+UL-GtfDkN% z2uTP@43UH+h4c$a2}uo+hopyOgbWNZhl~iR4!JXANywWaM?+4AlA-cYMW{Y>MCho{ zlF-u7ve1gqs?h4t@u3q!CxuQ9ogLa7+7j9tdP^u1dRyonq4PrT3Y{OiAar49XXuNe z?}i=={V5EFC59=(hK4!A{9#Pk-C_5H-5a(j?7pxiVN1i7hqZ;R4C@SgI&5p$D`7{% zz6m=Mb}sD4u%E+z3CF^T@R0DZa9(&scxL#p@M+< zyeeKjZ#EC{?&96Ydzjb3TfO&U-p{;Wc^7$?`H+wE z2l6fa9KMa8$1mU)@{9RZ{E2)!-@&irPvg7zZhj-*%U{Od%-_d9#Q%u@G5-_(cl=-Z z7x|YWKm-;+M1(|yMI=NdMo1!(BKk$7M5IQ@Bhn)b5qS|c5uS+o5o;ngMI4OyG~&C6 z?;}n}oQXIW@na;2#3G5vkjSt|USvdMdSpSQGjew1^2jG5pN-rR`FiBXk*6asMG2ym zQR*mdls?KBWsY)2d81}WHAl5XwMN|?^xg}<4%$k^2V)n-zjyV!@H0D^$XEEQ#oQydY^Fz$pnDepGv8LF< zSXXRQ>@BhLVjquP7P}(0J+>ouRqQjd8)7%cZjOB=_SM+eWB0_q8~ai0*RdyJzl;4o z&KT#8Yl&-(yCsf^yE|?{+`_oUackl>$2}jnE$+p*m*RHCeGqpn?u)pu;=YOdHty%R zi*c9YK|C2B8Xq3dkB^T}jvpAWiPyy&;~lkjHYeBlD&Lg8ZJGT{ngyRbvJPPj?9OSoJ3n(z(bXTsycFNI$VPYBNne-!>K z{3QWP$V$*A)Fjj=+?}v6VN=4cgjW+@Pk1xot%Q9EhY~(c_$1-egwGRBC!A0CDd9rG z?+KShP=t#JQKU#L>L*GOrHTfKGDTS;mB=hA6pa*(7L5_zAgUIP7fldN5=|B%(F39_ zqTQlHqQjyiqNAc?qR&LfMPG`(7M&1X6kSRLiC7|$7?K#4$V-e!j7p>u2PO_mEJ>_Q zoSAr6;?l(D6Za*4nRqJkbmE!BU&W!~C~=%PNt`T}i8I8R;w-UIY!X|<`Qid`p}0Zp z7c=79#CM42iSH867cUS$CVpJJOuRzeF76Po58zdVgnAjLPHL2zrGunaX|8mnv_x7eEtghG$4cv^Go^m% zENQc}McOKzD_tO6C|xYQU;3c5UAkJjM!HtIUb;cLQMy^WM|wbdO!|fNE9p1V@1>`u zXQbznU=lAWAxWB)oFq$Gh;NNpB^+lk{%V z!K72kAUP@7kZemXORh++O0G^GpFAOXQu5^Fy5uRz&gALIbCPdNzA5?U9h-J zzolK0LpdRjlvDCpxlo=cm&hyRjQmOYLHVcht+MS4bhR=PS}mu^hAqz_6TmR_7bGQA{yQ~Iv--RZBT z?-`&QFnB=zfFT2h4%j;2)d8;$*fZd*3{%FCjG~NT86z^*XY9z>nelSQ?##?gb7ppC zPG)ZAy3FS@w`K0gd}(0T!0drJ18oEI2Cf;ndEnN8FAUs~m6oN=(q|d7ELqF5)@41N zwLa@PrC6D+%uo(gs+5l?JC*B|&nY)6pI2^I?o__1d|SC+c|iG|@{sbd^1Mo-%1{-m zT&gA&qqqy9ksnfkc;OZC_46YB5OKdFCF|E9jA z0UBIGYN9k^O`1llv1$fu3N%HU;hK?}D$O{}1kEJPWKErh*0?pzn%gvsG)pwgG;Nv= z&1%h)noXLmnr)gLnw^?mn%$bWHHS3EG$%E`XfA3lYcVaU4b$?qBCSN5q?Kt?wQ}tM zZKl?s9iyG5U94TMeO`;qpjZk6sC-OIW+bnogu(tV-(UiYh>)Q9Q$`Y63XAE)o9 z@2{8Z)AbqpEWJu^))(r>=*#q#`f7cRev;m)cj-O)nR=gomVS=@e*FvjH}uC1d_$Ze z#W2udF$^&bH54008O9jO3=<8L4YdZ^&|sKma2c8mHyh>~9x^;?c-*ku&~E57tT#Mo z*lgHpc)_s4u+#8{;a$Tgh7*R9hSP?#h93Q;pM%E~Cdd(|DtCo^i2pnQ@JAo$(pt2ID5@F+H}Tr-t?2{vN_BgZH@#dFBFhp?R3O*j#U( zZ+_Ig(fqObOY>>-FP0EXyhUV@SduL%mNZMcCDW2^v04UO3M@sI;g*q>5=*INqQ!1; zSn4giE$>BK2D1Xq9K}Cax4_Y~B{h$ql zHV)d76O+>~XF$%t9951s$B<*o$;%m%Qv`(@%SR1Xa*16WZ ztoK+KTJN(iu`aW=Syx(DS)Z^zYkkT3w)G?HaqCys6V{W~)7A^t->jExz=qpMTa+!q z*3Xt@GukY+99ym}-!{TF+E!{SvsK#0+Pt<$ZL4kX*gmv;*S_c8n`XCZ(yXQ=Y16DWkfiJ(P$&fi$|xWkN*hX~w6%i@wQtTBkfEU9 zSN2TH7H}X6vK%Z$5fPCgi2hu-5pg2EpR^Rg_xE{|Kk~^P=bU?<=RD`$!__Nl7WIId z#XZ|c#*ndO94R6p@*t@om86PPlWAl+5y(vPD49o|A|iR3EFl}oCbF4qAzR5d@(g*N zyg>Glz2psYm>eNT$uaT{d7qpo7swUz8Tp*tAit1b$#3L$@&{00z(ER1P=Ola!2m`u zffdrh2Q4Ge3fe(?=m6az8+t%b7zv|bG>n0AU1So)s@E}w}1Q6!H0$2!(VF|2& zm9QS7uo1SxPIv)cf>+>GcnyxhaX1a{!x{Jh&ciqGEqn*x!w>KyT!WwBI{Zxu1xhKS zoJwdMji{)W8fY@LQX6&9bech1(jd*EU1>Mkoo3S>G>;CXgXmy7gbt&l=>$5NhUtT} zf>uH$t)eq%EsfAe=^Xkv73tG-30*_i(sgt%eTD9$`{@CCkRGD1(%0zg^bLBLo}};6 zQ}jK0o?fDt>8BC;A9|I3O~0o<(;M^``X>WMSsYU`6-#0!W@b+2Vs7SPUY5Z!nU8f~ z9a$&Vne}A7Ss&J)4PfKh1XjQ%vO-qGLTnN%W>eThtb*0B2ty{YnQRt&oGoAr*%Rz3 zwv?@AYuH-0iEURP4*YwTll|Q+xCa+*xxVWIItYUQEoL)lBwSC5$z-&n3q8$?r;t*jttTa9DyCvuJt-sQ=)iPzimMY+ zBZC~>Yp;;l=QL?U+L9Xb@R+>(oN!@PxU96GVtPHPAsw1c%^-FEG8I7wy3y(AUb_A+ zBeTftae4Uzs;denmV~k^Dhj4IkXfW1>Coh34w*Y%qibByHMZg(Zw+M5-Tvm2g~ZiB z9wU#F1(=CGY}r7bAWxD-*a~y77kWj1l0!VNYaMBha4A_sT${);vYf0SE6FOd8vPi+ zAZB4}Y_o~1CF{s~;w1INiEZ&d?26ggBZlaBO;RlJ50@8|7KMuXR)wZk4y_1<#`VqV zH9TAyo>&qZ5-O}3uStmE7%B-BR)vaU3&v|w`sVZ!D-9O0yTLC$VMsGK$FiO5B-$w1 zf$gH?S!|C^@uI;TA-l-#7c53{32aOn1QC3u4SXFt~?(v$W+S-869%!Ux$1I<{UF$Y=bc`7qK&@2vgVnK zxHD;Bm+=}?Eaz1Pg;RQ#O)akoRaS<}N{1JeREL^_`IFotu6lBl{Du8-Kt1^z2j+T#^ezVHgZ2=~#jhv|utO z<3`+v`_Y2lQ6&Y_%c`ql%okkJe^5rl{mCP6VwhOl@; z)6ZUu1gGNvoP{Y+LXk8B~+2o;)KM!lv=FQ0G56L)1ZbZ;bE8#GoTh8 zfjW{ac2f?K*I+r$z%oo0S1Q~01A$~Uz)YA0v+*IU!fK3vALhb5qJ;S*7akwgwO1D=--=?-JA|PCNlmirrN8Y-8cukdg-@TdJ2E|Z8Mnf?fjgKI~ zIwVaje3oQIVKPp|_$EKQ;KlJ8w|GVC5Kn2jtR8lg4*v`&*vqg-yrlK8y`+P9N$V0@ z>12uf-~e$&VLxIN4x)fw@eQfJJG>5uW5aLY%qSeeS?C=)pdeh@%*Hq29inZ3x8MZ4 zjkEDloYMd&NiLkixtNR%=oGVL1w-L%EWQtM9>zCsya1mP*Jii~AHgNK3?IW4_yp(U zWB52Oz=ik(KDinG1E0a?Fdyc_S8x><;bL5Y6!RKH0Le zth%DGSsvhL_?>7szzz5XeudxgDHQQ(T(SZFfIo>7{=%iW46|`LIz_2_M&w{oSkh&A z%IMlQfi|su_BI^?bt7s!2HVGU^)6;oDU~%b6W8I&CRR2=K-DCxfyUDWs=-yb8rS@b zl}#kP&8YuNvP>nlG_q{%|Hrc1d=e}f5$YsL>VjhGfi(~0<+qwxP#GGXm*1))R8mkC zo)$ua_4sfj8)zo=4a>_PHl%+&&5U(p1yRygBr8h&xB=tu=^q`k+WYKn0&VZ~589e` zAg&Fx4Q)%?(e}6rH{%xEnzDg*q@8GI+6A}abGQfhqIX39(4?y2;ZTj(J>HZ%s(+(q z3@9rKjT{m#p4>Qd8-3c7_K6wIp}lA>?TydicHDtGHxMVurTs`cW@9ow8&e)}etb=& zDdK#Rwf+u&=x{osS&r#QeEzl^(=jAmPsh@6_yX>}BgM3U7Tv9xG(;!iE_@N4cS3e_ z$MU;nmQJB}?oW}}1&Wr@a(oG2M(01LadfYE^`1@Dw1&8%bQ-=ACApX!yI&;sEGw-n zD+%R>OR7Q@v1~Nw;1OEa)H0g~kj{+l7Vton&ccI@yK{yQ%@^}E+9EnPcCvYNJ|4o? z|2f$L`s6()TSOP*tN0o^N8Y(mI=a`|?}>6LU2)Hzm2?%pfrrs4zNxV^->K+&x}CV5 zp;1~-8|VhQk#3@!=@z<`ZlllOQ9Opn@lAXSPvG154xYq!@zgUUo$e&L^f~%GeSz+x zFVfwOP1J(#VX^=n1?VEc{Q{H-Fjau+rsg_clhmUkR4}EyEL>VunO(T+d$R>nkI*-X ztAQS+$LMi9jql@`2Kp8~LEpv?@C&>VyZWkAM8V<}ds{lSX-?p2`T=p()A#8aJd5Y* z=~?Mvr%nvT zy3faW8Lx>kHVMn9p~F&RI{^LWLPeXyw5+~=tgxAVc&Oha7tEFP}nml&;QiA;-E z@!CE4V8+ISeecoYA^TllvCL;%>#9$+KbNH&U%W@Fe`0jK~>04_j+02%=j1+buZ*M4gq zq)%qydkUD9uu|fRvZ(?{qO44SxTYssJ61`;^{k3j3m_Fhb*FmS!>pEQ>)CWRLjaio z@_P0Ns}n#WfU@bKCLXc3baynq&vtNjivuG`sk_!XPe8lchYzcE$ES&t4E9 zMSvFdv>)4z&kA5gulRi0fUf)4Ys9sY?PmwrL3W6}Du7*pQ~}Zia0rmTk-g5|V29Ze zc2oeT03HFn0t5xfiiu)3@ds6ZWY9J^=#%AoDrXDeqTeZN z@guwbua$S9BMx#}J-^35_(Oo!cZ2X3yT$%ys|08#KwAOY#8Tfx*!awodtNzKS9qJY zoO9{DKyVqC3(#JG4(JsJIZa|pno=yul0mch3L4X4EI=cPXSbC(8*qxNvPxF~X$!GD|yE^&GXk=oe(DONb z?$|qz&zyp)f(AZ^&m$d%=jF%#HRJpkUrbz^_yE3uFXRLHlYCL*>5Bvi2{1%}Ndgpa z;)7{t{xn}gJJZer;otF);@Y}wgBO#2dqPBAawbiW>ZN?)aC_z{faIRU1j=Wbd5yUAo5@ykG~NRYK>Ijlc>fQ@5?EX0aq z;>*fe1zW+MV+YvV>?AwIPO~%YEIY?8u&eAF_8t3yU1QhT4fZShoy)k7kLGp!AiuzG zNa7_%NwOqGVwJchS(46@o{~P2!IE*3N=db(MlxMeE2)!2B!Xm?5NwP(pEOsRFC8HbNgtG! zNK2)a(rRgqbh>n=^l|A*X;d27CVf?UOnOFoQF=-GvGfz^SJJPg-%7ui{wUMQ+_GF* zzHEYQqO3?ZNj6#bpsYkTT~;frlSO2LY?ka%*<9IL*$&wu*=4y}9+Y>LXUluabLD;H z_shq~!}1b&sr(^%rMy~>@`duJ4wQ8+uy=s?gzv@lZN!2OUY1N0S^Qw!g zOR8^FKdV6I8M7TBp{lJ?fykMm;;CUZ!55UZq~6UZ;+#8`K-so7G#@`_%{4 zuc}{HA66e#A6LJnep`J~eM)^%{c}8xH^-;PcZwey|4{tw_$Be%;t$7v9RErDf8sxn z|1yCj$P+XPDGA*Y`XvlV7??0PAwOYQ!h;EQ2@4X|CG1N$kZ>sBwS+ekjwJl5AsVSh zu8Al$YE6PBMdQ}A)c7?)O>0e8O>fO4%@oaJnq`_5npK)Lnr)ixnw^^GH2XBiHD@%J zHCHsBYCcO0CU#03lsGJLN@7*wy2K5M?*HzbD z*F%@1E7#4_t=DbUZP)G8J*PXMds}x>cS?6!cSd(scTRUfcUAX|?mOKNx@)@Yx*NJ* zb-yRYC25mdCS@m$O{z_ro3tirThgwi-AOMe?M>R3bU5i~(($CXlHN`_nRHdJ(OdPA zT>U`(Xnm1>y1rIlr;q3b{Ve?gy{KQJU#4H7U!~uo-=^QL->KiHKcGLPe@%ZrER?n@w9y&zSa@4ww#^UNapv9XGvYdfRl?^s(t%(>2p|(+$%frkkc)W@6TwEoP6o zn>pLu)7;D4+uYaO&pg09&^*|jZyshYF_)Ul%@yWq^TXy^^Z%Fy^KA1R^E~ro=BW9g z`JDN4^UY*`a&~e-B>9o#rO7*zUrBx~`Hkcw$;XmUCZ9?^oqQ(wZ1PVQi)EN)qNUgp zwoI{kaEI8?jLvx5e2KY>76V zO>Z;W%(gbR(YCN{v2CSoqwQJSe%le-G25HA6SjA3XKm+f7i=HdF59lyuG((cZrPP~ zja_R`vYR7zi`{Cs+gsZG_MpAB9qkM4PudsTMf(-|clMk1Td5?Krt;LdRC%f@)skvW zO-)Ttb*E;ewoDDAW~EL{U6i^n_3O0cw7zMNr)^GqF>QC+OKE%3j-(w=JCSxW?Y*@3 z)4ojmG3`d$Z)ty~{pC9Fc&dr=!?W?x=IjbUf;q=UC`iC`%H&UB~Snc?(1gU&Y2cFtkW8fUF@o>O!#b*^x( zjyTsj>zzBC&pCHFUvlns?spz^5m&%9+Vz-guj{DmgzKd1J=a;+IoCzkCD%>2)!oV6 z+kL-#fP0WT-#yG7c2~G-+%w#D?udJVd$Idz_cHft_d0jIdxQH0_YwD1_b={0-M2j8 ziSx)kDo?z}Pz)Gd_G?*UmIVxuaB>vFV8pFH^MjCH_lh!EA*B4%6v0?bA3Y7>i;I74|EIk2@DF142%hc0wsZm0`mh40!sqR11kfo16u>z z1J4Ft2<#5L95@^}8aN&}5$qQn5gZ$w5G)K%4o(S{2FrT{rv>YRbAnF>mj~AcqrryY krr?&~?%>P8y}|v#lfn0c=bJ9Zls5hHcbk5jKf#Ot3%xR3kR=728hf{G!oPjfO58M~`!~O99JP;4V`M3a&z@zb4T!zQv zAO_6g8F(gs1M_$}uEFc^JNSM45#EBg;m`0M{006JAIE3#CHyV^4*!C$;yd^cd>8+T z{~{qoLPALxkrEjRCvpqis_i18Q2RfktH!NYr>kcW~@1D!CJCb ztTk)H+Ojm3&N{O$tS1}52C_lyB{rB1VY#f3jbfu&QA;+Cjb{_sL^hdCVN=-*Hj6E1 zE7(f5idC^SY#m$A>e##NL$;mmU_04oY!}FEW9fzqb3Gc2hM-(D6y>2|C?6FdKNukzOkjo>uz(d}!L}aR(MV)R z87Ko4p<+~mO2G~e5ZrAKIZy(nFado0ShCpFDKvxT(4rQt zMr+VoREuiSdQ=B3p%tV+8l*uF=m|dlo@Q=qV}5CIV&0fBMgGL%y!??bl)m7f;LooJ zrBYeu%+%e^2yA!&ACc+0yRf1(3j{i|D`ELRD-@kNBD!LR^Ep7W9axxJ$k1V z<_8K(OY+JlR-1p?0AEH|kQCLT4D`#u%mRN&pm2DhzpPJYNr8U?q(OT~ADAkHtoQiB z;eiGxuA$%f(aIQFjjr>B%Glsz9XHTT^b2%>3`pFfOgOw9tYrG^e9)UN$Z=F_BdqSOY`%DOIKrrT0gg?ezI5Z9wwOb0o4nX zq1JprNT7@H^H^_69 zk(HI+1dF$xE}AxNm0)Svto5Wxj}s8V*`%DMjQ=&pfB`;{;RPW$Do_o3Ikv$ zWWX@+_3!Q<9_U->A3q?waKy;^{{}WNMOJBnKUWzkFw2;t!sPm`H2<)Q5d!5j+Hv6* z1UvEAjXgL42ErhC2?no54wQktNFcWMkPCM3@sYamK}mi3<2I=2swY*6U&I}dvkJF| zyegCd?ZKC;RCOvXDK9PZcP=an_{#)G8trw$>B8YO$gjekp`iY7THhSO!+HlZ1ODRj z1}j~0RyFR1yMrG_L9w8~B*d^M&PM8L+zb0)IE<*qy>SkVghEK>SI1d{Pr_kKncNx) zpGM1r@Q~-^a`8|Y4MmXrG;p?*$@+Sk22lNY_>d=%rk0iEO{~Fw)DpFBR5=nCBIl}A z;A>nc3gQysdc`oN3YWsz|L=O`!u0~U0?MGG;d;XDCg95FynF>uf^rBz@_;8D!z9P|Ls!}IwC@@^Im5KM$AXYgBi z0g~c{coANV9^g56DY}D~p@Z`kJ%SuehL@jV6}$qkY+w}tsBB=A2B=n}rZspCUW;qt z6_^CC{tu%x5J)2hJVOwVm+%MmtPp&j6@33i3(q->KSdAlQgjeKKnLM9KrmV04IzxX zghHDK6G7epgd_ewqJ3 ztqvZ>N1mkaQJ4n422&>l98cm?@H)(VisM=Qbt5MAkX*nQVLHr!DE8`{GV zSSidiyjg1GkB0SB49QGO?^{@2IIPH@?avSJ?}b@xO7b}6iGrw+vzjQ03YNgqYN8<# zunbm!j~^)Q5=#suY85Q62Z2Nr(@Rh4skc8+L!yb9-y==z->58>#3ScgVk36qAWr;{ zxS$HEp$1mNLRhnwxQPcjkb@+WBv=a@VF(O?ci}yu%p!#Pm@p=_75?(ndQFW- zJCGFQtRl&UzgKVPrLqrFJ> z6U)8f9Y}86=u7%FP)n{d;+aO#rfGtub<0*y`UDw720u|S1U5ZYkVo>LI9dSjgRgg^ z>Jg++7|w1$mnt#}K6t`jq?nWn8?}&DRqtvet&wsvPQW-oD&Rx-s9J!aKJ-35LYCT% zOd`R?!XN-!9~TChjI(OU6f%`egOA};*!iS5$PDu4vl&ljk=gJGY=dNemCTk+c(U-h z?L}lUY=<3?{QT5xOW_lqmIsoO&ZvRxq;M?4P+yE zhrCPPBb&(kgpIGKEph`jts*z!{Bt8L`Ged=`=LEtfUltg zKf?$?Tk5B6q*uDWe4sIX{vi*9ED=Uy@({jxj5bB6X%)qA={bE=B#gw+9=;W3+{fc> zsq?Wa8b-sBvzkh&48DgStErqS;0lMsp1D{U4xn{6qV3_<|I^oLD$c5=9cd@H4SzjJdD@v~ zB6T(GLNnkF{83H2(r$1U{)FVgX?=5^4&1p)Wm?}H{^PhN{0N)MkWKqMC)JnsgTLV( zB=ZYw?hb?LkOnX75v6$o0>j`T$WKv!!$S!jPDjv@v~WOqJ?j;gmT(xsBlwrYqWShA zreZoq0HB1Hau{=%RMWAvjKh?}419d0y%n8EU*<2`EutD)Nnhc=wx>kDN;yF$NP)v4 z9F|mLFP#jz91aB^|BW-XOYhX8#-~v_gU&(DHFPF@gT6^;(b*i9a#+UUa1P5ktXM^}-R&qFk!;u`0;;<2Xn|C@Wj$TGr3f7j>6&zM^SS?tq60B(&tTDkFZ;rEf zT}SI0M=!d8!`jBgd{@BZJ-Ug*Iu0A2BC?rod6q5cR@#ljdI1uCUtEG=JN@k0ZG3_D zgX#65Uun}1Y>4#Wv9Q|y_57I-_Knpo+=CBDab66zg{m0wBn3Ug`_ebdo;Zn!w zaSq3D*iubTqFN4HA+0{@&Nht)zoy>^2QScz9JX=TQB5z=Z#f*t;iPA31c%YfLM?FE zKHuJv|HdrSJbj*_R~xpR{AFcUMb@5m;BY2~yK=Z&4NGCE0vg>p zTv!jtQg^X0181#anXD`8#=5gC4rg&Vhr|6j{1S)rp5zqk#c~9VK9~%JM^X`OF5*%7T=&_mXjloX_y|lbQUJaYc-bAhY z_UJAAYIJ=zTY#KvnUBq7^H^`jv$yJFHjKmh9PY*80uKAvvOef0Tg=`@H_=TF`yhkE z!#O+>G9W_;WNc|741R>- zXBrwi*ifnELZ$NCn~h*pWJMXNhkO?DdB~oSYaxG!+z)vu2_gxR zFiEIHD=|r8Bvy${;+7;x5+z0;>;>0#+<=|$-!>37l}q?e_)qz`07#$;ldM5d8N%i76OWVx~;S&3|n ztV~uZnC4ua)nW|Exd?tO!#`72%2~g-H>kh*j7X zPDNWq7e&{gqPwD}!l&r17@-)Ws8EboOjJ}VrYmMC<|yVV7Ah7imME4f>J&Q^`xQqO z7Zu+tepFmh{Hpj(@w?)t;vXed%9KWBtTIXIRW?yJQ>G|8Dbtl1%C5@p%Av|aWr=c( zvP>CJa>{AS>B^bPIm&rTUb#TIQn^m~k#d_dxLvtZxktHA`GxYJ@`CcR@~$dOWmhGu zQdON)>8dWOp{hdF7}YDPm8uP@cU14G-dAl_9Z(%o9abGt9aEi9T~Pg?x~%$1^^59P z)nBT6s{5*k>M*rTEmtemCUuP3sU)$P>n)ye8q^+5GY>LKc(>S5~9>Js%Bby-kd zsa~V5Q=d|QqoEp!CQ;K)(?OG>>7+^5bkX$E^wIRw4A2bHjMNlsN;P9O<1`aAFKb@W zOwvr#@S4S%C7NZLDou@Mjiy$!NwY(MpKyyfQTys)$T60!&UUNM{7LgQ@9g!PR z6j2f}CZa4N5HT)dLd4XF*CS>`1mB356)`7bUIZWUZp49zA0i$`$|4gY6C>M2rbKp( zOpDBn>=v07*)wuPA8H@zh>ityVx3B7);V-> zx_F&O*HqVB*HYJ7*H+g~m!a#X%hL7IW$SWudAeb`e4StSif)GPP2FtWJRPrFpsUuc z(bekebQ^W=>OR%&)a}yk(e2ZHp*y8Jt2?i|sJo>5PIp~*Tla_VPu+dpL){}i)*JNg z^cnhY`Ye4feYQTBqaUm<&=1#-)Q{2^=_l%6)r0;u{pUZcr z)9=;q*B{Uy(x20Rum4?tM}JrUm;QnNUjs4_L!`lMC@_>7UNP{71%^e2w+%}T%MB|H zRfZbF8bhsNyVDj}*(RIjMXQ469z ziaHkcs}URJ#z>>iXfPU$u|~VmX^b~|j9rYJvCg>FxZSwZxXZZD_=WMH@k`@5hkE6FmZ#TVYN;hSj`k4Be2AW2uQ_(>}A>9Ambc zZDxnL%p5e&HqSNBH@{_GXkKhyVqRw6V1CE^p80+AX7fkpt>$g!?dIQNqGHlx0x_#& zPFf-@O)MQO$(9sLM@vsjwk5~X&oaO=$Wj`#Ot4I{1TCCpvSqGifn|~9ZOaPFDoeFx zwdDiLKFd|hZObDovx=<}Yq(WmRarIG2&>83!rIZ=$(m;EZ0%{yw&qy-T1QyNS_9T` z)(O^1>jCR=>m}=t)}O3bt-o7uS^u#9X?+;WVxwc@V!g4wV*AC8kDV2}Bz9$NusU{4 zY+dZe*!N=Jk3AN9JN8c-waINNTZBz#i?W$)E}O@eXlr6?Zfj+0W2>}nu${4s?9J_| z_RjW9dw09f-rL^S-rqjn{vBspGmq&hk|(u0n!j_!^gj$V$DjxHHNb?KC^B&Jt&(bCNUYe9d{( zdC_^r`HS;@cQWpD+)bCx<#1)W`nra>M!P1sDqXL-IM)={G}l|Mm9CAh9j;xjJ+A$( zgRaA_qplOK)2^RfS6$a!*IhSVcU*tE?z!%}9>#~ntK&WK9pn4O7sXGBUmm|c{z&}k z_%rcW;%~>_i+>RRDCj2cP`AvjaI4%JcV~B=`(^iJ_iXn(_gn5o?j`Q!?v?J1?#=Ek z?oZs?-Fw{o-3Q%=-ACMic^n>}XP_s~Q{N*0a&` ziD#E*k7vKdZO@|waYAT1xu0q(@$fSLzM-D!kF&7_Zf9_r`hSy)C`%ydAu$-p<}k yZ+CAGZ%(Xtkhj2F>>cNw~{KR%KSp0tv76Z=! diff --git a/learn/cc/string.cc b/learn/cc/string.cc new file mode 100644 index 0000000..293e22a --- /dev/null +++ b/learn/cc/string.cc @@ -0,0 +1,34 @@ +/* + * ------------------------------------------------------------------------ + * File Name: string.cc + * Author: Zhao Yanbai + * 2017-01-02 12:04:22 Monday CST + * Description: none + * ------------------------------------------------------------------------ + */ +#include +#include +using namespace std; + +int main(int argc, char *argv[]) { + + string s = "Hello World!!\n"; + decltype(s.size()) punct_cnt = 0; + + for(auto c : s) { + cout << c; + if(ispunct(c)) { + punct_cnt++; + } + } + + cout << punct_cnt << " punctuation characters in " << s; + + for(auto &c : s) { + c = toupper(c); + } + + cout << s; + + return 0; +} diff --git a/learn/doc/mac_bash_profile b/learn/doc/mac_bash_profile index 591b4fb..995e648 100644 --- a/learn/doc/mac_bash_profile +++ b/learn/doc/mac_bash_profile @@ -2,8 +2,8 @@ #HISTCONTROL=ignorespace # 命令前加空格避免记入历史 HISTCONTROL=ignoreboth -export PATH=/usr/local/sbin:$PATH #export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH" +export PATH=/usr/local/sbin:$PATH export PATH=/Users/Ace/.local/bin:$PATH export GOBIN=/Users/Ace/.local/bin export PATH=/Users/Ace/workspace/github/metasploit-framework:$PATH @@ -18,3 +18,4 @@ alias cls='clear' alias grep='grep --color' alias egrep='egrep --color' alias msf='msfconsole' +alias cdw='cd ~/workspace/' diff --git a/learn/doc/vimrc b/learn/doc/vimrc index 851a41e..cf110be 100644 --- a/learn/doc/vimrc +++ b/learn/doc/vimrc @@ -95,10 +95,10 @@ set nobomb " "为不同的文件类型设置不同的空格数替换TAB -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set ai -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set sw=4 -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set ts=4 -"autocmd FileType php,python,c,java,perl,shell,bash,vim,ruby,cpp set sts=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set ai +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set sw=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set ts=4 +autocmd FileType php,python,h,c,java,perl,shell,bash,vim,ruby,cc,cpp set sts=4 "golang默认使用TAB "autocmd FileType go set ai diff --git a/learn/python/dictionary.py b/learn/python/dictionary.py index 64259a7..68ff7cc 100755 --- a/learn/python/dictionary.py +++ b/learn/python/dictionary.py @@ -29,6 +29,9 @@ print D for name, value in D.items() : print "{0:10} : {1:10d}".format(name, value) +D = {x:x**2 for x in range(10)} +print(D) + D = dict(a=1, b=2, c=3) print D @@ -38,17 +41,21 @@ file_sz = {name : os.path.getsize(name) for name in os.listdir(".")} for item in file_sz.items() : print "{1}:\t{0}".format(item[0], item[1]) - - - x = dict() for i in range(0, 10) : x[i] = x.get(i, i) for i in sorted(x.keys()) : - print x[i] + print x[i], +print("") +# Another Make Empty Dictionary Method +x = { } +for i in range(0, 10) : + x[i] = x.get(i, i) +for i in sorted(x.keys()) : + print x[i], diff --git a/learn/python/list.py b/learn/python/list.py index 856c021..6354dd5 100755 --- a/learn/python/list.py +++ b/learn/python/list.py @@ -111,12 +111,34 @@ for k, v in reversed(zip(a, b)): for x in range(len(a)) : print x, +else : + print("") a += b print a +questions = ['name', 'quest', 'favorite color'] +answers = ['lancelot', 'the holy grail', 'blue'] +for q, a in zip(questions, answers): + print('What is your {0}? It is {1}.'.format(q, a)) + # 按下标循环 print L for i, v in enumerate(L) : - print i, v + print("[{0},{1}]".format(i, v)), +else : + print("") + + +# list 只适合快速后入后出,可以很方便地利用append 和 pop实现栈的功能 +# 要实现前出后入的队列功能就很慢,此时比较适合deque,用append 和 popleft实现 +from collections import deque + +queue = deque(['Apple', 'Microsoft', 'Google']) +queue.append('Tencent') +queue.append('Baidu') +queue.append('Alibaba') +queue.popleft() +print queue + diff --git a/learn/python/set.py b/learn/python/set.py index 43771fc..d5c7322 100755 --- a/learn/python/set.py +++ b/learn/python/set.py @@ -24,3 +24,9 @@ print "a&b: ", a&b print "a^b: ", a^b +Set = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} +print(Set) + + +#Empty Set +EmptySet = set() # not { } diff --git a/learn/python/utils.py b/learn/python/utils.py index 9dd28ab..175e0d6 100755 --- a/learn/python/utils.py +++ b/learn/python/utils.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- # ------------------------------------------------------------------------ # File Name: utils.py @@ -16,6 +16,13 @@ print('OLDPWD:\t' + os.getenv('OLDPWD')) #判断一个对象是否可以迭代 -print isinstance('0xACE', collections.Iterable) -print isinstance([1, 2, 3, 4], collections.Iterable) -print isinstance(0xACE, collections.Iterable) +print(isinstance('0xACE', collections.Iterable)) +print(isinstance([1, 2, 3, 4], collections.Iterable)) +print(isinstance(0xACE, collections.Iterable)) + + +s = u'这是一个中文字符串' + +print('{!a}'.format(s)) # !a apply ascii() +print('{!s}'.format(s)) # !s apply str() +print('{!s}'.format(s)) # !r apply repr() diff --git a/tools/comm/htc.c b/tools/comm/htc.c index 7b4b549..b5be73b 100644 --- a/tools/comm/htc.c +++ b/tools/comm/htc.c @@ -20,9 +20,9 @@ #include int main() { - char ch; + unsigned int ch; while(scanf("%x",&ch) != EOF) - printf("%c",ch); + printf("%c",(unsigned char)ch); return 0; } -- 2.47.0