From a929e2f5d5ef36199034ced1790ab70c7e72f845 Mon Sep 17 00:00:00 2001 From: rakesh Date: Sun, 20 May 2018 21:53:17 +0530 Subject: [PATCH] Python 2.7 to 3.6 converter --- Loops/Char_parallelogram.py | 19 ++++ Projects/snakegame/colors.py | 15 +++ Projects/snakegame/food.py | 47 ++++++++ Projects/snakegame/snake.py | 115 ++++++++++++++++++++ Projects/snakegame/snakecrash.wav | Bin 0 -> 102648 bytes Projects/snakegame/snakeeat.wav | Bin 0 -> 17730 bytes Projects/snakegame/snakegame.py | 173 ++++++++++++++++++++++++++++++ Projects/tic-tac.py | 64 +++++------ ZipCracker.py | 166 ++++++++++++++++++++++++++++ demo.txt | 2 + newzip.py | 164 ++++++++++++++++++++++++++++ python_converter.py | 33 ++++++ unicode.py | 5 +- webscraper/nscPrice.py | 56 +++++----- webscraper/youtubeDownloader.py | 2 +- 15 files changed, 805 insertions(+), 56 deletions(-) create mode 100644 Loops/Char_parallelogram.py create mode 100644 Projects/snakegame/colors.py create mode 100644 Projects/snakegame/food.py create mode 100644 Projects/snakegame/snake.py create mode 100644 Projects/snakegame/snakecrash.wav create mode 100644 Projects/snakegame/snakeeat.wav create mode 100644 Projects/snakegame/snakegame.py create mode 100644 ZipCracker.py create mode 100644 newzip.py create mode 100644 python_converter.py diff --git a/Loops/Char_parallelogram.py b/Loops/Char_parallelogram.py new file mode 100644 index 0000000..fa58985 --- /dev/null +++ b/Loops/Char_parallelogram.py @@ -0,0 +1,19 @@ +# Program to print character paralleogram +# made by : rakesh kumar +# Licence : MIT +def printString(string): + n = len(string) + for i in range(0,n): + print(string[i],end=" ") + +string = "TESTINGPROGRAM" +n = len(string) +# print(n) +for i in range(1,n+1): + for j in range(i,n): + print(" ",end="") + printString(string[0:i]) + print() +for i in range(1,n+1): + printString(string[i:]) + print() \ No newline at end of file diff --git a/Projects/snakegame/colors.py b/Projects/snakegame/colors.py new file mode 100644 index 0000000..4df14bc --- /dev/null +++ b/Projects/snakegame/colors.py @@ -0,0 +1,15 @@ +#================================================================# +# Name : colors.py # +# Description : Common color definitions # +# Author : Adrian Antonana # +# Date : 29.07.2012 # +#================================================================# + +RED = (255,0,0) +RED_DARK = (150,0,0) +GREEN = (0,255,0) +GREEN_DARK = (0,150,0) +BLUE = (0,0,255) +BLUE_DARK = (0,0,150) +WHITE = (255,255,255) +BLACK = (0,0,0) diff --git a/Projects/snakegame/food.py b/Projects/snakegame/food.py new file mode 100644 index 0000000..6fdd03d --- /dev/null +++ b/Projects/snakegame/food.py @@ -0,0 +1,47 @@ +#=============================================================================# +# Name : food.py # +# Description : Food class definition for the snake game # +# Author : Adrian Antonana # +# Date : 29.07.2012 # +#=============================================================================# + +# imports +import pygame as pg +import random as rnd +from colors import * + +# block sizes +BLOCK_SIZE = 30 +BLOCK_SIZE_INNER = 20 + +# food class definition +class food: + + # class constructor + def __init__(self,surface,minx,maxx,miny,maxy): + self.surface = surface + self.posx = rnd.randint(minx,maxx-1) + self.posy = rnd.randint(miny,maxy-1) + + # for drawing the food + self.foodblock = pg.Surface((BLOCK_SIZE,BLOCK_SIZE)) + self.foodblock.set_alpha(255) + self.foodblock.fill(RED) + self.foodblockdark = pg.Surface((BLOCK_SIZE_INNER,BLOCK_SIZE_INNER)) + self.foodblockdark.set_alpha(255) + self.foodblockdark.fill(RED_DARK) + + # get food position + def getPos(self): + return (self.posx,self.posy) + + # draw the food + def draw(self): + fb = self.foodblock + fbd = self.foodblockdark + sf = self.surface + + # food is just two blocks + foodpos = self.getPos() + sf.blit(fb,(foodpos[1]*BLOCK_SIZE,foodpos[0]*BLOCK_SIZE)) + sf.blit(fbd,(foodpos[1]*BLOCK_SIZE+5,foodpos[0]*BLOCK_SIZE+5)) diff --git a/Projects/snakegame/snake.py b/Projects/snakegame/snake.py new file mode 100644 index 0000000..7c60cab --- /dev/null +++ b/Projects/snakegame/snake.py @@ -0,0 +1,115 @@ +#==============================================================================================# +# Name : snake.py # +# Description : The snake class definition for the snake game. # +# Author : Adrian Antonana # +# Date : 29.07.2012 # +#==============================================================================================# + +# imports +import pygame as pg +from colors import * + +# motion direction constants +UP = 0 +DOWN = 1 +LEFT = 2 +RIGHT = 3 + +# block sizes and colors +BLOCK_SIZE = 30 +BLOCK_SIZE_INNER = 20 + +# snake class definition +class snake: + + # constructor + def __init__(self,surface,headposx=10,headposy=10): + self.surface = surface + self.length = 10 + self.poslist = [(headposx,y) for y in reversed(range(headposy-self.length+1,headposy+1))] + self.motdir = RIGHT + self.crashed = False + + # for drawing the snake + self.snakeblock = pg.Surface((BLOCK_SIZE,BLOCK_SIZE)) + self.snakeblock.set_alpha(255) + self.snakeblock.fill(GREEN) + self.snakeblockdark = pg.Surface((BLOCK_SIZE_INNER,BLOCK_SIZE_INNER)) + self.snakeblockdark.set_alpha(255) + self.snakeblockdark.fill(GREEN_DARK) + + # for removing the snake + self.backblock = pg.Surface((BLOCK_SIZE,BLOCK_SIZE)) + self.backblock.set_alpha(255) + self.backblock.fill(BLACK) + + # get snake's head position + def getHeadPos(self): + return (self.poslist[0]) + + # get the motion direction + def getMotionDir(self): + return self.motdir + + # get the snake positions list + def getPosList(self): + return self.poslist + + # set the motion direction + def setMotionDir(self,motdir): + self.motdir = motdir + + # increase the snake length by one + def incLength(self): + self.length += 1 + + # move the snake updates the positions list and checks if the snake has crashed + def move(self): + motdir = self.getMotionDir() + headpos = self.getHeadPos() + + # update positions + if motdir == UP: + poslist = [(headpos[0]-1,headpos[1])] + elif motdir == DOWN: + poslist = [(headpos[0]+1,headpos[1])] + elif motdir == LEFT: + poslist = [(headpos[0],headpos[1]-1)] + elif motdir == RIGHT: + poslist = [(headpos[0],headpos[1]+1)] + + poslist.extend(self.poslist[:-1]) + self.poslist = poslist + + # check if crashed + if self.getHeadPos() in self.getPosList()[1:]: + self.crashed = True + + # check if the snake has crashed + def chrashed(self): + return self.crashed + + # grow the snake. add a new position at the end + def grow(self): + lastpos = self.getPosList()[-1] + self.length += 1 + self.poslist.append((lastpos[0]-1,lastpos[1])) + + # draw the snake + def draw(self): + skb = self.snakeblock + skbd = self.snakeblockdark + sf = self.surface + + for blockpos in self.getPosList(): + sf.blit(skb,(blockpos[1]*BLOCK_SIZE,blockpos[0]*BLOCK_SIZE)) + sf.blit(skbd,(blockpos[1]*BLOCK_SIZE+5,blockpos[0]*BLOCK_SIZE+5)) + + # delete the snake + def remove(self): + bkb = self.backblock + sf = self.surface + + # draw block for every snake position + for blockpos in self.getPosList(): + sf.blit(bkb,(blockpos[1]*BLOCK_SIZE,blockpos[0]*BLOCK_SIZE)) diff --git a/Projects/snakegame/snakecrash.wav b/Projects/snakegame/snakecrash.wav new file mode 100644 index 0000000000000000000000000000000000000000..64ee4387f6a5623f05450ae0a2e7652cd58c1012 GIT binary patch literal 102648 zcmZs@1$-0P_Xj!>*QQNssk^sOtQ3m7%fjOB?(Vv{!{RJ1MHbg$rAFP|Jxv>zv3Dma z?C<~H+kBGVxpVG0-|zRFb7#^rJ9fyxfo&&XXkwoU1LiMV>tO>y5DZ?DU06_?3 z1I?YacGgc|GmH8R4S^Ox_o2JM=oBP}uYi#pa)pFY0`-#OL0Qy9>H|53+(`AqeuGA6g9+e2juc%98Be94qf<(|$=pEUM>8MiT zn0bn^Kiov9VXZmQpuo=|zK9%I$ezo3!#Kj2!&*-6rr3Bnp(eURyKoh>gL4?0MvjJ> z&~eP|&`XR-+`>c*9;1b^nctWBk_5nlae4#{ANxGzaq5GAj`?voAG- zTM3ovU6Flgsd+U#yERW)$9RPXF>hi|p-!l+Zm9{@I=3}2H*tHzmF%C=lU%tu1=^rL zZm8ot!r5>EGJ{Wu{n|pXW9HL_dhQg0P~G4ZFz+DAtnK6mDMz#q4yEox>kM}&Z%(d$ zv0^}Pq0B4V@vH`;hRtK$<7_s+VlTiJBQw#D_%T@u zI!WT8fgC*HllGkQ*vJ1g=lsiiAN!S8`A^EfFIk-7HMmU3WV_ z>|+;WTjfr<$uUh>BHWMiSkp{D@u&48l*97iTDQsxZ?M-xOXTjpbEzHE2T$@p!GDIn zMWn<(m5yH@{rr;L_Ga?G3F&tW*4YRK=;j<8y+7LM(V2CUxwdp(a@~d3cRb$isa((! zK)8EfVSMtuA#Eck5kraxeMqZ$$Sdo_9hPlZhYl=Wl6^?MzWHVshh*lhfEM=Do;iia{5m}K*a%Edg+s%xTpR=DSZaHVwBpvkp z7VaOY>67j<%k_sY6Ca))|50du$ln;H8d`7fuGmqrl>gR8-OIiY!xeItvbvoGtQWpdTwfJ^?frd7(=bk< zPt2s&E^B-{tJbNmSL=VKsfXclCJH(Y|8QO7lU^}>>Op=gp{&s zd#Y4h)HN+S!u^A{+VMzRz^o;tm9&pzv6B!uB(m4v7~Zo-bwi9nYn(^C9fl<4k~qC zF4^#7UG4*Q9arT&#s(_x5$b7*bglcmxp<}XUyWVZ+dXr_qp{@PXXAUijnil5gmX?k z%A%6VH$A#`8Ex04puS0{Cj5iKJ3935{>rqmETGWGV@U(w0Z-ZY=CGFfA&!n<%ww&0 zOwye48%9vC7V3SlmrfGbO?6*Q6W)7O^k{h|UN|}``cuacQ;_0P!JL|C_b37}i5jNK z**;v8%s<2YHOjfeXsVm(&oA9ls_H-b#rb6+o10$$eEj}L#Q*|{t_{V}-AdQ0ux{(9 zLeuq>Gw*WU*K1FOE^|cU`iaw7>8_RBgWuoCVoX=qUwz*O-}NULTl6j8Ri;`fku!&t z*2EH4*FG>E<~Nk)i5@xh>M%m5ec#hFs(KQCA)hE1<89OWvF$1DEsT!26)@kwO7ZdI z=bAUQFGE*K<${f#^VNg2b6?*uHQIa#nJ4+H{JY)c{JWK&ZOt5|ZK^{vJn1_p?Q~To zoHh1%&|LUL=MANSa;EZLx=*x;*Hx5TvZSt}a9QHJ`WN+t_($if-J3ZtR2`I8RSkZL zA#<=;)Vbk~oMcyF>Hci3ljK6e5Y01fA4C7{0&JDv4u(DRYsHvHyX(3YbdrthFpF$t zuC6&}-_2cW^E~u@W#{HqiSM%}kQ?mBd+?hIE7pCyU|KG9blcMLX%{l`irAyI{=@a0 zVC7$3wug1I-ORZ7CL*s}L#b=U(CF}$j+~s&aR<>3HmLzA)a#1-!tGVPpdn?loW+jr zgO^3$70x6^e|T5_*r@S3<=({26tdn_{Mek6D1;?@u)XRbxg8=4Lf=xe8duhz?4a>U zwLMYYlqN9`w5j}Kf%_Nn1U~OYr-IKVZbnhJau);gvN2UX&#OQc`mMEQA^wM5V&`Lw zFfBXipm2xd*Om^SpJvVYK7+`2hB}SxEez_dz881AFoQd!t5KFl$+VT)lKTB+@oCSh z{aNnK5A201c9)BOYR~DtD~yvulRq2tjV*FySm$lsItAq=#um){Bv7*@`K~rG`vNl| z1@uRv;JdEw)!ny}0>&)fEDh0 zVl?V|%R=*uA!8H#$zE``{yWkqPy6;|RexP(c(sSAGY`J0pIS9MtB39g*;&eobPmVt z*aIS5mj{WR7M0)64k@{={Ny@=|FPb|@zvw#mTOs;UQ9>(vwMxxgao+%P+YBPO!%7= z4gFKH-)73&gsNR?nPG(gO7}_q9y@N}4lPx`GGr6%S@Jus*Ss@?OY{GDv8Jv?_t@*W zKp4@7aV}>A%b+;#o=t?prg~TJ9#LuCP@A$^Ly%3Ws}!y6P~5kC_lvUZkIL4v=la8_ zV?%h*`7WR3-9<^Igdz%l=2G1`+hch#8@+?%HT1y0lsQu?eL4JIad7vwy@J+Q`10LgcQ@=grlI{cS5Ml)7g16{jOTm-ZXS@6)=h z=)B-GHc|6g(=Tsx(zbWcRcD1KMq^GQNQ-UB9%l9>*1KH|PvV~m=)jmzxWshw=_B%{ zvySrV(9`y{(`Uu}v~?Gg#Rqt_(D$7Y;Cv$ zf)4MPPwoo9-2Z7N3t5_VWH9fR-C@-fWBjLpj2{`U&{)on!4tep1*xj~v>oFa2FfJj zhG9Mf6q<+Xw2}^Ot9-Y2xF+xs3vf?yJj1sESI;YKu9)_3QC+{R96Myt?UGQjgQ?Kr zdY9K_O~H)NSiDE@$nvO6@50y&rFo|3g3hUqw}@})=(8u<=^keVW%l-2SD}A;$eeQ| z3B?yo^?}hYm!yB$8b#}SHv9gqe^vbby{-BJ6h?oCNQ5H5H;O52*jTjOdDDA4~kS1?=TEC*r0X>K{1Vg+p zgi`prx!UN_6j;b4d{l=!uI{s)e|Y41yQ`vZ=>0cOGD9k2k->r8JNIC26;G*p9jB{3 zkEb#{YWiyZBzL{-#Uq_p@hc!0y;k3x^(<)(4%wvp95h|cEg`9vaP1;n+*BqR)P11i z2%Fy6CsS$XFPOBhvE^NQsj{PjrMzoSAMo69qrR|qeQGcHjM_EoNyXn9O{N~$E&ElR z=Uq2CbnqW=wc3^3Ys!^vl59m%6ThVXo&TaLg0Yv_g$}Yc)XOT? zCp5PinPnbn z_;d18zM-BAwaZE(l*3z>8*gh{6MI!$gn|Vi%|mpv?(aJI!wx?EcKQa|dC}ef|Z*$;7!?vka?DqlrZ} zc>TLv6Rw7av3Gg9cRJA8K~yYDx7T}}6ROMJS1t~iBkb#wqKL55dc1R;7#P+t;d^+^ zHXF}kI3}6xDRC%OQTwKw7k2#N> z?y}gO*;y@Q`+uqm)4z3@E@jA;s!M%V<$2d~l|>n^A!@*R;poPdP(!7T--mZf{;@;2 z=Vrn)~wgRa{r3YX>M%B8fQmOVLxLeVh^P3w$ZW=#l>xj0eq-D*p#-^8No(q zAC+z=4|sf*mV5Oo9btY_o7L%?77+(XQ66;1zCB?T&?ttyOglv z6))p)^)CGzH=*n0C@lP}<2^|c=e+Ed%}~E2*Vlqas*tR|vXP2HbeQOf++BFJ{!r`E zGG^RzQ+buW=#kHQrKiszCu~q=FD!DKZGL@fp8DPA8U^!>e-c}0J4@N3*iyDTIk4hV z&V!cg!t|gh*8a{*B^SeddS8IecFPs}n72*Z#wSI&spd}$lA;sNRHhL+q%C}_SJ#+) z>ENiwh(u0;?MuahwlUwg6kW>>!j9O@^gJ8Es+KjsSKc)xJ7fmz_vLvGWL0xjaDWO8 z;y5Tc=k*cQHQ8vAv9LV(M^l}8w2Q$bvE>$SY}jJ|A^1v{#{PFjozO!Kb1^^J1E+cH zp}I4=?U^g{rj{obL^e5V9h#Mf10_7IH#wdCJyP#6cuYt~j=!DRDQ~-oK-MzSlIO)w zOHD`h4&jD%c&7q?_9441_K!T@L>337%1#=gxKSCslE>+`17-E zMfwSE)!dP-^y(b2)Ft0xn%e{W!_=bIl=AuZGIERCOu;poH4KeH)*5N7|rf#K{2DJvp1#k0=@@;cm;KTG<#OAkr&dn-$T2jjEicLr}kny~c&=_&_!4iekXtuNzm3t8 z?AF>be|*Kc%4rqLzW1nM7{=iDeLl<9aSluLwkp@rUQ>iK(Q%?c`|DcogrT1f7uK;B z374`jwe<4v9@FQUrubGON5Y&ine~4+CKgc0U5XxmOrw zv<;N~6Z&G%*s!-Ai%()r=dea_ z%5#o`fQ`UYe$I$1%N9{1Boz)w!@;-LY6jLrrXSJ}XXnUaJ$<_Lq~aA}rti8?m#!|W zk>UEu=Ck$JvcU$hXyj9<-UhvDC4f$xSV_h1n4rIcPL;MKWM5G?hkbCTrJ!q-pcAK@7j5LAXj8|?jmU*qv9mC)%c{QB-CLsFyX>{S>5_UA|2*UrBHi0__Hl;XR_Jr_7I=tJc>r96K5Gl}=TE7F=U|W}6-CI_e^i z+2z^n(xn?VJ2&uf_(of2r73%BdPUlhnm=@>xsPMCZgZIP$-U%gXH{>a$K~KG`CiUP zV_{jXf>*w@xO-;M_l0Ftv)Zs%xY_Swzc2mbZT2~>5cEPv24Uy}Q;^|dX4J!T&mI)H zD~vXgm``O`Q-b=Ub8y4}w;%XNO^?Pwq%U`)s7KJ%j=g-{_4QC4P;)59D zW$PmvI(>>B8(k$Du3;PebQ4%NnQwLPYIUXL_Z7MF)(k29EPVXAj#s+Oyv`mFTLAplWZ#Z9$NW z{3`EdxpQ%hHjS6Nr{Am~sc~qW41E6hU0s z=^u*Z8jFgY`icjM zx42A|mwMXD*O9nxVS+fRy7GC|c$ceQ!)2-P#+EMHXhI;G6k6Wnp}W-f8JU45%NDsr z33u1e)jq8AFiF~ul^3Dv7NO~8VfXR{=7Z4ejz7B3?03=|;%{smR=B==N7GH09Kl!U zQpuU3e}&n?_cGj|tger*OVns_GQlmr?Y-h|?H!fgBO8|5qqeKNp6yoZ$uX|~tf*LD z!Gz;&RKDH;iA)#W+{*CggN&(e?xOi74poh9<@Vyd$O~_hVm;XR+21PcRF_Qu1Z4J+ z1dsQcp_x^6+pvc7y;Hx?@wPnv$rjJNF1dRe9vaT__4<0a#AK}ftQC^(-p9NQ?$1=O z@*_J*dfGeO^m0jO5B;`ls4;b zab{?$^TL!VMKC+i|4V>UEHFP+b!?r^?c?NSe~rpAy=xFP_sKtr#IRfC-?}Vu*dx4K za=5{(^lz7GeYg26^wi>v%*fPBikHk&A%lbvKBU@J)rp-fYL)lk+dKBdPHFeY5Bjh> zJG$zl{RF;=JYBFY@oi0Sq_^wT09llW?^h14|7eyHFEj_5?DDjlo5*g|)=ug;IW%^V zu9L!kzIbT8sq&Z-f`TP%{=udtISY!$)%l8!d)*647hUGVY)8kXUZGH)ox&Vdr0DKg&?AJloJuTW@#4?H|7!;dthQeAm}^vg(`r+iHX3oKoBR)Fo6KpahSIk6nVVAPwRR+;9b>yr?kea)$s=Ub4Od&k%Jg3srgh95QE{v_ z*bDdG&wpxIfln3O^*9i@LwrEGo08PXlChh2ziq8B==Nx$)C5ssO7Oc7)n)M2u8&;0 zW4<4zR&1#s#ogq$!M0SpBmG0on&yMTe?o@#9^Ka*`q?v|QCeP89b0MBn#X^pbZFX{ zv!Y_M&dH^++oX`5vZjXTh7^JwFwXtH_&vO*wqtI?gA3V?rTc97y|Iv4ethQ*$_trs z%|`QVr{ON$(Dfy$Wmk(6nQwd?iMLF$d9Tn$UJ)P-SkDm&^IArg%zD)ErOnUNc}tBd z`&3y5vY*4zPiDsWYl0U_ZOAyagz*=2ircB`yqLcs&PTFecjKxEEZ+c z)iJfpPcI_qJRz%S=3QVOcfQTttZuFQ^krK=IAU9mYrc^-y&6B1P)x-Bi*1Ai zWr#F?m+pMmIo+XPWBn}qN6;}=gK#OUZ?Ga_x_hdFj)=@Oy_lFSsR|{ZyHt=!8(SF$ zUtyhhSSZTk9`#-B)-8A)@0{T~&Q$Jf8C=P3+@VW_N6Q{|>NRR%c&lu*YFb4vvnLYj zTEQRJ8k?0~6x?*Hb_tmW7j=CQb5G{NP#ZMr7)_eCYw@ns>^RZSz`7AFH>B%3)cA;< z|7?Cx@mc>;nADvUx!Hf8<2jZ6m%HCj77lI;a~~i+XKbxE7fBRqO^dU%o0I!1+d)nF zrDV$n@xR_nxd)wU(Syo`&F>2DmVdU>_xs#(S=}ft_>}kH+aHi6rd|uE2F>|kn9E;%E%(dB6@{b``z;TSV zxnEz=(5q&WrXOpFdU9JH@j|J>H%j!rXir9Ilzyw8Eb6!wz`O-%(|19EP3YKMLF%sBv7tX>DyPzF+mhq%hnF z9Tg$;z&WdHcQ-F@oh^Rq)eQmt&@a+pidT*fNO zQE&%eV3?^8zpKCX@I!SD+S*mSS5C#SJYLA&oEfn?>Hf%}&p} zX8QN)%<3!-jav@%kXTtC7ux`NfTvq;Q9SP*T7_>#&b2(Q z%}@OBe&eT`If)IIO{aaIyYKK^?#T)16;$i%AbZn%TK%g2lS-kSQW~#ftEMr%;H5;N zT;54FS`zS7?kTWonOFYv^OagpbGc}cJQ*)*IHNpIZgh_bUl82Kw@$PNjcr^~toWW? zSXaeRMd_W2Op0+$aiZyg-o7RFF4958{$ERruM}MqI*ZHMF-;j63(HRHJs2|r*AHk7 zz8T!xVX1j#X_=z4c`mCLd_4C-vSU@5<_P}c=d zHN2b5YlrtoaO*BBZ;gMO>)5*1sjtgQd8L#qnr@RVeZ`OAzar8a|1Fu9+!g$u;Ub>V z%+1TG7|?v)l;L@x)2abcQExoni?tQWRg&vSOTz}-or;mnCBt(bwXj+S3*xpJkWhsT6{Hb;8+xD{xJQf7ajGP#Bx?`pICULvUle3D-qUh=kNfHhty^{*{5(q&dc%;y$<=J+uinWwm3b$Y<=@l<_+)R zzNaM12=7`ya)#R;?=LP}k)(>6*n)%dvuPx7PQVb z*5Fz;p{hUPE9oJ4#Ob1A7|%n6gixG`UQ;a1pO`nH$rCPj9dEnS?r;8hB%fs@l5r9C zhkf@#@`4BcFLgALm&oFGS z${<_up#$YB#b=^2}bt z{2Lw#O~WUcSLWt} zjB!ItY5m}qlXX3c=H@KPc5Zm5I>6l_pBW_cc_#WtU?PH4MwLmWYZ0p_D|R;SZMo9A z%zTW~$NhHTJ+~u{3mMZ|0$abe%rsTA55vohTJ<+o1=LOGZoAp>oTOG9!|ThLPV{V= zTGaFFviL&<-c{a)I-v(c!T-dkxLp4=-Yg2Z=JI^x3d+UnaZ z57)h`@7t6`tq`6U?+{%=xT>{<$)%qakC7s|v-dvFGzTN2i?XSpd(P^@os74RP$8;`|~)X9d5OFBL3n(pT5k+Nfa!Z`)C$ts2*iQuTHP;T~N(`o6S3qpfP_ zsr}5lB@cAn$WPR6t_dmFTI+30;yF7WaQAV^c8C!i!)7XjN-n3Qem$RlC$C2BkM0%r zw~rUhwtL2FVe&ZZS^LQZ!}zA8#=FpEmOadG+gy{O8OF?V=66i(;20QYXEs6&4owrV zp6q$-GthI@rlR2mrz#S3fAB_2COY+&f4AGnf$@WNj0)$fWi^v)P8WU3zL=R%zW~4H z@Uny6*Tz@tbekC8gx1bzo6eiOLOZhD=tSbK* z9(@Ex)vhXI(+2Y%yK&wzq4^Ot9x7QP_mFZW-n!`jbu3uc%IhNUepnRLNeol=;exlWZbvv6(P4TLeyeP>x*ZIy1To=2L zf+4Lz*%wPj)=$R@8RuJ-4Y!;4_#p8sm+9TQMy?6$$==(vxNR$mICpjpkq#yX)c&1! zuAr>Bo)_#f%-_+|N7h3m#`e?=De73VynKEQr*vLLbd5v_Bb}LB?HgQMZI7`B5xZJV zm5voIb@pm^-a@7vK0=;BCc1A5d>Fdc*_}J3Ew%=39%9Iqy>{cu7>J=oP&T)GrgAQ? z!Q*qt6u;?iX4yzqrG7<8WXhijc)q5#pYn-ju>KpC$|@3lbBXos=YGYhhW)*Dd38`j zU!^bilcGB~-R;H*!%0-Juz}Tb9UbFv)cuU> zcDHG^q1-*jq_TTONI`V|<3eHK-7sAG#M9}Cw^Y_wS6K%BhTGNxACvgIPVh+fb8s+m z#u48e7nG=zF2CRYBdjRB-pdfLQ$QodcjOm6AvfIVn~WnGsctGP%pcRZi~0idb=4}$ z94%WT@9SdYh}gx6dK+sM9<2&iwRD_)CDUCutC4C9)oh029mYF9^js@@&P|1mD!CJg0m4fyN_k zEE5cG0X&Gk{zPB~W)SWd>vR(L<6-hbh zDw`ivDr*RJxZu2Vl=oimldh|6PeYVaQdL%PBFC67tXQWX2(96a5Dyl+*%P*@JQq$K z!wB^xhN|v1OB7sHG%<})#YbeHrB`IJVjWCU9@H(iUXm#iG1i&Jw5_UpReietzIHL= zxzooWmynq7WOu39gfNx;s!B4l60y`-g|*cQinF@?&^*aF`CtBNURtNFk_}L;CZ@4> zgQRtdKFL(U?jSyH&yg?ZeIPlStJ)XHpS(DM8)qEm+{TDR-=JERFbCfrAR zvZ=84Q*nIuq2wP)5d}S)j_8dXjkwYItgoBfW~WKqOlmat%6P-{9#=B<3af3tbN$&> zW>nwBRAp>IRx^aAC7SQb7|k6-3LS;lvExKdj*ILWHf;iZ4-7nwkzSw!E;5Ot*JjcF3k5Gu=z>GnM!#$y�}yo(E*dfEb6s+ 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 WP2gC#v2aM;U7kF7Z-Rel9{+#0BT{Do literal 0 HcmV?d00001 diff --git a/Projects/snakegame/snakeeat.wav b/Projects/snakegame/snakeeat.wav new file mode 100644 index 0000000000000000000000000000000000000000..95dca3906ebda1100bcc46dd8d0b18f1dee4156a GIT binary patch literal 17730 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 wQVLn1Y-= HEIGHT+1 or headpos[1] >= WIDTH+1) + +# draw walls +def drawWalls(surface): + + # left and right walls + for y in range(HEIGHT+1): + surface.blit(wallblock,(0,y*snk.BLOCK_SIZE)) + surface.blit(wallblockdark,(5,y*snk.BLOCK_SIZE+5)) + surface.blit(wallblock,((WIDTH+1)*snk.BLOCK_SIZE,y*snk.BLOCK_SIZE)) + surface.blit(wallblockdark,((WIDTH+1)*snk.BLOCK_SIZE+5,y*snk.BLOCK_SIZE+5)) + + # upper and bottom walls + for x in range(WIDTH+2): + surface.blit(wallblock,(x*snk.BLOCK_SIZE,0)) + surface.blit(wallblockdark,(x*snk.BLOCK_SIZE+5,5)) + surface.blit(wallblock,(x*snk.BLOCK_SIZE,(HEIGHT+1)*snk.BLOCK_SIZE,)) + surface.blit(wallblockdark,(x*snk.BLOCK_SIZE+5,(HEIGHT+1)*snk.BLOCK_SIZE+5)) + +#================================================================================================# +# Main Game Part # +#================================================================================================# + +# initialize pygame, clock for game speed and screen to draw +pg.init() + +# initializing mixer, sounds, clock and screen +pg.mixer.init() +eatsound = pg.mixer.Sound("snakeeat.wav") +crashsound = pg.mixer.Sound("snakecrash.wav") +clock = pg.time.Clock() +screen = pg.display.set_mode(((WIDTH+2)*snk.BLOCK_SIZE,(HEIGHT+2)*snk.BLOCK_SIZE)) +pg.display.set_caption("snake") +font = pg.font.SysFont(pg.font.get_default_font(),40) +gameovertext = font.render("GAME OVER",1,WHITE) +starttext = font.render("PRESS ANY KEY TO START",1,WHITE) +screen.fill(BLACK) + +# we need a snake and something to eat +snake = snk.snake(screen,WIDTH/2,HEIGHT/2) +food = fd.food(screen,1,HEIGHT+1,1,WIDTH+1) + +# food should not appear where the snake is +while food.getPos() in snake.getPosList(): + food.__init__(screen,1,HEIGHT+1,1,WIDTH+1) + +# only queue quit and and keydown events +# pg.event.set_allowed([pg.QUIT,pg.KEYDOWN]) +pg.event.set_blocked([pg.MOUSEMOTION,pg.MOUSEBUTTONUP,pg.MOUSEBUTTONDOWN]) + +# will increase game speed every 10 times we eat +eaten = 0 + +# press any key to start!!! +drawWalls(screen) +screen.blit(starttext,((WIDTH-10)*snk.BLOCK_SIZE/2,HEIGHT*snk.BLOCK_SIZE/2)) +pg.display.flip() +waiting = True +while waiting: + event = pg.event.wait() + if event.type == pg.KEYDOWN: + waiting = False +screen.fill(BLACK) + +# main loop +running = True +while running: + + # check crash or move outside the limits + if not inLimits(snake) or snake.crashed: + running = False + crashsound.play() + else: + + # draw screen with snake and foods + food.draw() + snake.draw() + drawWalls(screen) + pg.display.flip() + + # check if snake eates + if food.getPos() == snake.getHeadPos(): + eatsound.play() + snake.grow() + # food should not appear where the snake is + food.__init__(screen,1,HEIGHT+1,1,WIDTH+1) + while food.getPos() in snake.getPosList(): + food.__init__(screen,1,HEIGHT+1,1,WIDTH+1) + eaten += 1 + # increase game speed + if eaten % SPEED_INC == 0: + SPEED += SPEED_TICK + + # game speed control + clock.tick(SPEED) + + # get the next event on queue + event = pg.event.poll() + if event.type == pg.QUIT: + sys.exit() + elif event.type == pg.KEYDOWN: + actmotdir = snake.getMotionDir() + if event.key == pg.K_ESCAPE: + sys.exit() + elif event.key == pg.K_UP and actmotdir != snk.DOWN: + snake.setMotionDir(snk.UP) + elif event.key == pg.K_DOWN and actmotdir != snk.UP: + snake.setMotionDir(snk.DOWN) + elif event.key == pg.K_RIGHT and actmotdir != snk.LEFT: + snake.setMotionDir(snk.RIGHT) + elif event.key == pg.K_LEFT and actmotdir != snk.RIGHT: + snake.setMotionDir(snk.LEFT) + + # remove the snake and make movement + snake.remove() + snake.move() + +# if crashed print "game over" and wait for esc key +clock.tick(LONG) +snake.draw() +drawWalls(screen) +snakeposlist = snake.getPosList() +blackblock = snake.backblock +for pos in snakeposlist[1:]: + screen.blit(blackblock,(pos[1]*snk.BLOCK_SIZE,pos[0]*snk.BLOCK_SIZE)) + pg.display.flip() + clock.tick(SHORT) + +while True: + screen.blit(gameovertext,((WIDTH-4)*snk.BLOCK_SIZE/2,HEIGHT*snk.BLOCK_SIZE/2)) + pg.display.flip() + event = pg.event.wait() + if event.type == pg.KEYDOWN: + if event.key == pg.K_ESCAPE: + sys.exit() diff --git a/Projects/tic-tac.py b/Projects/tic-tac.py index 0018d7a..6aaf189 100644 --- a/Projects/tic-tac.py +++ b/Projects/tic-tac.py @@ -1,5 +1,4 @@ import random - def draw_board(bo): print(' '+bo[0].rjust(4)+" | "+bo[1].rjust(4) + " | "+bo[2].rjust(4) ) print('------------------------') @@ -36,11 +35,7 @@ def check_winner(board,sbl): ( board[2] ==sbl and board[5]==sbl and board[8]==sbl ) or ( board[0] ==sbl and board[4]==sbl and board[7]==sbl ) or ( board[2] ==sbl and board[4]==sbl and board[6]==sbl )) - -def clear(): - print() - print() - print() + def check_blank(board): found = False @@ -50,29 +45,38 @@ def check_blank(board): return found #main program start from here -board = [' ']*9 -# user_symbol = input("Choose Your symbol (X|O) : ") -# comp_symbol = 'X' if user_symbol =='O' else 'O' -# print('Computer Symbol :', comp_symbol) -# print('User Symbol :', user_symbol) -user_symbol='X' -while True: - result = check_blank(board) - if result==True: - get_user_entry(board,user_symbol) - if(user_symbol=='O'): - print("Computer's Move") - draw_board(board) - win = check_winner(board,user_symbol) - if win==True: - if user_symbol=='O': - print("You Lost this match my dear") +if __name__ == '__main__': + board = [' ']*9 + + # comp_symbol = 'X' if user_symbol =='O' else 'O'1 + + # print('Computer Symbol :', comp_symbol) + # print('User Symbol :', user_symbol) + + user_symbol='X' + + while True: + while True: + result = check_blank(board) + if result==True: + get_user_entry(board,user_symbol) + if(user_symbol=='O'): + print("Computer's Move") + draw_board(board) + win = check_winner(board,user_symbol) + if win==True: + if user_symbol=='O': + print("You Lost this match my dear") + else: + print("You Won this Match my dearS") + board = [' ']*9 + break else: - print("You Won this Match my dearS") - board = [' ']*9 + print("No position left Blank....Try again") + break + user_symbol = 'X' if user_symbol =='O' else 'O' + choice = input("\n\nDo you wanna Play more(Yes/No) :").upper() + if choice=='N': break - else: - print("No position left Blank....Try again") - break - user_symbol = 'X' if user_symbol =='O' else 'O' - \ No newline at end of file + else: + board =[' ']*9 diff --git a/ZipCracker.py b/ZipCracker.py new file mode 100644 index 0000000..7084323 --- /dev/null +++ b/ZipCracker.py @@ -0,0 +1,166 @@ +import zipfile, itertools, sys + +"""Character set is created.""" +charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()-_=+[{]}\|;:'\"/?.>,<" +minRep = 1 +maxRep = 5 + +"""It generates the passwords.""" +def genPassword(zfile): + back = '.' + zfile +'.data' + for x in xrange(minRep, maxRep + 1): + f = open(back,'w') + f.write(str(x)) + f.close() + for l in itertools.product(charset,repeat = x): + yield ''.join(l) + +"""extract all the files from the zip""" +def extract(zfile,password): + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + zf.read(files[0],pwd = password) + zf.close() + return True + except KeyboardInterrupt: + exit(0) + except: + return False + +"""Function for bruteforce attack.""" +def bruteforce(zfile): + back = '.' + zfile +'.data' + password = '' + try: + f = open(back,'r') + data = f.readline().strip() + if 'pwd' == data[:3]: + password = data[4:] + return password + else: + global minRep + minRep = int(data) + f.close() + except: + pass + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + data = zf.read(files[0],pwd = password) + zf.close() + flag = True + except KeyboardInterrupt: + exit(0) + except: + flag = False + if not flag: + for i in genPassword(zfile): + try: + flag = extract(zfile, i) + if flag: + password = i + break + except KeyboardInterrupt: + exit(0) + if not flag: + print 'Password Not Found!!!' + exit(0) + f = open(back,'w') + f.write('pwd:' + password) + f.close() + return password + +"""Function for dictionary attack.""" +def dictionary(zfile, dic): + back = '.' + zfile +'.data' + password = '' + try: + f = open(back,'r') + data = f.readline().strip() + if 'pwd' == data[:3]: + password = data[4:] + return password + else: + start = int(data) + f.close() + except: + start = 1 + dictionaryFile = open(dic,'r') + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + data = zf.read(files[0],pwd = password) + zf.close() + flag = True + except KeyboardInterrupt: + exit(0) + except: + flag = False + if not flag: + dlist = dictionaryFile.readlines() + for i in xrange(start,len(dlist)): + try: + flag = extract(zfile, dlist[i]) + if flag: + password = dlist[i] + break + except KeyboardInterrupt: + exit(0) + if not flag: + print 'Password Not Found!!!' + exit(0) + f = open(back,'w') + f.write('pwd:' + password) + f.close() + return password + + +if __name__ == '__main__': + arg = sys.argv[1:] + if arg[0] == '-h' or arg[0] == '--h' or arg[0] == '-help': + print "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" + print "option:" + print "-b\t\t\t:Bruteforce attack." + print "-ab -file=charset\t:Advance Bruteforce attack from the given charset." + print "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" + print "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." + exit(0) + elif arg[1] == '-b': + print 'Processing...' + if len(arg) > 2: + length = arg[2].split('=')[1].split(',') + minRep = int(length[0][1:]) + maxRep = int(length[1][:-1]) + password = bruteforce(arg[0]) + elif arg[1] == '-ab': + print 'Processing...' + if len(arg) > 3: + length = arg[3].split('=')[1].split(',') + minRep = int(length[0][1:]) + maxRep = int(length[1][:-1]) + try: + charset = arg[2].split('=')[1] + except: + print "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" + print "option:" + print "-b\t\t\t:Bruteforce attack." + print "-ab -file=charset\t:Advance Bruteforce attack from the given charset." + print "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" + print "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." + exit(0) + password = bruteforce(arg[0]) + elif arg[1] == '-d': + print 'Processing...' + fl = arg[2].split('=')[1] + password = dictionary(arg[0],fl) + else: + print "Invalid input" + print "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" + print "option:" + print "-b\t\t\t:Bruteforce attack." + print "-ab -file=charset\t:Advance Bruteforce attack from the given charset." + print "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" + print "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." + exit(0) +print 'Password is "%s" without quotes.' %password \ No newline at end of file diff --git a/demo.txt b/demo.txt index e69de29..b36a7c8 100644 --- a/demo.txt +++ b/demo.txt @@ -0,0 +1,2 @@ +This is me rakesh +and this is the second line of code diff --git a/newzip.py b/newzip.py new file mode 100644 index 0000000..107923d --- /dev/null +++ b/newzip.py @@ -0,0 +1,164 @@ +import zipfile, itertools, sys + +"""Character set is created.""" +charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()-_=+[{]}\|;:'\"/?.>,<" +minRep = 1 +maxRep = 5 + +"""It generates the passwords.""" +def genPassword(zfile): + back = '.' + zfile +'.data' + f = open(back,'w') + f.write(str(x)) + f.close() + for l in itertools.product(charset,repeat = x): + yield ''.join(l) + +"""extract all the files from the zip""" +def extract(zfile,password): + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + zf.read(files[0],pwd = password) + zf.close() + return True + except KeyboardInterrupt: + exit(0) + except: + return False + +"""Function for bruteforce attack.""" +def bruteforce(zfile): + back = '.' + zfile +'.data' + password = '' + try: + f = open(back,'r') + data = f.readline().strip() + if 'pwd' == data[:3]: + password = data[4:] + return password + else: + global minRep + minRep = int(data) + f.close() + except: + pass + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + data = zf.read(files[0],pwd = password) + zf.close() + flag = True + except KeyboardInterrupt: + exit(0) + except: + flag = False + if not flag: + for i in genPassword(zfile): + try: + flag = extract(zfile, i) + if flag: + password = i + break + except KeyboardInterrupt: + exit(0) + if not flag: + print( 'Password Not Found!!!' ) + exit(0) + f = open(back,'w') + f.write('pwd:' + password) + f.close() + return password + +"""Function for dictionary attack.""" +def dictionary(zfile, dic): + back = '.' + zfile +'.data' + password = '' + try: + f = open(back,'r') + data = f.readline().strip() + if 'pwd' == data[:3]: + password = data[4:] + return password + else: + start = int(data) + f.close() + except: + start = 1 + dictionaryFile = open(dic,'r') + try: + zf = zipfile.ZipFile(zfile) + files = zf.infolist() + data = zf.read(files[0],pwd = password) + zf.close() + flag = True + except KeyboardInterrupt: + exit(0) + except: + flag = False + if not flag: + dlist = dictionaryFile.readlines() + try: + flag = extract(zfile, dlist[i]) + if flag: + password = dlist[i] + break + except KeyboardInterrupt: + exit(0) + if not flag: + print( 'Password Not Found!!!' ) + exit(0) + f = open(back,'w') + f.write('pwd:' + password) + f.close() + return password + + +if __name__ == '__main__': + arg = sys.argv[1:] + if arg[0] == '-h' or arg[0] == '--h' or arg[0] == '-help': + print( "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" ) + print( "option:" ) + print( "-b\t\t\t:Bruteforce attack." ) + print( "-ab -file=charset\t:Advance Bruteforce attack from the given charset." ) + print( "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" ) + print( "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." ) + exit(0) + elif arg[1] == '-b': + print( 'Processing...' ) + if len(arg) > 2: + length = arg[2].split('=')[1].split(',') + minRep = int(length[0][1:]) + maxRep = int(length[1][:-1]) + password = bruteforce(arg[0]) + elif arg[1] == '-ab': + print( 'Processing...' ) + if len(arg) > 3: + length = arg[3].split('=')[1].split(',') + minRep = int(length[0][1:]) + maxRep = int(length[1][:-1]) + try: + charset = arg[2].split('=')[1] + except: + print( "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" ) + print( "option:" ) + print( "-b\t\t\t:Bruteforce attack." ) + print( "-ab -file=charset\t:Advance Bruteforce attack from the given charset." ) + print( "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" ) + print( "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." ) + exit(0) + password = bruteforce(arg[0]) + elif arg[1] == '-d': + print( 'Processing...' ) + fl = arg[2].split('=')[1] + password = dictionary(arg[0],fl) + else: + print( "Invalid input" ) + print( "usage script.py filename [-b | -ab charset=charset | -m=[2,5] | -d file=dictionary.txt]" ) + print( "option:" ) + print( "-b\t\t\t:Bruteforce attack." ) + print( "-ab -file=charset\t:Advance Bruteforce attack from the given charset." ) + print( "-d file=dict.txt\t:Dictionary attack. Provide dictionary name in present working directory" ) + print( "-m=[min, max]\t\t:Minimum and Maximum length of passwords to be consider." ) + exit(0) +print( 'Password is "%s" without quotes.' %password ) diff --git a/python_converter.py b/python_converter.py new file mode 100644 index 0000000..4dafdaf --- /dev/null +++ b/python_converter.py @@ -0,0 +1,33 @@ +# purpose : Program to convert python 2.7 program in python 3.6 +# made by : rakesh kumar +# License : MIT + +""" function to convert major 2.7 function into 3.6 """ +def converter(): + file = open("ZipCracker.py",'r') + file1 = open("newzip.py",'w') + for line in file: + # print(line) + if 'print' in line: + line1 = line.replace('print','print(' ) + line2 = line1.replace('\n',' ') + newline = line2+ ' ) \n' + # print(newline) + file1.write(newline) + else: + if 'raw_input' in line: + line1 = line.replace('raw_input','input') + file1.write(line1) + else: + if 'xrange' in line: + line1 = line.replace('xrange','range') + else: + file1.write(line) + + file.close() + file1.close() + print("Conversion Complete....Check your file") + +""" call user defined function """ +if __name__ == '__main__': + converter() \ No newline at end of file diff --git a/unicode.py b/unicode.py index 46dec63..1e67537 100644 --- a/unicode.py +++ b/unicode.py @@ -1,4 +1,7 @@ +# हमारा हिंदी में लिखा पाइथन प्रोग्राम +# प्रोग्राम में आप कीवर्ड को अपनी भाषा में नहीं लिख सकते है + अ = 0 for क in range(1,20): अ += क -print(अ) \ No newline at end of file +print("पहले दस नम्बरों का सम है :",अ) \ No newline at end of file diff --git a/webscraper/nscPrice.py b/webscraper/nscPrice.py index 8f43e6f..131e490 100644 --- a/webscraper/nscPrice.py +++ b/webscraper/nscPrice.py @@ -1,32 +1,40 @@ import requests import time from win10toast import ToastNotifier -import webbrowser +import webbrowser,threading from bs4 import BeautifulSoup def current_price(url): - site = requests.get(url) - # toaster = ToastNotifier() - # toaster.show_toast("Hello World!!!", "Python is awesome and I am learning a lot!",icon_path=None, duration=160) - #print(site.text) - # while toaster.notification_active(): time.sleep(0.1) - soup = BeautifulSoup(site.text,"html.parser") - for link in soup.find_all("span", id ="Nse_Prc_tick"): - # #print(link) - name = link.getText() - #print('current Price :',name) - #toaster.show_toast("IDFC Bank!!!", "Current Price :"+str(name),icon_path=None, duration=30) - return name + try: + site = requests.get(url) + # toaster = ToastNotifier() + # toaster.show_toast("Hello World!!!", "Python is awesome and I am learning a lot!",icon_path=None, duration=160) + # print(site.text) + # while toaster.notification_active(): time.sleep(0.1) + soup = BeautifulSoup(site.text,"html.parser") + for link in soup.find_all("span", id ="Nse_Prc_tick"): + # #print(link) + name = link.getText() + #print('current Price :',name) + #toaster.show_toast("IDFC Bank!!!", "Current Price :"+str(name),icon_path=None, duration=30) + return name + except: + return 0.0 +def show_result(): + toaster = ToastNotifier() + while True: + idfc = current_price("http://www.moneycontrol.com/india/stockpricequote/banks-private-sector/idfcbank/IDF01") + apex = current_price("http://www.moneycontrol.com/india/stockpricequote/food-processing/apexfrozenfoods/AFF") + hind = current_price("http://www.moneycontrol.com/india/stockpricequote/metals-non-ferrous/hindustancopper/HC07") + ab = current_price("http://www.moneycontrol.com/india/stockpricequote/finance-investments/adityabirlacapital/ABC9") + cadila = current_price("http://www.moneycontrol.com/india/stockpricequote/pharmaceuticals/cadilahealthcare/CHC") + mep = current_price("http://www.moneycontrol.com/india/stockpricequote/infrastructure-general/mepinfrastructuredevelopers/MID") -while True: - toaster = ToastNotifier() - idfc = current_price("http://www.moneycontrol.com/india/stockpricequote/banks-private-sector/idfcbank/IDF01") - hind = current_price("http://www.moneycontrol.com/india/stockpricequote/metals-non-ferrous/hindustancopper/HC07") - ab = current_price("http://www.moneycontrol.com/india/stockpricequote/finance-investments/adityabirlacapital/ABC9") - cadila = current_price("http://www.moneycontrol.com/india/stockpricequote/pharmaceuticals/cadilahealthcare/CHC") - mep = current_price("http://www.moneycontrol.com/india/stockpricequote/infrastructure-general/mepinfrastructuredevelopers/MID") + rates ="IDFC Bank : " + str(idfc) + "\tHind Copper : " +str(hind) +"\nAB Capital : "+str(ab)+"\nApex :" + str(apex) + rates = rates +"\nCadila Healthcare : "+str(cadila) +"\nMEP infra :"+ str(mep) + toaster.show_toast("Price Alert!!!", rates,icon_path=None, duration=30) + time.sleep(30) - rates ="IDFC Bank : " + str(idfc) + "\tHind Copper : " +str(hind) +"\nAB Capital : "+str(ab) - rates = rates +"\nCadila Heathcare : "+str(cadila) +"\nMEP infra :"+ str(mep) - toaster.show_toast("Price Alert!!!", rates,icon_path=None, duration=30) - time.sleep(60) \ No newline at end of file +thread = threading.Thread(target=show_result) +thread.start() +print("Working in Background") \ No newline at end of file diff --git a/webscraper/youtubeDownloader.py b/webscraper/youtubeDownloader.py index 04636d1..9832a9a 100644 --- a/webscraper/youtubeDownloader.py +++ b/webscraper/youtubeDownloader.py @@ -4,4 +4,4 @@ import shutil ydl_opts = {} with youtube_dl.YoutubeDL(ydl_opts) as ydl: - ydl.download(['http://103.67.198.6/uploaded-videos/The.Raid.2.2014.1080p.BluRay.x264-YTS.AG.MP4']) \ No newline at end of file + ydl.download(['https://www.youtube.com/playlist?list=PL6gx4Cwl9DGAjkwJocj7vlc_mFU-4wXJq']) \ No newline at end of file