Jump to content

R0cc0

Active Members
  • Posts

    73
  • Joined

  • Last visited

Everything posted by R0cc0

  1. Ce face mai exact acest script ? - Pai simplu cripteaza sursa paginilor web HTML . Example : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="it"> <head> <title>Encrypt source - Example JavaScript downloaded @ r.rocco@rocketmail.com</title> <meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Language" content="it" /> <meta name="Robots" content="All" /> <meta name="Description" content="RSTforums.com - Romanian site on web publishing" /> <meta name="Keywords" content="The script allows, although somewhat cumbersome to encrypt the source code of a html page." /> <meta name="Owner" content="R0cc0 @ RST" /> <meta name="Author" content="R0cc0 @ RST" /> <meta name="Copyright" content="R0cc0 @ RST" /> <script type="text/javascript" language="JavaScript"> <!-- <!-- ////////////////////////////////////////////////////////////////// // Source Code Encrypter v1.0 // ////////////////////////////////////////////////////////////////// // // // This JavaScript can be freely used as long as this message // // stays here in the header of the script. Any modifications // // and bugs found (and fixed) are appreciated. // // Script submitted/featured on Dynamicdrive.com // // Visit http://www.rstforums.com for source code // // R0cc0, r.rocco@rocketmail.com // ////////////////////////////////////////////////////////////////// var i=0; var ie=(document.all)?1:0; var ns=(document.layers)?1:0; function initStyleElements() /* Styles for Buttons Init */ { var c = document.pad; if (ie) { //c.text.style.backgroundColor="#DDDDDD"; c.compileIt.style.backgroundColor="#C0C0A8"; c.compileIt.style.cursor="hand"; c.select.style.backgroundColor="#C0C0A8"; c.select.style.cursor="hand"; c.view.style.backgroundColor="#C0C0A8"; c.view.style.cursor="hand"; c.retur.style.backgroundColor="#C0C0A8"; c.retur.style.cursor="hand"; c.clear.style.backgroundColor="#C0C0A8"; c.clear.style.cursor="hand"; } else return; } /* Buttons Enlightment of "Compilation" panel */ function LightOn(what) { if (ie) what.style.backgroundColor = '#E0E0D0'; else return; } function FocusOn(what) { if (ie) what.style.backgroundColor = '#EBEBEB'; else return; } function LightOut(what) { if (ie) what.style.backgroundColor = '#C0C0A8'; else return; } function FocusOff(what) { if (ie) what.style.backgroundColor = '#DDDDDD'; else return; } /* Buttons Enlightment of "Compilation" panel */ function generate() /* Generation of "Compilation" */ { code = document.pad.text.value; if (code) { document.pad.text.value='Compiling...Please wait!'; setTimeout("compile()",1000); } else alert('First enter something to compile and then press CompileIt') } function compile() /* The "Compilation" */ { document.pad.text.value=''; compilation=escape(code); document.pad.text.value="<script>\n<!--\ndocument.write(unescape(\""+compilation+"\"));\n//-->\n<\/script>"; i++; if (i=1) alert("Page compiled 1 time!"); else alert("Page compiled "+i+" times!"); } function selectCode() /* Selecting "Compilation" for Copying */ { if(document.pad.text.value.length>0) { document.pad.text.focus(); document.pad.text.select(); } else alert('Nothing for be selected!') } function preview() /* Preview for the "Compilation" */ { if(document.pad.text.value.length>0) { pr=window.open("","Preview","scrollbars=1,menubar=1,status=1,width=700,height=320,left=50,top=110"); pr.document.write(document.pad.text.value); } else alert('Nothing for be previewed!') } function uncompile() /* Decompiling a "Compilation" */ { if (document.pad.text.value.length>0) { source=unescape(document.pad.text.value); document.pad.text.value=""+source+""; } else alert('You need compiled code to uncompile it!') } // --> //--> </script> </head> <body onload="initStyleElements()"> <br /><br /> <div align="center"> <form method=post name=pad align=center> <textarea rows=11 name=text cols=58 style="background-color:#EBEBEB;width:95%"></textarea><br> <input type=button value=Crypt name=compileIt onClick=generate() onMouseOver=LightOn(this) onMouseOut=LightOut(this)> <input type=button value=Select name=select onClick=selectCode() onMouseOver=LightOn(this) onMouseOut=LightOut(this)> <input type=button value=Preview name=view onClick=preview() onMouseOver=LightOn(this) onMouseOut=LightOut(this)> <input type=button value=Source name=retur onClick=uncompile() onMouseOver=LightOn(this) onMouseOut=LightOut(this)> <input type=reset value=Delete name=clear onMouseOver=LightOn(this) onMouseOut=LightOut(this)> </form> </div> <br /><br /><br /><br /><br /><br /> <div align="center"> <a href="https://rstforums.com/forum/forum.php"><img src="http://4.bp.blogspot.com/-WfjhcjIN-Vo/ULlmYBwinqI/AAAAAAAAACU/XTQHj659xBQ/s1600/Capture.gif" alt="JavaScript scaricato da HTML.it" border="0" width="50" height="50" /></a> </div> </body> </html> javascript : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html xmlns="http://www.w3.org/1999/xhtml" ><head> <style type="text/css"> body {font-family:arial; font-style:normal; font-size:13px} .author {font-family:arial; font-style:normal; font-size:115%; font-weight:bold; color:red} .url_author {font-family:arial; font-style:normal; font-size:115%; font-weight:bold; color:red} .category {font-family:arial; font-style:normal; font-size:115%; font-weight:bold; color:red} .vote {font-family:arial; font-style:normal; font-size:115%; font-weight:bold; color:red} .compatibility {font-family:arial; font-style:normal; font-size:115%; font-weight:bold; color:red} </style> <title>Encrypt source</title> </head> <body bgcolor="#E0E0E0"> <h1><strong><span class="titolo">Encrypt source</span></strong></h1> Author: <span class="autore">R0cc0</span><br /> Url site author: <span class="url_author">https://rstforums.com/forum/members/r0cc0/</span><br /> category: <span class="categoria">utility</span><br /> Vote @ RST: <span class="vote">0/0</span><br /> Browser compatibility: <span class="compatibility">Explorer, Firefox, Mozilla, Netscape</span> <p class="commento"> The script allows, although somewhat cumbersome to encrypt the source code of a html page. </p> </body></html> Si in format HTML : Example download JavaScript download Inspiratie Nu este nevoie sa puneti script-urile pe nici un FTP , este deajuns sa le deschideti in webrowser si sa introduceti in textbox sursa HTML si o va cripta . Orice imbunatatire este bine venita .
  2. R0cc0

    Digi mobil

    Daca ai varsta necesara si un serviciu stabil , mai bine faci rata la produs decat sa il iei la abonament ,nu are rost sa le platesti pe manadoua la supra pret .
  3. Sintaxe HTML5 Prezentarea elementelor noi API . Tag 'clasic' <p> bla bla bla bla ... </p> * Tag 'gol' <img src="image_R0cc0.jpg" alt="o poza cu R0cc0"> * Tag 'autoclose' <rect x="150" y="40" width="60" height="30" fill="black" stroke="black"/> Elementele HTML5 se pot divide in trei categorii in baza tipologiei de tag pe care le folosim la implementari . 1 : Elemente normale : sunt acelea care pot inchide continuturi sub forma de text , comenturi HTML , si alte element HTML . Exemple : Paragrafe : " <p> " Liste : " <ul> " Titluri : " <h1> " etc . Pe parcurs ce vom aprofunda vom om vedea tagul se inchidere si deschidere " <p> R0cc0 </p> ". 2 : Elemente goale : elementele goale sunt acelea care nu pot sa aiba nici un continut , pentru aceste elemente se foloseste un tag gol . Exemple : area, base, br, col, command, embed, hr, img, input, keygen, link, meta, param, source, track, wbr. Pentru elementele goale inchiderea tagului nu este obligatorie in XHTML . Deci putem definii un tag : " <img> " urmand regulile XHTML . Exemplu : <img src="image.png" alt="text" /> Sau cu vechiul HTML4 : <img src="image.png" alt="text"> 3 : Elemente provenite de la alte namespace-uri : pentru astea sunt cerute tagurile autoclose , este vorba de elemente adoptate din extern ca si SVG si MathML . MAJUSCULE si minuscule Una dintre diferente principale respectand regulile XHTML , se refera la folosirea MAJUSCULELOR si cea a minusculelor , pentru a definii un tag in XHTML este obligatoriu sa folosim minusculele , in HTML5 este voie sa scriem un tag folosind minusculele . <IMG src="image.png" alt="text"> Cazuri particulare : Exista anumite cazuri particulare pentru care un tag clasic poate limpsii din partea de deschidere sau de inchidere , asta se intampla cand browser-ul este in gradul de determinare limitele de operativitate a elementului , Cum ar fii : " head , body , si html " , care pot sa fie omise atata timp cat nu contin cun coment sau text ca instructie succesiva . Exemplu : <meta charset="utf-8"> <title>Page HTML5 valid</title> <p>Un paragraf poate sa nu aiba partea de inchidere <ol> **<li>si un element de lista </ol> Vedem cum ne arata exemplul , ca si tag-urile " p si li " pot fii scrise omitand partea de inchidere , doar daca elementul succesiv este inauntrul unui cerc de elemente , definit specific . In aceste optiuni pentru simplificare de viata , este insa gresit sa credem ca elementul " html " lipseste din ceea ce genereaza codul de mai sus , defapt el este implicit adaugat cand user-agent va face " runtime " . Pentru ceva mai detaliat puteti intra aici . Atribute Atributele HTML5 ne da o libertate mai mare fata de cele in XHTML , nu mai este obligatoriu inchiderea valorilor atributelor intre ghilimele . Cazurile pentru aceasta regula sunt 4 : Atributele goale : nu este necesar sa definim o valoare pentru atribut , este de ajus numele , valoare se introduce implicit din strin-ul gol . Exemplu : Urmand regulile XHTML: <input checked="checked" /> * In HTML5: <input checked> Atribute fara ghilimele : este prfect legal in HTML5 definire un atribut fara sa il inchidem valoarea intre ghilimele . Exemplu : <div class=test> Atribute cu apostrof " ' " : Valoare unui atribut poate fii inchisa intre apostrofuri . Exemplu : <div class='test'> Atribute cu ghilimele ( " ) : pentru a incheia si clarifica , este posibil sa folosim la sintaxele care prevad folosira ghilimelelor pentr a inchide valoarea unui atribut . Exemplu : <div class="test"> Simplificari Aici ne oprim un pic la simplificarile " style si script " . Sintaxele XHTML prevad specificarea de atrbute accesorii ca si " type " . <style type="text/css"> reguli CSS... </style>* <script type="text/javascript" src="script.js"> </script> In HTML5 putem sa scriem : <style> reguli CSS... </style>* <script src="script.js"> </script> Elemente concepute pentru un web modern La inceput erau tabele , trebuia sa construim structuri complexe , rupandule in intern cu o grila infinita " <tr> i <td> , acum multumita elementului " <div> " putem creea pagini HTML elegante , fara prea multe batai de cap . Exemplu : <html> <head> </head> **<body> ****<div id="header"> ******--- Titlu de cap --- ****</div> ****<div id="body"> *******<div id="meniu"> *******--- Voci de Meniu --- *******</div> *******<div id="main_content"> **********<div class="post"> **********--- Un Post --- **********</div> **********<div class="post"> **********--- Un alt Post --- **********</div> ******</div> ****</div> **</body> </html> In internul acestui constructor totul este foarte simplu de interpretat , este de ajus sa urmam fluxul de reintrate lasandu-ne condusi de valorile semantice atribuite la ID si Clasa . In anii trecuti modelul incepuse sa ne prezinte primele sale puncte slabe , in primul rand ne-am dat seama de nici o parte nu era o regula colectiva , pentru un svilupator ra " body " , iar pentru altul era " corp " , practic nici browser-ele nu mai pteam beneficia de aceasta divizie sematica , din vina acetei cauze care permitea milioanelor de site-uri care permiteau sa fie in structuri similare , dar diferite intre ele . In acest mod s-a creeat una dintre cele mai mari probleme ale HTML4 , incapacitatea de a descrie semnificatia informatiilor dintr-o pagin web intr-un format intrepretabil de alte software . Un exemplu ar fii asta . <span class="hrecipe"> ****<span class="fn">Ciorba de burta</span> ****<span class="ingredient">2 cubri de delicat</span> ****<span class="ingredient">1 Kg de burta</span> ****<span class="yield">2</span> ****<span class="instructions"> ********Lasati la fiert aproximativ 2 H pana la o temp de 95°C; ********mai adaugati niste telina; ********si mai lasatio la fiert inca 10 minute; ********puneti in castroane si serviti. ****</span> ****<span class="duration"> ********<span class="value-title" title="PT90M"></span> 120 min ****</span> </span> HTML5 a fost facut sa gestioneze si sa rezolve toate aceste probleme . Atribute globale Atributele globale sunt cele care se pot aplica la toate elementele HTML , care au fost mereu , bazate pe gandirea clasica " id " , diponibile din totdeauna asupra elementelor . HTML5 reformeaza aceasta definitie si o imbogateste cu noi membre de tag . Modificarea unei pagini contenteditable TinyMCE, CKEditor si WYMeditor sunt doar 3 dintr-o lista mare de librarii care ofera un instrument pentru editarea pagini web care trece de tipul clasic de text . Rezultatele sunt excelente , sunt aproape prosude desktop , cum ar fii Microsoft Word . HTML5 abordand aceasta problema a creat " rich-editing " document , reintroducand un set de specifice implementari in versiunea 5.5 a internetului explorer . Acest lucru a facut posibila creearea unui nou atribut global " contenteditable " , care daca este setat " true " asupra oricarui element , il face modificabil din browser . Practic ce inseamna modificare in browser : aceasta libertate este permisa doar dupa regulile HTML5 , iar asta difera de la browser la browser , un exemplu teoretic este : Cine cel care traduce un text via " <br> " , iar cel care creeaza un nou paragraf cu " <p> " , in paralele toate aste sunt disponibile intr-un set API , pentru a insista in zola modificabila cu , comenzi venite din extern , exemplu dintr-un tool-bar . Un buton care activeaza / dezactiveaza stilul BOLD , asta ar trebuii sa invove urmatoarea functie : document.execCommand('bold') Meniul contextual asociat unui element ( contextmenu ) Atributul globat " contextmenu " folosete la asocierea unui element cu meniul " contextmenu ", acesta forma de interactionare este foarte rar comuna in web dar foarte practica pe desktop unde , de exemplu , pe optiuni de sistem unde sunt actiuni ca si " copy , delete , rename . Exemplu : <img src="http://farm4.static.flickr.com/3623/3527155504_6a47fb4988_d.jpg" contextmenu="image_menu"> <menu type="context" id="image_menu"> ****<command label="Modifica il contrasto" onclick="contrastDialog();"> ****<command label="Negative" onclick="negative();"> </menu> Click-and cu , click dreapta pe imagine in browser ar trebuii sa arate un meniu , care contine 2 actiuni sau mai multe . Atributul " data-* " HTML5 predispune de posibilitate de a asocia cu fiecare element al unei pagini , un numar arbitrar de atribute ale caror nume pot fii definite in functie de nevoile personale , atat tip cat au sufitul " -data " . Exemplu : <img id="shadow" ****class="dog" ****data-dog-breed="German Shepherd” ****data-dog-age="5" ****data-dog-color="black" ****src="image_of_my_dog.jpg"> Spellcheck Majoritatea browser-elor astazi contin un motor de verificare a sintaxelor gramaticale . Cele HTML5 introduc un mecanism de abilitare sau dezabilitare a controlului sintaxelor pe portiuni de pagina modificabile de utilizator . Atribulul acesta se chiama " Spellcheck " si cand e impostat " true " , ordoneaza browser-ului de activare propriul corector al elementului curent si asuprea ramurilor acestuia . Alte atribute globale Sunt o multime de atribute globale specifice si nu le-am adus in discutie , cum ar fii " degradable si aria-*; " . Fac o lista cu toate atributele globale previste pentru acest tutorial . accesskey, class, contenteditable, contextmenu, dir, draggable hidden, id, lang, spellcheck, style, tabindex, title Tabel cu suportul pe browser : Un nou content model Cam asa se pot coda noile elemente pe care le-am prezentat mai sus : <!doctype html> <html lang="IT"> <head> </head> **<body> ****<header> ****--- Titlu de cap --- ****</header> ****<nav> ****--- Voci de Meniu --- ****</nav> ****<article> ****--- Un Post --- ****</article> ****<article> ****--- Un alt Post --- ****</article> </body> </html> Dupa cum puteti vedea , tagurile introduse au un nume apropriat relevantei sale , asta rezolva in mod elegant problema utilizarii atributului class cu valoare semantica , si problema recunoasterii unei singure eree a documentului din parea browser-ului . Introducerea lui " article , nav , header si alte tag-uri pe care le vom explica , impune si noutati in modul in care " user – agent " trebuie sa se comporte la interpretarea acelor elemente . Tot continutul intr-unul Exemplu HTML4 : <html> <body> **<h1>Jurnale de calatorie:</h1> **<h2>In calatorie prin lume pentru a descoperii noi culturi:</h2> **<h3>Inconjurul Britaniei in scop turistic</h3> **<p>Dove cel mai bun sapun de corp</p> **<h3>Calatorie in Turcia</h3> **<p>Dove cel mai bun gel de dus.</p> **<h3>Craiova oras natal</h3> **<p>Dove pentru barbati cel mai bun sampon</p> **<p>Toate calatoriile au fost interesant , chiar si hotelurile au avut preturi mici.</p> </body> </html> Rezultatul acestui cod , este 1 structurat : Sa dividem acum astea , dar vom fii nevoiti sa schimbat " h3 " in " h4 " in modul in care vom face spatiu divizarilor . <html> <body> **<h1>Jurnale de calatorie:</h1> **<h2>In calatorie prin lume pentru a descoperii noi culturi:</h2> **<h3>Europa</h3> **<h4>Inconjurul Britaniei in scop turistic</h4> **<p>Dove cel mai bun sapun de corp</p> **<h4>Calatorie in Turcia</h4> **<p>Dove pentru barbati cel mai bun sampon</p> **<h3>Africa</h3> **<h4>Dove cel mai bun gel de dus</h4> **<p>Craiova oras natal</p> **<p>Toate calatoriile au fost interesant , chiar si hotelurile au avut preturi mici</p> </body> </html> Asta se intampla deoarece ierarhia rubricii este bsoluta in ceea ce priveste intregul document si fiecare tag <h*> este obliigat sa respecte . In mare parte acest comportament este greu deoarece este foarte comun si interactioneaza cu articolele si comenturile , deci vom vrea sa avem statuturi independente . In HTML5 asta este posibil definind o noua tipologie de content model , numit " sectioning content " , de care apartin elemente ca si articole si sectii . Exemplu : <!doctype html> <html> <head> **<title>Jurnale de calatorie</title> </head> <body> **<header> ****<hgroup> ******<h1>Jurnale de calatorie:</h1> ******<h2>In calatorie prin lume pentru a descoperii noi culturi:</h2> ****</hgroup> **</header> **<section> ****<h1>Europa</h1> ******<article> ********<h1>Inconjurul Britaniei in scop turistic</h1> ********<p>Dove cel mai bun sapun de corp</p> ******</article> ******<article> ********<h1>Craiova oras natal</h1> ********<p>Dove cel mai bun sapun de corp</p> ******</article> **</section> **<section> ****<h1>Africa</h1> ****<article> ******<h1>Calatorie in turcia</h1> ******<p>Dove dove dove</p> ****</article> **</section> **<p>Toate calatoriile au fost interesant , chiar si hotelurile au avut preturi mici</p> </body> </html> Mult mai bine , acum singurii componenti din acest document sunt atomici si pot sa fie mutati in internul pagini fara sa trebuiasca sa schimbam structura lor interna . Scuzati greselile gramaticale . The end , va urma ...
  4. Download -- MoAJn2gtbDwa0m0mO4QtMIhsLibVKlc9OlAaKmH9LiuJOl0KjJ6JnJhOOJTa+yAknx6F0IcsLiuJLDuz0Ik3 Download -- Conturi torente 2.txt download - 2shared Leam impartit in jumatate , cele fara cryptare si cele cu , nu vrea sau le dau pe toate asa , poate unii chiar au nevoie si m-am gandit ca unii le iau doar pentru colectii . Bucurati-va , nu sunt cine stie ce multe , dar sunt bune banuiesc . @Matt -- Ok nu le numi .
  5. Pftim , avand in vedere ca nu este FUD , l-am scanat pe VirusTotal 10 din 46 .
  6. Pythom https://rstforums.com/forum/65916-tutorial-python-3-2-a.rst https://rstforums.com/forum/65925-tutorial-python-3-2-partea-2-a.rst https://rstforums.com/forum/65942-tutorial-python-3-2-partea-3-a.rst https://rstforums.com/forum/65999-tutorial-python-3-2-partea-4-a.rst Foarte bun limbaj si usor de inteles , mai ales pentru cineva care vrea sa se acomodeze cu functii , module etc , ai posibilitatea vizuala de a vedea unde gresesti , ce gresesti ... si vine de la sine sa stii ceea ce trebuie sa repari .
  7. Off -- Face RST un gest si ii scoate din aceasta criza buna , dar mai intai sa se roage un pic =) Off2 -- Dai dracu ca asa le trebuie . On -- Foarte bine fac, poate intr-o zii vom stii si noi cu adevarat cine a vandut Romania si sa il pedepsim , asa cum pedepsesc ei oameni nevinovati / vinovati , pentru cei vinovati , suporta prea mult cand sunt pedepsiti in Romania .
  8. http://www.youtube.com/watch?v=jAcWMU3PE5s
  9. 1.Ce credeti despre atacurile la adresa romaniei ? Cei ce l-au creat sunt priceputi nu ai lasat urme , si cu intamplari trecute plus acest virus , trebuie gasit un tap ispasitor . 2.Nu vi se pare ciudat ca institutiile romaniei au acces la 'reteaua mare' in loc sa aiba doar pe retea locala cu reguli privind ip-urile la care sa se conecteze ? Nu este nimic ciudat , atata timp cat F.B.I ; C.I.A , au lucrat cu " noi " la cazul intamplarilor de pe acest forum , probabil ca si noi am avut de castigat , intrand in ' reteaua mare " . 4.O alta chestie care nu o inteleg, atacurile asupra celorlalte tari au avut un scop(au furat ceva important) dar in cazul romaniei oare ce au vrut sa fure, la noi cercetare nu se face, nu avem area 51, deci ce credeti ca au vrut sa fure? "Avand in vedere intamplarile din zona politica (2012-2013) si faptul ca majoritatea oamenilor sunt lipsiti de scrupule, nu exclud ideea obtinerii unor informatii ce vor fi folosite (acum sau mai tarziu) sub forma de santaj, dar nici ideea unui atac inventat. " ( aici l-am citat pe @Sweby si ii dau dreptate ) .
  10. Dive into HTML5 by Mark Pilgrim foarte usor de invatat , explcatii bune si usoare . PHP and MySQL Web Development by Luke Welling and Laura Thomson , foarte usor de invatat , explcatii bune si usoare . C++ Language Tutorial by Juan Soulié si C++ Essentials by Sharam Hekmat
  11. Qooxdoo, un cadru universal JavaScript Qooxdoo, a universal JavaScript framework Acest FrameWork complet este pentru a svilupa si pagini web traditionale , dar si aplicatii grafice in stil desktop . Structura FrameWork-ului FrameWork-ul este organizat in asa mod in cat sa fuctioneze selectiv pe fieare din cele 4 ambiete aplicative : Pagini Web , aplicatii cu interfata desktop , aplicatii mobile si cele server . Este posibil sa descarcati de pe pagina oficiala pachetul adecvat cerintelor voastre pentru aplicatii . Cele 4 pachete FrameWork previste sunt : Impreuna cu , codum lasat cu dubla licenta LGPL si EPL , sunt sunt disponibile un intreg de tool-uri de suport pentru svilup ca si un ambient de “ Unut test “ , un ambient de simulare al userului , utilitare pentru compilare si compreie al codului si pentru “ deployment “ - ul aplicatiilor . Creearea paginilor Web cu Qooxdoo Pachetul “ qx.Website “ este gandit pentru a semplifica creearea de pagini Wen , furnizand fnctionamentul pentru manipulara DOM-uli si un suport cross-browser , pentru gestiunea “ event “. Utilizarea lui necesita un refer JS ca in urmatorul exemplu : <script type="text/javascript" src="js/q-2.0.2.min.js"></script> Includerea librariilor la dispozitia obiectuli globan “ q “ care ne permite accesul la elementele DOM din pagina curenta . Exemplu : q("#divMessage") .setHtml("Hello World!") .setStyle("color", "red"); Idividualizeaza un element cu id egal al “ divMessage “ , su tring-ul “ Hello World “ , ca si continutul sau caruia ii da culoarea rosie . Intern Qooxdoo , foloseste acelasi selector “ engine “ de la jQuery deci sintactic vorbint este destul de comun si nu trebuie sa ridice probleme prea mari . Ca in jQuery , si Qooxdo are event-ul “ ready “ pentru a portnii codul , doar cand documentuul a fost incarcat din librarie . q.ready(function() { ****//inizialization }); Functionalitatile qx.Website , sunt subdivize in moduli care ofera suport pentru diverse tipuri de activitati , de la crearea de efecte anime , pana la accesul de informatii din browser , de la gestionarea de template , pana la schimbul de date cu serverul ce gestioneaza cookie-uri . Un modul accesibil ca si " namespace " dependent de obiect global , ca si exemplu petru a pornii in functia de comunicare cu serverul , face referire la " q.io " , insa necesitam sa intram in caracteristicele browser , o sa facem referire la " q.env ". q.io gestirea comunicatiilor cu server-ul Pentru a face acest lucru mai clar , o sa dau un exemplu : q("#divEnvData") ****.setHtml("Engine name: " + q.env.get("engine.name") + "<br>" + *************"Engine version: " +* q.env.get("engine.version") + "<br>" + *************"Browser name: " + q.env.get("browser.name") + "<br>" + *************"Browser version: " + q.env.get("browser.version") + "<br>" + *************"Device type: " + q.env.get("device.type") + "<br>" + *************"Device name: " + q.env.get("device.name") + "<br>"); Urmatorul exemplu va arata utilizarea metodei " xhr() " a modulului " q.io " pentru a trimite un request HTTP la server . q.io.xhr('data.json') ****.on("loadend", function(data) {alert(data.responseText)}) ****.send(); }); Modulul "q.io " furnizeaza si metode pentru efectuuarea request – urilor cross-domain , print JSONP via script . q.template, template engine of qooxdoo Ca in mare parte din recentele librari si FrameWork JavaScript , si Qooxdoo suporta template-uri pentru render dinamic de string-uri . Mecanismult de templating , este implementat in modulul q.template si foloseste " mustache.js " ca si mtor intern . Exemplu : var template = "My name is {{Stefan}} {{R0cc0}}!"; var view = {name: "Stefan", surname: "R0cc0"}; * q("#divTemplateMessage") ****.setHtml(q.template.render(template, view)); In plus suporta posibilitatea de svilupare plugine accesibile in internul FrameWork-ului cu acelasi mecanism de module . ( asta o sa o explic alta data ) . Suport OOP In timp ce suportul de svilup al pachetului " qx.Website " este aproapte acelasi ca si librariile JavaScritp , pentru realizarea de aplicatii cu interfata de tip desktop sau mobil . Abordarea Qooxdoo este oarecum diferita , utilizarea pachetelor " qx.Desktop si qx.Mobile " propun folosirea exclusiva a JS , degradand mult lucrul HTML si CSS , care limiteaza reprezentarea unei aplicatii intre JavaScript si Browser . Acesta este motivul principal pentru care in Qooxdoo programarea orietat pe obiecte are un rol asa important , incat ofera un suport foarte avansat mult apropiat a limbajelor de programare mai evoluate . In Qooxdoo putem definii o clasa prin metoda " define() " al modulului Class . Exemplu : qx.Class.define("myApp.circle", { ****members: ****{ ********radius: VALUE, ********circumference : function() {...}, ********area: function() {...} ****} }); Codul defineste o clasa indicand ca si prim argument numele si ca al doilea argument definitia adevarata proprie . In acest caz am definit clasa " myApp.cirle "cu un membru care reprezinta raza si doua metode care calculeaza circumferinta si aria . Exemplu : var circle = new myApp.circle; circle.radius = 3; alert("The circumference of a circle of radius 3 and " + circle.circumference ()); Posibilitatile definirii unei clase sunt diverse . Este posibil de exemplu sa derivam o clasa de o alta . Exemplu : qx.Class.define("myApp.collorCircle", { ****extend: myApp.circle, ****members: { ********radius: VALUE, ********circonference: function() {...}, ********area: function() {...} ****} }); Definirea unui constructor si a unui destructor qx.Class.define("myApp.collorCircle", { ****construct: function() {...}, ****destruct: function() {...} ****... }); Invocarea constructorului din clasa de baza : qx.Class.define("myApp.collorCircle", { ****construct: function() { ********************this.base(arguments); ********************... ****************} ****... }); Crearea proprietatii impostand constrangerile asupra valorilor pe are le poate asuma . qx.Class.define("myApp.collorCircle", { ****properties: ****{ ********radius: {init:0, check: "Integer"} ****} ****... }) Definitia razei ca si proprietate generaza automat doua metode c care putem sa deschidem " getRadius() " si " setRadius " , impostand valoarea initiala la 0 si numarul de date la un numar intreg . Puteti sa cautati aici clase statice si abstrace , singleton , interfete si mixin pentru creeare de aplicatii cu o arhitectura structurata .
  12. Exceptii de manipulare (Exception Handling) Cel mai rau moment pentru cineva care programeaza este acela cand se blocheaza programul din cauza unei erori . Sunt 2 tipuri de erori : Erori sintactice : In acest caz eroarea este de la o comanda sau de la o functie . Erori runtime ( de rulare ) : In acest caz numele sunt corecte , dar este o eroare a valorii asumate unei variabile . Exemple : Impartirea la 0 . Citirea fisierelor inexistente . Cand intampinam o eroare , programul se opreste si ne arata un mesaj in care este specificata eroare . Asta provoaca o brusca intrerupere a programului si a controlului asupra acestuia , deci nu este posibil ca programul sa mai ruleze . Voi da un exemplu de eroare RunTime : >>> a, b = 5, 0 >>> print a / b traceback (most recent call last): File “<pyshell#5>”, line 1, in ? print a / b ZeroDivisionError: integer division or modulo by zero Este posibil sa controlam anumite erori fara ca programul sa fie terminat , pentru a face asta , se foloseste un constructor care ne perite de a releva executii si a trece la controlul de flux si a trece la un alt bloc de instructii . Exemplu : try: <Grupul de instructii sub test> except: <Grup de instructii care vor fii puse in aplicare in caz de eroare> else: # optional <grup de instructii2> finally: # optinal, in loc de except <grup de instructii 3> Toate instructiile incluse in bloc “ try “ sunt sub control pe durata executarii programului . Daca “try “ este gol este ok , blocul execept va fii ignorat . In caz contrar , va aparea o exceptie , care va sarii la blocul de instructiuni care urmeaza cuvantul “ except “ . Daca introducem orice operatie cu riscul de exceptii in blocul “ try “ vom fii in gradul de a reactiona la fiecare eroare “ runtime “ fara a intrerupe programul . Exemplu : >>> a, b = 5, 0 >>> try: … print a / b … except: … print ‘Nu ai studiat matematica ! =) !’ Nu ai studiat matematica ! =) ! Este posibil chiar gestionare tipuri diverse de exceptii in acelasi timp , si urmand blocuri de instructii diverse in functie de tipul erori . Pentru asta este necesar urmarire “ except “ si numele claseri de eroare . Exemplu : >>> a, b = 5, 0 >>> try: … print a / b … except ZeroDivisionError: … print ‘nu ai studiat matematica, dar cu python esti ok !’ nu ai studiat matematica, dar cu python esti ok ! In cazul in care exista o excep?ie prin divizarea la 0 ar avea loc de asemenea un bloc de program, chiar si in blocul try. In cazul in care doresti un alt set de instructiuni , dar doar in cazut in care nu are loc nici o exceptie poti folosii “ else “ dupa are pune blocul de instructii dorite . Clase in Python Un exemplu de definire a unei clase in Python : class <nume clasa> [(<clasa R0cc0>,...)]: <lista cu datele membre cu , care vom incepe> <lista metode> Datele membru se exprima ca si normale variabile de Python . Daca trebuie sa initiazizati date membru , faceti o simpla cesiune sau puteti defini pe moment uilitatea exacta cum se face la o variabila normala . Pentru metode este de ajunt sa folositi aceleasi lucruri de sintaxa cu anumite exeptii : Orice metoda trebuie sa aiba ca si prim parametru obiectul in sine , practic de fiecare data cand vine invocat un obiect , Python rezolva primul parametru referirea la acel obiect , asta se numeste “ self “ . Exemplu : class persoana: nume = ” prenume = ” adresa = ” telefon = ” statut_civil = ” def inlocieste_adresa(self,s): self.adresa = s def inlocuieste_telefon(self,s): self.telefon = s def inlocuieste_statut_civil(self,s): self.status_civil = s def print(self): print self.nume,self.prenume,self.adresa, self.statu_civil class student (persoana): # ecco ereditarea’ ! scoala = ” classe = 0 def inlocuieste_scoala(self,s): self.scoala = s def trecut(self): if self.clasa == 5: print ‘scoala terminata’ else: self.clasa = self.clasa + 1 Daca acum vrem sa initiem un obiect , este suficient sa invocam numele clasei , ca si o functie . Daca vrem sa deschidem datele membru si metodele , este suficient sa folosim “ . “ ( punct ) . p1 = persona() # parantezele sunt obligatorii p1.nume = ‘stefan’ # adaugare directa a datelor membru p1.prenume = ‘R0cc0’ p1.inlocuieste_adresa(‘str. Rst.com nr.14?) # invocare metoda p1.print() # rezultat : stefan R0cc0 Str. Rst.com nr.14 “ P1 “ este un obiect al clasei de la persoana care are acele valori . Ati notat cum am adaugat date membru si valori direct sau pe parcurs la metode . Am utilizat metoda “ inlocuieste_adresa “ trecand un singur paramentru ( metoda ne cere 2 ) , dar asta a fost posibil deoarece Python a asociat paramentrul “ self “ cu obiectul “ p1 “ . s1 = student() s1.nume = ‘stefan’ s1.prenume = ‘R0cc0’ s1.inlocuieste_adresa(‘Str. Rstforum nr.14?) s1.Inlocuieste_scoala(‘liceu’) s1.print() # rezultat : stefan R0cc0 Str. Rst.com nr.14 Rezultatul metodei “ print “ nu ne permite sa vedem scoala si clasa in care este “ stefan R0cc0 “ . Asta se va intampla daca invocam metoda clasei “ persoana “ (“liceu”) la care nu se cunoaste valoarea datelor membru “ student “ clasa “ fiu “. Pentru a rezolva asta , ne vine in ajutor polimorfismul , practic este necesar sa redefinim metoda “ print “ contruind o metoda specifica pentru student . class student (persoana): scoala = ” clasa = 0 def inlocuieste_scola(self,s): self.scoala = s def trecut(self): if self.clasa == 5: print ‘scoala terminata’ else: self.clasa = self.clasa + 1 def print(self): print self.nume,self.prenume,self.adresa, self.statut_civil print ‘scoala: ‘+self.scoala+’ clasa ‘ +str(self.clasa) Metoda print este polimorfica , pare o metoda urata , dar asta inseamna ca ia forma diersa in baza tipului de obiect aspupra caruia vine aplicata . Aplicatia imediata asuprea unei clase ,provoaca o creatie de obiect . Mai mereu este necesar sa incepemm datele memebru ale obiectului in momentul creari . In exemplul nostru este util sa incepem cu persoana , numele si prenumele , defapt numele si prenumele sunt date la nastere si nu se pot schimba deloc . Pentru a face asta , teoria programarii orientata spre obiecte , prevede utilizarea unui constructor . In Python , este ceva asemanator : “ __init__() ”. Cand in internul unei clase vine declarat aceasta functie cu acest nume , atunci vine invocat automat la creeare obiectului . Exemplu : class persoana: adresa = ” telefon = ” statut_civil = ” def __init__(self,n,c): self.nume = n self.prenume = c def inlocuieste_adresa(self,s): self.adresa = s def inlocuieste_telefon(self,s): self.telefon = s def inlocieste_statut_civil(self,s): self.statut_civil = s def print(self): print self.nume,self.prenume,self.adresa, self.statut_civil Iar acum dupa invocare : p1 = persoana(‘stefan’,'R0cc0’) p1.print() # rezultat : stefan R0cc0 Notati ca am eliminat string-ul gol de la cele 2 variabile ( nume / prenume ) in clasa . Ele practic sunt inutile petru ca variabilele sunt create in internul functiei “ __int__ “ . Pana acum mai mult am vorbit , dar nu am aplicat acest principiu , practic prima operatie facut asupra obiectului “ p1 “ a fost aceea de a incepe cu datele membru ( nume si prenume ) direct . Python , asuma toate datele membru publice , deci pentru a realica cu adevarat incapsularea , trebuie antepus la nume variabile cu , caracterele “ __ “( 2 underline ) . Faand asa , nici unu nu poate modifica datele fara a utiliza aceasta functie . Exemplu : class persoana: __adresa = ” __telefon = ” __statut_civil = ” def __init__(self,n,c): self.__nume = n self.__prenume = c def inlocieste_adresa(self,s): self.__adresa = s def inlocuieste_telefon(self,s): self.__telefon = s def inlocuieste_statut_civil(self,s): self.__statut_civil = s def print(self): print self.__nume,self.__prenume,self.__adresa, self.__statut_civil Daca incercam sa adaugam direct “ __nume ” si ” __prenume “ comanda va venii ignorata. p1.__nume = ‘proba’ p1.print() # rezultatul ramane: stefan R0cc0 Str. Rst.com nr.14 Exista un alt concept al programarii orientata pe obiecte , el consta in posibilitatea de efectuare a polimorfului si a operatorilor , chiar si a metodelor . Exemplu : class num_comp: partea_reala = 0 partea_imaginara = 0 def suma(self,num): # num este un obiect in clasa num_comp self.partea_reala = self.partea_reala + num.partea_reala self.partea_imaginara = self.partea_imaginara + num.partea_imaginara def print(self): print str(self.partea_reala) + ‘+’ +str(self.partea_imaginara) + ‘i’ Un numar complex compus din doua valori : partea reala si cea imaginara , este o metoda care nu se asuma . Exemplu : n1 = num_comp() n1.partea_reala = 1 n1.partea_imaginara = 1 n2 = num_comp() n2.partea_reala = 2 n2.partea_imaginara = 3 n1.suma(n2) n1.print() # rezultat 3+4i Sintaxa din pacate este articulata . Ar fii frumos sa putem scrie ( n1 + n2 ) exact ca in matematica . Pentru a putea face asta , este necesar sa punem operatorul “ + “ ( ne aducem aminte ce sunt aia operatori ? ) . Exemplu : class num_comp: partea_reala = 0 partea_imaginara = 0 def __add__(self,num): ris = num_comp() ris.partea_reala = self.partea_reala+ num.partea_reala ris.partea_imaginara = self.partea_imaginara + num.partea_imaginara return ris def print(self): print str(self.partea_reala) + ‘+’ +str(self.partea_imaginara) + ‘i’ Am declarat o functie speciala numita “ __add__ “ , in grad de a efectua “ overloading “ ( substiturirea ) operatorului ADD(+) . Ea creeaza un nou obiect si aduna variabilele singure . Exemplu : n1 = num_comp() n1.partea_reala = 1 n1.partea_imaginara = 1 n2 = num_comp() n2.partea_realea = 2 n2.partea_imaginara = 3 r = n1 + n2 # ca si in matematica ! r.print() # rezultat 3+4i Trecand ptin “ overloading “ operatorii pot crea clase mult sofisticte si utilizabile cu o sintaxa eleganta . Uitasem , aici gasiti module ( toate ) . Cam asta am avut de spus despre Python , un limbaj frumos si usor de inteles , Scuzati eventualele greseli gramaticale , Sper ca v-a placut .
  13. Template metoda pattern ( sablon ) in PHP Un template metoda pattern ( sablon ) este un model de proiectare (Behavioral Design Pattern) , difuzat in Object Oriented Programming , care ne lasa sa stabilim structura unui algoritm de clasa , inteles ca si procedura pentru solutionarea problemelor recurente , facand ca , clasele secundare ( derivate sau subclase ) sa poate efectua arbitrar partiale implementari si personalizari pentru redefinire anumitor comportamente , totul fara a necesita rescrierea codului sursa . Fnctionarea " Template methon Pattern In cazul specific al limbajului PHP , va fii in internul Template methon Pattern o clasa abstacta , adica o clasa svilupata partial in care metodele pot fii implementate prin clasele secundare , carora li se vor asocia definirea metodei prin care a fost corelat un algoritm , si metodele implicate de algoritm in sine . In programarea care se refera la biecte , frecvent trebuie sa gestionam diverse sub-clase care provin dintr-o clasa principala , o conditie , o fectiune in sine nu este negativa, dar poate sa ridice inconvenientul de a fii nevoie sa punem in aplicare structuri asemanatoare . O posibila solutie a aceste probleme este , de a redefinii sursa facand in asa fel ca orice suprapunere sa fie mutate din multitdinea de clase secundare , in singura clasa ( superclass ) . Cel mai bine este sa vedem o simpla tehnica de sesizare , daca credeti de exemplu ca trebuie sa gestionati o aplicatie mai complexa , care cuprinde mai multe parti inter-conectate intre ele , dar care trebuiesc sa pevada modificari care nu implica intreaga structura , o modalitate de intervent ar fii aceea sa va asigurati ca sub-casele pot actiona pe parti din algoritm dintr-o clasa abstracta . " Template Methon Pattern " ne perimite acest lucru , adica descrierea structurii de baza a unui algoritm intr-o operatie lasand clasele secunde libere sa urmeze eventualele implementari . Operatiuni primitive : Concepute pentru a redefinii clasele derivate . Hookc : Metode optionale redefinibile sau eredetabile in forma originala . Metode care nu pot fii inlocuite / modificate deoarece apartin superclasei . Un simplu exemlpu de utilizare este acela care prevede creearea unei AbstractClass care contine metoda template asociata algoritmului pentru definirea continutului structural dintr-un fisier . Definita abstractului si implementarea in Sub-Clase Un exemplu practic de utilizare al " Template Method Pattern " , sa presupunem o aplicatie in care superclasa , numita " TemplateBase , are integrata metoda : (ViewFullMessage()) , care invoca metodele : extractObject() si extractText() . <?php // definitia superclasei ca si subclasa abstract class TemplateBase { // metooda si structurarea algortmului de clasa public final function vewfullMessage($message) { $bozza_Object = $message->extractObject(); $bozza_text = $message->extractText(); $object_final = $this->correctObject($bozza_Object); $testo_definitivo = $this->correctText($bozza_text); if (NULL == $text_final) { $message_displayed = $object_final; } else { $message_dysplayed = $object_final." .:::. ".$text_final; } return $message_dysplayed; } // functie pentru overriding abstract function correctObject($bozza_object); // hook function correctText($bozza_text) { return NULL; } } /* ereditare subclase*/ // first ConcreteClass class TemplateConTesto extends TemplateBase { function correctObject($bozza_object) { return str_replace(" ","---",$bozza_object); } function correctText($bozza_text) { return str_replace(" ","---",$bozza_text); } } // a doua ConcreteClass class TemplateJustObject extends TemplateBase { function CorrectObject($bozza_object) { return str_replace(" ","~",$bozza_object); } } class MessageFull { private $bozza_text; private $bozza_object; function __construct($bozza_object_for_write, $bozza_text_for_write) { $this->object = $bozza_text_for_write; $this->text = $bozza_object_for_write; } function extractText() {return $this->object;} function extractObject() {return $this->text;} function extractTextAndObect() { return $this->extractObject() . " .:::. " . $this->extractText(); } } write_message("Exemplu practic de utilizare a Template Method Pattern."); $message_complete = new MessageComplete("hello rst.com","Hello from R0cc0."); $template_with_testo = new TemplateConTesto(); $template_just_object = new TemplateJustObject(); write_message("Firs execution: show message and object:"); write_message($template_with_text->viewfullMessage($message_complete)); write_message("a doua executie : show just object:"); write_messageo($template_just_object->viewfullMessage($message_complete)); write_message("Finished execution."); function write_message($output) { echo $output."<br/>\r\n"; } ?> Executia sursei ar trebuii sa genereze un output de genul : Exemplu practic de utilizare a Template Method Pattern. First execution : Show message and object: Hello---rst.com .:::. Hello---from---R0cc0 . Second execution : show just object: Hello~rst.com Finished execution Reasumand tot, in aplicatie vine introdusa o metoda template, care nu va face altceva decat sa defineasca structura algoritmului , pentru care a fost creata superclasa . Scuzati greselile gramaticale .
  14. // removed. daca mai vad rahaturi, va trag ban in ordine alfabetica, ce penele mele.
  15. String-uri in Python Slicing and substrings ( Felierea si sub – stringuri ) Si mai interesanta este posibilitatea de taiere ( slicing ) , aceasta tehnia permite sa taiati o parte din lista care indica indicele de pornire si indicele de incheiere , este util sa stiti ca sub – stringul prelevat e acela care pleaca de la caracterul indicat al primului indice inclus , pana la indicele final exclus , omitand unu dintre indici indicam Python-ului sa mearga pana la sfarsit cu taierea , daca punem un numar negativ ca si indice final , Python va calcula caracterele in sens invers . Niste exemple practice : >>> y='Hello World' >>> y[0] # Ia prima litere de la Y avand in vedere ca se porneste de la 0 'c' >>> y[5] 'm' >>> x='Programare Pythom' >>> x[-2] # Printeaza al doilea caracter incepand de la dreapta 'o' >>> x[2:7] # Printeaza caracterele X inclusiv de la 2 la 7 'ogram' >>> x[4:] # Printeaza de la al patrulea caracter pana la sfarsit X 'ramuri python' >>> x[:4] # Printeaza caracterele X cuprinse de la inceput pana la al patrlea 'prog' >>> x[3:-2] # Printeaza de la al treilea caracter incepand de la 0 pana la penultimul X 'gramare python Metode pentru string-uri Observam acum anumite metode pentru stringuri care pot fii utile : Metoda " find() " este utila a reincarca de caractere un string , iar daca nu este prezent de rezulta " -1 " >>> s='rstforums.com' >>> s.find('rst') 0 Metoda " replace() " >>> s.replace('com','test') 'com.test' Metodele " upper() si lower()" , servesc la convertirea MAJUSCULELEOR si minusculelor intr-un string. >>> up=s.upper() >>> print(up) rstforumc.com >>> low=up.lower() >>> print(low) Construirea stringurilor : Multumita operatorului " % " putem sa construim un string introducand parametr " semnalpost " care se pot substituii cu valori asumate de variabile , ca si in instructia " printf " din " C " , exemplu : >>> nume = 'stefan' >>> ani = 29 >>> rezultat = "%s are %d ani" % (nume, ani) >>> print(rezultat) stefan are 29 ani In primele linii am definit variabilele + valorile string si numerice . In linia " %s are %d ani " am introdus parametrii . %s – Parametru de tip string %d – Parametru de tip numeric Parametrii pentru constrirea sting-urilor : Python ne ofera alte functii pentru a gestii string-urile , toate sunt grupate imprena cu modulul numic " string " . Liste Listele in Python sunt coletii ordonate de obiecte simalre " array " al altor tipuri de limbaje , cum ar fii Java . Diferit de string-urile despre care am vorbit , listele pot sa contina obiecte eterogene cum ar fii numere , string-uri si alte liste , acest ne permite de a manipula rapid si de a structura complexitati de alta natura , petru a declara o lista este suficient sa dati unui variabile o lista de valori , separate prin virgula si inchide cu paranteze patrate , exemplu : >>> l1=[1, 'html.it'] # Lista cu un intreg si un string >>> l2=[1, 1.2, 'ciao', [1,2] ] # Lista cu : intreg , real , string si o alta lista O mare parte din ceea ce am scris pentru string-uri este valabil si pentr liste , ca si indice care incepe de la 0 , normal o serie de exemple vor demonstra cum lucreaza operatorii de indici si slicing ( taiere ) . >>> s=['rst', 'com', 'rst.com'] * >>> s[0]****** # indicare 'rst' * >>> s[-2]***** # Indicare incepand de la dreapta 'com' * >>> s[:2]***** # slicing ['rst', 'com'] * >>> s[2:] ['rst.com'] * >>> s[1:-1] ['com'] Sa vedem acum operatorii pentru concatare " + " si repetare " + " , pentru liste . >>> [1, 2, 3] + [4, 5] # concatare [1, 2, 3, 4, 5] * >>> ['rst.com']*3***** # repetare ['rst.com', 'rst.com', 'rst.com'] >>> y=[1,2,3] * >>> y[0]="unu"* # Modifica lista >>> y ['unu', 2, 3] * >>> y[1:2]=[]** # Sterge un element din lista >>> y ['unu', 3] Pentru a cunoaste lngimea unei liste , utilizam functia " len()" >>> lista=['c', 'a', 'b']***** >>> len(lista) 3 Metode pentru liste Exemple : >>> lista=['rst', 'rst', 'rst l']**** * >>> lista.append('rst .com')************ #metoda append() >>> lista ['rst', 'rst', 'rst', 'rst.com'] * >>> lista.extend(['HYml','rst.COM'])*********#metoda extend() >>> lista ['rst', 'rst', 'rst', 'rst.com', 'HYml', 'rst.COM'] * >>> lista.insert(0, 'primuRST')************ #metoda insert() >>> lista ['primuRST', 'rst', 'rst', 'rst', 'rst.com', 'HYml', 'rst.COM'] Acum sa vedem metode de stergere : >>> lista=['rst', 'RST', 'Rst']**** >>> lista.pop() #Fara indice elimina ultimu element din lista 'Rst' >>> lista ['rst', 'RST'] >>> lista=['rst', 'RST', 'Rst']**** >>> lista.remove('rst')****** ['RST', 'Rst'] * >>> lista=['rst', 'RST', 'Rst'] >>> lista.remove(lista[1]) >>> lista ['rst', 'Rst'] >>> lista=['c', 'a', 'b']***** >>> lista.sort() >>> lista ['a', 'b', 'c'] Dictionare Un dictionar este o coloectie neordonata de obiecte . Obiectele sunt identificate unice de o cheie ( in general un string ) in loc de mediante un indice numeric , cum se face la liste . Fiecare element al dictionarului este reprezentat de o copie ( cheie / valoare ) , cheia este utila pentru a deschide elemente sau recuperare valori . Este exact ca si cand ai cauta un cuvand in DEX , in practica ceea ce se cauta este o explicatie a cheii , pentru a face o comparatie cu alte limbaje , putem spune la dictionar ca este o specie de array asociativ . Un dictionar este format din elemente separate , virgule si inchide in paranteze grafe , un dictionar gol este format din paranteze deschide si inchise . >>> dictionar1={}*********** # dictioar gol >>> dictionar1 {} Putem creea noi insine un dictionat prin metoda " dict() " >>> dictionar2=dict()******* # dictionar gol >>> dictionar2 {} Putem sa definim elemente din dictionar direct , listand copii ale cheilor-valorifice . >>> dictionar={'rst':1, 'RST':2, 'ESt':3} >>> dictionar {'rst': 1, 'RST': 2, 'RSt': 3} Pentru a recupera o valoare putem sa trecem la dictionarul nume de la cheia relativa. >>> dictionar['RST']******* # Recupereaza valoarile incepand de la dictionarul 2 Putem verifica existenta unei chei prin keyward-ul " in " >>>* 'rs' in dictionar******** # cauta cheia >>> True Introduceri , modificari si stergeri Sa vedem acum cum se introduce , modifica si sterge elemente dintr-un dictionar : >>> dic={'rst':1, 'RST':2, 'RSt':3} >>> dic['rst.com']=4****************** # introducere >>> dic {'rst': 1, 'RST': 2, 'rst.comt': 4, 'RSt': 3} * * >>> dic['rst']=7********************* # modifica >>> v {'rst': 7, 'RST': 2, 'html.it': 4, 'RSt': 3} * * >>> del dic['RST']******************* # stergere >>> dic {'rst': 7, 'rst.com': 4, 'RSt': 3} Pentru a cunoaste numarul elementelor dintr-un dictionar , utilizam "len " >>> len(dic) 3 Metode pentru dictionare >>> dic={'rst.com':1, 'RST':2, 'rst':3} * >>> dic.get('rst')*********************************** # metoda get() 3 * >>> dic.values()************************************** # metoda values() dict_values([1, 3, 2]) * >>> dic.keys()****************************************metoda keys() dict_keys(['rst.com', 'rst', 'RST'])* * >>> dic.items()*************************************** # metoda items() dict_items([('rst.com', 1), ('rst', 3), ('RST', 2)]) Oridinea cheilor ( cuvintelor ) Cum era la inceput cu Python 3.x , nu putem sa ordonam un dictionar utilizand direct lista obtinuta prin metoda " keys " . >>> dic1 = {'andrea':28, 'florin':25, 'marius':21, 'elena':28} >>> k = dic1.keys() >>> k.sort() Traceback (most recent call last): **File "<stdin>", line 1, in <module> AttributeError: 'dict_keys' object has no attribute 'sort' Ca o solutie ca saputem sa obtinem ceva ordonat convertind intr-o lista elancata de chei si aplcare metoda "sort" >>> k=list(k) #conversie in lista >>> k ['marius', 'florin', 'andrea', 'elena'] >>> k.sort() >>> k ['andrea', 'elena', 'florin', 'marius'] >>> for elemento in k: print(element, dic1[element]) ... andrea 28 elena 28 florin 25 marius 21 Tupla ( Tuple ) O tupla in Python este mult similara unei liste , functia lor este in mare parte aceeasi . Prima diferenta intre tupla si lista este sintaxa , tuplele sunt inchide intre paranteze rotunde ( nu patrate ) , exemple : >>> t=() >>> t () Iar pentru a reprezenta o tupla cu un element , se foloseste o sintaxa . >>> t=(1,) >>> t (1,) Urmatoare diferenta nu este prea vizibila , dar nu trebuie sa o trecem cu vederea . Lista poate fii mutat , tupla NU . Tipi mutabili Sa incercam sa descifram , variabilele de tip mutabil pot sa sa isi schimbe " viata ", practic pentru o lista este posibil sa intrducel sau sa stergem elemente in orice moment , pentru tipurile non mutabile , adica nu este posibil sa schimbam blocul valorii in in intern . Folosirea tuplelor Tuplele sunt folosite cand noi nu vrem sa se modifice continutul unei elencari , deci nu se pot adauga / sterge elemente . Operatorii sunt aceeasi ca cei ai listelor ( mai putin cei ce schimba valoarea care nu au motiv sa exista ) exemple : >>> tupla=(1,2,3,4) >>> tupla (1, 2, 3, 4) * >>> tupla[3]****** #indicare 4 * >>> tupla[1:-1]******* #slicing (2, 3) Ca si pentru string-uri si liste , avem operatori de concare si repetare : >>> ('unu','doi')+('trei','patru') # concatare ('primo', 'secondo', 'terzo', 'quarto') * >>>* ('unu',)*2************************** # ripetare ('unu', 'unu') Cum s-a mentionat mai sus , spre deosebire de liste, tuplele nu accepta modificari . >>> tupla=(1,2,3) >>> tupla.append(4) Traceback (most recent call last): **File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append' </pre> * <pre class="brush:plain"> >>> tupla.remove(1) Traceback (most recent call last): **File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'remove' * >>> tupla[0]=2 Traceback (most recent call last): **File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment Conversatii liste -> tuple , tuple->liste Este posibila conversatia dintre cele doua , cu functiile list si tuple , exeplu : >>> tupla=(1,2,3,4) >>> lista=list(tupla)***** # conversatie tupla-lista >>> lista [1, 2, 3, 4] * >>> tuplaconv=tuple(lista) # conversatie lista-tupla >>> tuplaconv (1, 2, 3, 4) Fisiere in Python Conceptul de fisier ( file ) este destul de bine cunoscut , faptul ca gestirea fisierelor in Pytho trebuie facuta in internul limbajuli ( built-in ) garanteaza o voteza si simplitate in gestirea lor , in particular este important sa putem gestiona fisiere cu instructii de limbaj programare , pentru salvarea informatiilor pe HDD si facute persistente . Continuare ^ | Variabilele " input si output " din tabel sunt obiecte de tip file , exemplu : >>> myfile = open('R0cc0.txt','w')****** # apare fisierul in scriere * >>> myfile.write(' linia 1\n')************ #** scrie linia 1 7 >>> myfile.write(' linia 2\n')************ #** scrie linia 2 7 >>> myfile.write(' linia 3\n')************ #** scrie linia 3 7 >>> myfile.close()********************* # inchide fisier * >>> myfile = open('R0cc0.txt','r')****** # Apare fisierul in timpul citirii >>> myfile.readlines()***************** #** citeste din fisier si reda o lista in linii ['linia1\n', 'linia2\n', 'linia3\n'] Functia " open " ne da voie sa citim un fisier care il scriem si returneaza un obiect de tip file care se asociaza lui " myfile ", Utilizam creeatia pentru a scrie in file cu metoda " write " si il inchidem cu " close" . Apoi ne intoarcem la acelasi fisier in citire si printam continutul cu " readlines() . Metode de deschidere ( open ) In afara de " w " si " r " ( write si read ) , care le-am studiat deja , funcia " open " ne arata alte modalitati de deschidere a fisierelor , care le putem utiliza ca si al doilea parametru : Din fisierele deshide in mod binar , putem extrage date ca si byte , fara nici un cod . >>> print(open.__doc__) Miscandune in internul fisierului Pentru a verifica statutul fisierului este suficient a printa datele instantei curente , exemplu : >>> myfile <_eo.TextEuWrapper name='RST.txt' mode='r' encoding='cp1252'> NOTA : sa nu uitam , mereu trebuie sa inchidem fisierele dupa ce le folosim / modificam " (close()) " . Functii Functiile sunt grupuri de instructii care la inceput prind un intreg de valori parametrici si au ca rezultat aceeasi parametrii . Functiile sunt un instrument important . Parmit reutilizarea codului , functiile folosite de mai multe ori intr-un program pot sa fie adunate intr-o singura functie . Permit de structurare codul programului in bloccri omogene din punct de vedere logic pentru a imbunatatii munca programatorului . Sintaxa definirii unei functii este : def nume_functie(<listeaza parametri divizati de virgula >): <bloc de instructiuni> return <rezultat> # optional Odata definita functia in acest mod este posibila retilizarea ei simplu , invocand numele ei , urmat de list de valori , se sub intelege , valorile le vom trece ca si parametri . Exemplu : def patrat(valoare): ris = valoare * valoare return ris a = 5 print patrat(a) Urmarind acest program , rezultat este 25 . Primele 3 linii definesc functia de patrat . De acum innainte numele " patrat " devine parte din " namespace " al modulului curent ( un intreg de nume semnificative in internul modulului ) . Invoam funcia , valoarea trecuta ca si parametru vine transferat la functia numelui parametrului (" valoare ") , vine urmata functia si de restituie rezultatul modululuin invocat . Toate asta ne permit sa sa le introducem in " patrat " , o operatie mai complexa . Introducand functiile trebuie sa distrugem variabilele locale ale functiiloor , deci vor fii utilizate de la sine . Variabilele globale , sau aparente in " namespace "modulului, deci se utilizeaza in afara functiei . Cand se invoca o functie vin transferate valorile variabilelor parametrilor functiilor . Acesta permite functiilor de venire in urma fnctiior care provin din " bloc " . Trecerea pe valori : Vine transferta functiei doar o copie a variabilei, deci funcia nu poate altera valoare variabilei . Trecere pe referinte : In acest caz vine trandferata variabila adevarata , deci poate altera valoare variabilei . In python parametrii trecuti la functii sunt mereu transferati pe valori . Asta e diferenta intre alte limbaje , ca si " C , Pascal" , unde se pot trece parametrii si pe referinte . Practic cand se utilizeaza o variabila , Python incearca prima oara numele acelei variabile in " namespace "local . Daca , cautarea nu este pozitiva , se continua cu " namespace " global si doar succesiv se va cauta numele intre functii ( built – in ) . adica cele default in Python . Acest mecanisc permite de utilizare valoarea variabile si provoaca creearea aceluiasi nume intr-un " namespace " nou . Exemplu : def functie1(): x = 20 # variabila locala cu acelasi nume print x # adevarat' vazut 20 si nu 10 print y # devarat' vazut 19 x = 10 # variabile gloobale y = 19 functie1() Treaba se schimba radicat pentru strcurarea datelor mutabile , care pot fii modificate in internul functiilor . Practic nu sunt niste ariabile adevarate ,deci e posibil sa le modificam . Exemplu : def functie2(a,b = 30): print a, b x = 10 y = 19 functie2(x) functie2(x,y) Functia numita 2 "functie2" are 2 parametrii : a si b , ea vine invocata de 2 ori . Rezultatul primului invoc este 10, 30 , practic parametrul b, nu este indicat , ia valoarea 30 . Rezultatul la al doilea invoc este 10, 19 . Module ( Moduli ) Cand se intra mai adanc in Python , programele / codurile cresc repede , si devin obositoare si greu de gestionat , intregul program intr-un singur file script . Pentru asta e oportun subdidere programu in diverse fisiere de script . Aceasta medoda permite de creeare recolte de functii care pot sa fie utilizate in proiecte diverse . Moduli sunt fisiere de script , "file.py " care pot sa fie reinvocate de alte programe Python pentru reutilizarea functiilor continute . Moduli pot sa fie creati usor de noi cei ce programam , dar daca exista deja multi , dece sa nu ii modificam continutul . Moduli pentru gestionarea string-urilor Moduli pentru invocare functii , din sitemul operativ Moduli pentru gestionarea internetului Moduli pentru e-mail Pentru a scrie un modul , este de ajuns sa creean un " file.py " si sa scriem toate functiile necesare , pentru al putea folosii il vom importa cu , comanda " import " . Exemplu : NOTA : Nu va incerede tin moduli luati de pe internet . import library upa ce ati importat libraria ( modulul ) , ptem simplu invocare functiile continute , folosind " dot notation " . Scriem numele modululi un punct si numele functiei , reusim sa intram in modul si invocare functia . Exemplu : R0cc0.py , contine functiile " open() , close() " , si move(obiect ) , puteti sa invocati functii asa : import library library.open() ogg=5 library.move(ogg) library.close() Daca nu doriti sa utilizati numele librariei , mereu cand invocati o functie , este posibil sa puneti si numele functiei direct . import library from library import move libraty.open() ogg=5 move(ogg) library.close() In acest caz , fuctia mutat face parte din intregul de nume definite in program " namaspace " si nu necesita prefix de nume modul ( librarie ) . library.py in internul programului , este de ajuns sa utilizati caracterul "*" . from library import * open() ogg=5 move(ogg) close() String : Modul care aduna functii pentru gestionarea string-urilor . Functii pentru convertire din strind in numar Functii petru convertire din minuscula in MAJUSCULA Functii pentru inlocuirea de patilor dintr-un string Sys : modul care adna functii pentru reperarea de informatii din sistem , ex : reperearea argumentelor trecute in linia de comanda ( CmD ) . Os : Modul pentru a face operatii din sistemul operativ , ex : copierea , renumirea sau stergerea unui file . Pentru a se inetelege mai bine conceputl de import al numelor functiilor , trebuie sa punem in paralele conceputul " namespace " Fiecare modul are un intreg de nume ( cele de variabile si cele de functii ) care reprezinta nume utilizabile in internul sau . Acest intreg se mai numeste si " namespace " ( spatiul numelor ). Pentr a transporta numele dintr-un " namespace " in altul se poate folosii comanda " import " Mediant , functia " dir() " , cu , care este posibil sa vedem lista de nume . >>> dir() ['__builtins__', '__doc__', '__name__'] Aceste nume de mai sus , sunt nume definite de interpret inainte de a incepe a comunia . Daca noi importam modulul " R0cc0.py " , se obtine asta : >>> from libraty import * >>> dir() ['__builtins__', '__doc__', '__name__', 'open', 'close', 'move'] Acum dupa cum vedeti toate functiile continute de " R0cc0.py " fac parte din " namespace " , de asta nu mai sunt deloc vizibile variabilele precedente , doar cele locale pentru functia in sine . Uitasem , aici gasiti module ( toate ) . Scuzati eventualele greseli gramaticale .
  16. Salut , sunt nou pe acest forum , dar cand spui " NU MA REFER LA RELIGIE! " , nu are cum sa nu te referi la religie , Dumnezeu se spune ca a creat credinta ( religia ) si o reprezinta , iar religia il reprezinta pe El , nu spun ca , cred neaparat in Dumnezeu , ca atunci cand dai de belele tot gandindu-te le scoti la cap , sau cu forta bruta in anumite cazuri , dar hai sa fim seriosi , cineva , ceva trebuia sa creeze aceasta lume , acest univers , nu stiu ce si cum , dar un lucru este sigur , daca nu cel despre care se vorbeste atat ( Dumnezeu fiind ) nu le-a creeat , atunci extraterestrii , si nu vreau sa spuneti ca aiurez , dar mai mult tind sa cred in extraterestri decat in El , asa cum Louis Armstrong a fost pe luna asa pot exista si ei pe pamant ,cum si noi am ajuns in spatiu , nu stiu aceasta este parerea mea . Plus ca noi suntem niste " masinarii " dar pe alta baza de functiune decat cea electrica / pe baterii sau mai stiu eu ce , noi suntem formati din : • sistemul cardiovascular • sistemul nervos • sistemul digestiv • sistemului musculoscheletal • sistemul endocrin • aparatul urinar • aparatul reproducator • sistemul reproductiv • aparatul respirator Deci am fii putu fii creati de " altii " nu de El , din cate stim noi are o forma spirituala si , doar Iisus s-a arata sb forma tangibila , sa nu punem la socoteala faptul iubirii , pentru ca si faptul iubirii s-a dovedit stiintific ca totul porneste din creier , si exista o legatura intre cei 2 sortiti . Parerea mea .
  17. Cred ca te va ajuta :Si aici ai " FastGSM " + crack .
  18. Blocuri indentarea si cod in Python Identare ( identificare ) si blocuri de cod : Python a fost creat si realizat pentru a fii un limbaj usor de citit si deslusit , pentru asta a fost creat si ales sa se utilizeze " Identarea " pentru a definii blocurile de cod sau continutul de linii de cod gresite . Sa vedem intr-un exemplu general cum vine reprezentata Identarea de bloc in cazul ciclurilor de control : instructie: bloc instructie: bloc Spatii si tulburari : Identarile trebuiesc facute utilizand spatii , asa este indicat si in alte tutoriale scrise de altii mult mai experti in domeniu , iar motivele principale sunt , ca nu exista o forma de reprezentare ale tulburarilo intre diverse editoare . Cate spatii : De obicei se foloseste , indentarea la patru spatii, dar putem decide în mod arbitrar, ceea ce conteaz? este ca acestea sunt niveluri compatibile de indentare , adica distanaa dintre instructiunile interne la bloc de cod si externe. O alta chestie sunt spatiile utilizate in internul intructiunilor pentru care avem o deplina libertate , in contrariu sintaxelor , de exemplu , in internul definitiei unui " array " pute sa utilizam chiar si o Identare de acest tip : >>> vec = [ 'unu', 'zece', 'cinci' ] >>> print(vec) ['unu', 'zece', 'cinci'] Variabile si comentarii în Python In Python nu este necesar sa se defineasca variabilele prima oara de a le folosii , nu este necesar sa le atribuim un timp de variabila . Totul vine implicit pe parcurs cand dam instructia operator (=) . Python are toate tipurile clasice de date , comune limbajului " C " de la care a luat anumite caracteristici , si se mai aseamana multor limbaje de programare , cateva caracteristici ale datelor principale disponibile : Tipul de date : Intreg : Peste 32 de bits si creste in baza exigentelor Ex ||999999999, 1200, -56, 0 Real : 32 bits , dublu cat " C " Ex || 1.23 3.14e-10, 4.0E210 Boolean : intrgcu 1=TRUE SI 1=FALS (ca in " C " ) Ex || 0, 1 Complex : Copie de numere reale Ex || 3+4j, 5.0+4.1j, 3j Strig : Lista de caractere Ex || 'stefan' , "apa " Ne aducem aminte ca regula alegerii unui nume al unei variabile este acelasi ca si la cele mai comune limbaje de programare . Orice variabila trebuie sa inceapa cu o litera sau cu un caracter , underline "_" dupa care pot sa urmeze litere sau numere sau underline . Python este un limbaj sensibil , dei ca distinge variabilele compuse din caractere minscule de cele MAJUSCULE . ATENTIE : Sunt anumite cuvinte cheie care nu pot fii atribuite unei variabile , acelea ar cam fii : ( Din ce imi aduc aminte , intrati pe net daca vrei sa le stiti chiar pe toate ) and, assert, break, class, continue, def, del, elif, else, except,exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while Toate acestea se folosesc atunci cand scrii ceva in Python ( cand o sa mai am timp , am sa le iau pe toate in parte la explicat ) . In Python este posibil sa dam o valoare unei variabile medianta , operator "=" . O singura oportunitate unica ne ofera Pytho-nul , aceea de a folosii mai multe variabile pe o singura linie de cod , ca si in exemplul de mai jos : >>> a = 'traiasca Python' >>> b = 3 >>> c, d = 'pe', 'rstforums.com'# multipla >>> print (a,b,c,d) traiasca Python 3 pe rstforums.com Comentariile Python : Este mereu foarte folositor cand Python comenteaza codul , deci Python ofera o sintaxa pentru comentarii . Caracterul care indica comentariul este "#" , el poate fi folosit la inceput de linie sau la sfarsit de instructie . # Acesta este un comentariu la incepuit de linie # Puteti sa faceti cate linii doriti a = 3 # Acesta este un comentariu care urmeaza o instrctiune Numere si operatori logici in Python Python ofera patru moduri de a reprezenta numere : Intrgi , rationale , complexe si boleane . NOTA : In versiunile precedente de Python exista o distictie intre ( int ) si ( long ) , de la Python 3 , nu mai exista ( long ) acum este (int ) , practic ( long ) a fost renumit ( int ) Pe langa aceste tipuri simple de date , Python ofera posibilitatea de a declara si structuri de date complexe implementate intr-un mod nativ ( official spus : " built - in types " ) , liste , dictionare , fisiere . Aritmetica utilizata in Python este mult similara a celea din C , exemplu : >>> 6+4*3 18 >>> 9/2 # Impartirea a 2 numere intregi care rezulta un float 4.5 >>> 2j * 2j # Inmultirea intre numere complexe (-4+0j) >>> int(10.6) # Conversia explicata de tipul float in tipul int 10 >>> float(20) # Conversie explicata de tipul int in tipul float 20.0 Operatiile de tip numeric sunt cele mai clasice : Operator : + , - Adunare scadere : 10+12=22 ; 5-1=4 -- Operator : * , / Inmultire impartire : 10*12=120 ; 10/2=5 -- Operator : % Restul impartirilor : 10%3=1 ; 5.3%2.5=0.3 -- In particular pentru numere intrgi avem : Operator : // Impartire intreaga : 10//3=3 -- Operator : <<, >> Schimbare la nivel de bit , la stanga si la dreapta : 24<<1=48 ; 10>>1=5 Operatori logici , pentru ei avem urmatoarele : Operator : or, and Or si and logici : x or y ; z and k -- Operator : not Negare logica : (not 0)=1 -- Operator : ¦ Ori la nivel de bit : x ¦ y -- Operator : & Si la nivel de bit : x & y -- Operator : ^ Si exclusiv la nivel bit la bit : x ^ y Uitasem , aici gasiti module ( toate ) .
  19. Salut , eu sunt R0cc0 , nu o sa dau informatii personale , tot ce pot sa spun , sunt acestea : Imi place sa mai scriu din cand in cand in Python , ceva C++ si PHP , nu de curand m-am apucat sa invat si HTML5 , sper ca o sa fie la fel de " incitant " ca pana acum . Cat despre crack , nu prea ma atrage , am avut anumiti amici care au cam incurcat itele libertatii cu , crack-ul si am zis sa imi vad de treaba mea , as vrea sa invat cat se poate de mult de la aceasta comunitate si sa ofer ceea ce stiu cui nu stie . Despre forum , am dat de el pe prietenul tuturor GooGle , am cautat un tutorial HTML si a trebuit sa ma inregistrez pentru a vedea link-urile , m-am uitat peste el un pic si mi-a placut ceea ce am vazut . Sper sa ne intelegem , In rest toate cele bune de la R0cc0 , Respect .
  20. Vin si eu cu un mic tutorial despre Python , este limbajul de programare care imi place cel mai mult si m-am gandit sa imi fac debutul cu el . Introducere si un pic de "istorie Python Python este un limbaj de programare modern cu sintaxe simple si puternice care ne faciliteaza invatarea acestuia , Python actualmente este utilizat mai mult pentru interfate GUI , lucrari cu date de baze , pentru creare si svilupare aplicatii WEB desktop , jocuri grafice 3d si altele . Diferente intr Python 2 si Python 3 Anumite noutati introduse la Python 3 au marcat " o pauza , gara " in a fii compatibile cu versiunile anterioare ex : Python 2 , sunt schimbari usoare de observat ca schimbarea de imprimare in functie de imprimare, in timp ce altele sunt foarte sensibile, cum ar fi schimbarea de tip de tip string byte (secven?? byte). Schimbatile principale si cele mai importante : Python 2 : Print "x" (Fara paranteze) X <> Y Long raw_input() try...except Exception, e Raise Exception, "Erorr" standardError class import mod my_dict.keys() inapoi la lista de unicode("buna") >>>k={1:"andrea", 5:"andrei"} >>>1 in k True True import httplib import constant types.UnicodeType types.StringType types.IntType types.LongType Python 3 : Print("x") X != Y Int input() try...except Exception as e Raise Exception("Erorr") Exception class from . import mod my_dict.keys() returneaza vizualizari dinamice str("buna") >>>k={1:"andrea", 5:"andrei"} >>>k.has_key(1) True import http.client from . Import constant Str bytes int int Aceste schimbari le gasiti aici mai detaliat explicate : Instalare Python Windows Pe paginile de download puteti gasii Python-ul.msi pentru versiunile de windows 32 / 64 Bits , este de ajuns sa il rulati , dupa instalare Python intra default in C:\Python32. Ajunsi aici este deja posibil sa ne folosim de el : Start -> All programs -> Python3.2 -> Python . Daca vreti sa deschideti Python fara probleme de la o fereastra DOS , trebuie sa mergeti in Control Panel -> System -> Settings -> Advenced settings -> Environment Variables . Apoi editati variabila PATH in variabilele de sistem prin ad?ugarea C:\Python32. Acum ca sa verificam ca totul a descurs bine intram in Start -> CmD si scriem : echo %PATH% Si dupa ce vedeti C:\Python32 puteti sa tastati python . Interpretorul Python si IDLE Cum am vazut mai devreme daca scriem Python in CmD apare o alta linie dedesubt , care se numeste " Interpret interactiv " care este caracterizat prin 3 caractere " >>> " . In alte cuvinte , acest interpret Python ne permite sa executam alte programe . De fiecare data cand tastati in CmD Python este scanat prin pentru token , aceste token-uri sunt analizate intr-o structura arborescenta care reprezinta structura logica a unui program care in final se transforma intr-un cod masina ( bytecode ) fisier .pyc sau .pyo pentru a putea executa acest cod ne trebuie un interpret bytecode care este o masina virtuala Python (PVM). Rulare linie de comanda ( CmD ) Ok sa ne cunoastem cu interpretul de baza Python , caracteristica fundamentala e ca scriind comenzi obtinem repede un raspuns exemplu : >>> 5*3 15 ---- >>> a=5 >>> b=6 >>> 2*(a++3*a 37 Executarea fisierelor .py Prima oara creem un fisier.txt(ASCII) si il salvam cu extensia " .py " , de exemplu , putem sa denumim fisierul " helloworld.py " ( fara ghilimele ) , deschiden fisierul creat cu orice editor . ( NU WORD ) notepad sau ceva similar si scriem : print('Hello World!!') Fisierul contine o singura linie de cod cu functia " print() " , iar ca rezultat dupa executarea fisierului ne va da ca raspuns " Hello World !! " , si executam fisierul asa : C:\python32>python helloworld.py Utilizarea IDLE Acum sa vedem cum se utilizeaza Python in interfata grafica : IDLE ( Integrated Development Environment ) este un abient GUI ce se poate folosii pe Windows , Linux , Mac , OS , el este deschis de un script Python ( idle.pyw ) , in caz ca avem windows 7 , il gasim in : Start -> All programs -> Python 3.2 -> IDEL ( Python GUI ) . Cand il vom deschide ne va aparea acest fisier : Deschidere si executarea unui fisier Putem deschide un fisier Python din meniu : File -> Open ( CTRL+O ) , pentru a crea un nou fisier de utilizare : File -> New Window ( CTRL+N ) , in ambele cazuri in bara de meniuri de sus va fii prezenta functia Run -> RunModule ( F5 ), asa vom executa scriptul scris in fisier . Functiile " print si input " Print : >>> a = 12 >>> b = 3 >>> print(a,b,(a - ) 12 3 9 Aici se observa flexibilitatea comenzii de tiparie , care inlantuie valoarea diferitilor paramentrii , divizati de o virgula si afisati in iesire . Aceast? posibilitate oferit? de modul interactiv, permite depanarea un pic "mai zvelt. Când executa?i un program, trebuie s? utiliza?i de imprimare. Cand se lucreaza direct in CmD este suficient sa scrie numele variabilei pentru a printa valoare . Aceasta posibilitate oferita de modul interactiv ne ofera un debug mai " zvelt " , cand executam un program , trebuie sa ne folosin de " print () " >>> x=10 >>> x 10 NOTA : In precedentele versiuni Python " print " era o comanda nu o functie si nu era necesar sa introducem parametrii intre paranteze , acum daca nu punem parantezele va rezulta o eroare de sintaxa . Input : Daca vrem sa face anumite programe ( consola ) este utila functia " input " , care ne ajuta sa interceptam secvente introduse in std-in , asta ne va fii un fel de tastatura . Exemple : >>> valoare = eval(input('introduceti o valoare numerica:')) Introduceti o valoare numerica: 5 >>> print(valoare*valoare) 25 >>> valoare = input('introduceti un string:') Introduceti un string: rstforums.com >>> print(valore) rstforums.com NOTA : La versiunile precedente de Python " input " ne trebuia la achizitia valorilor numerice , iar acum petru secvente string se utilizeaza " raw_input " , in aceasta versiune de Pythoon 3.2 " raw_input " devine " input " . Pentru a obtine precedentul comportament de " input " trebuie sa scriem : eval(input(...)) Uitasem , aici gasiti module ( toate ) .
×
×
  • Create New...