Python: scripturi si tutoriale

Diverse limbaje, programare, scripting, coduri, unelte specifice etc.
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Python: scripturi si tutoriale

Mesaj de Campus »

Salut
Deschid aici un topic legat de python, poate mai completeaza cei care sunt mai priceputi la programarea in acest limbaj.
Deocamdata pun mai jos codul unui scriptulet care deseneaza o casuta in terminal (un triunghi si un patrat sub el utilizand caracterele slash, backslash si dash) Acesta e un exercitiu bun pentru ca incepatori ca mine sa invete loop-urile cu for

Cod: Selectaţi tot

x = input("Spune cat de mare sa fie casuta :")
x = int(x) #transformarea din string in integer
    
for r in range(0,x): #definirea loop-ului pt acoperis
    t=x-r #spatiile din fata acoperisului
    print(" "*t+"/"+"  "*r+"\\")  #triunghiul acoperisului
       
print(" "+"--"*x) #baza acoperisului
for r in range(0,x):
    print("|"+"  "*x+"|") #peretii la fel de mari ca acoperisul
print(" "+"--"*x) #baza casei
Spre deosebire de alte limbaje in python conteaza indentarea pentru a demarca segmentele circulare. Dupa randul ce contine for: randurile ce intra in loop trebuie sa fie indentate la acelasi numar de spatii.
Oricum limbajul este foarte interesant, simplu si prezinta avantajul de a functiona pe toate sistemele de operare cu toate ca se pare ca este mai incet decat c++.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Re: Python: scripturi si tutoriale

Mesaj de Manu »

Foarte interesant, invatam Python jucandu-ne! :lol:

Am cateva intrebari in legatura cu Python-ul, dar inainte vreau sa imi aduc si eu contributia la construirea casutei, mai precis sa ii pun un horn.
Nu am cum sa stiu sintaxa pentru If in Python, asa ca pun un horn care sa inceapa de la streasina.
A, de fapt am mai putea sa ii spunem paratrasnet cu varful la aceeasi inaltime cu varful acoperisului. Acest horn/paratrasnet va fi pe partea dreapta. :)

Cod: Selectaţi tot

x = input("Spune cat de mare sa fie casuta :")
x = int(x) #transformarea din string in integer
    
for r in range(0,x): #definirea loop-ului pt acoperis
    t=x-r #spatiile din fata acoperisului si din fata hornului
    print(" "*t+"/"+"  "*r+"\\"+" "*t+"||")  #triunghiul acoperisului si hornul in dreapta.
       
print(" "+"--"*x+"--") #baza acoperisului si a hornului.
for r in range(0,x):
    print("|"+"  "*x+"  |") #peretii la fel de mari ca acoperisul, plus doua spatii pentru horn.
x = x + 1 #Marim cu 1 pe x ca sa se acopere diferenta data de horn.
print(" "+"--"*x) #baza casei
Nu stiu sigur daca nu am omis ceva, chiar nu am avut cum sa verific adaugirea mea, dar sper sa nu ma fi tradat logica.

Arata dragut acest limbaj, iar cu ocazia asta am invatat ceva. Nu stiam ca se pot inmulti chiar si stringuri, adica " "*10 sa dea 10 spatii de exemplu.

M-ar interesa cu ce se compileaza sau interpreteaza limbajul, adica ce trebuie sa instalez sa verific si eu acest cod.
Unde s-ar gasi ceva manuale?
Ultima oară modificat 10 Oct 2010, 20:44 de către Manu, modificat 1 dată în total.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

Da, merge perfect hornul tau :D
pun aici codul din consola mea de linux desi pentru jaws nu e foarte relevant

Cod: Selectaţi tot


Spune cat de mare sa fie casuta :4
    /\    ||
   /  \   ||
  /    \  ||
 /      \ ||
 --------
|          |
|          |
|          |
|          |
 ----------
Daca tot ne jucam am modificat putin scriptul ca hornul sa fie inalt doar cat doua treimi din acoperis

Cod: Selectaţi tot

x = input("Spune cat de mare sa fie casuta :") 
x = int(x) #transformarea din string in integer 
    
for r in range(0,x): #definirea loop-ului pt acoperis 
    t=x-r #spatiile din fata acoperisului si din fata hornului 
    #string-ul cu acoperisul va fi generat dinamic
    acoperis=" "*t+"/"+"  "*r+"\\"+" "*t
    if r >= x/3: #hornul porneste doar de la prima treime de acoperis de sus in jos
        acoperis=acoperis+"||"
    print(acoperis)  #triunghiul acoperisului si hornul in dreapta. 
        
print(" "+"--"*x) #baza acoperisului 
for r in range(0,x): 
    print("|"+"  "*x+"  |") #peretii la fel de mari ca acoperisul, plus doua spatii pentru horn. 
x = x + 1 #Marim cu 1 pe x ca sa se acopere diferenta data de horn. 
print(" "+"--"*x) #baza casei 
Ca sa programezi in python nu ai nevoie decat de acest pachet ce contine ultimul interpretor pt windows. Apoi poti deschide IDLE ce e o consola interactiva unde poti testa comenzi
de asemenea aceasta are si un editor care poate fi configurat sa se deschida odata cu consola din preferintele acesteia bifand start with editor in preferences parca.
Cat despre documentatie.... eu am gasit ceva carti pdf pe net.... nu stiu daca le pot pune aici pt ca nu sunt chiar "open source" :D
Mai gasesti pe net o serie de tutoriale.
Ca sa rulezi un script cel mai simplu e sa il salvezi cu extensia py care va fi asociata cu acesta. Daca compui scriptul cu editorul idle ai acolo run, deci e mai usor. Daca nu.... deschizi cmd.... scrii frumos c:\python\python.exe script.py :D
Sunt sigur ca exista si alte ide=uri mai complexe.... eu nu prea le cunosc inca.
Sa nu uit. adaug si casuta cu marimea 5 si horn ajustat

Cod: Selectaţi tot

Spune cat de mare sa fie casuta :5
     /\     
    /  \    
   /    \   ||
  /      \  ||
 /        \ ||
 ----------
|            |
|            |
|            |
|            |
|            |
 ------------
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Deci la casa ta, ai subliniat faptul ca hornul iese dinauntru, baza acoperisului nu se intinde si sub horn. Asa facusem si eu, dar apoi m-am gandit ca a fost o omitere. Aici vizualul decide, adica se vede cum arata mai bine.

Pe mine, ca sa invat mai departe, m-ar interesa sintaxa pentru ramurile If-ului, pana in prezent, la fiecare limbaj in care am facut cate ceva a fost altfel, sunt curios ca si care dintre ele este in Python. :)

Pun mai jos sintaxa If-urilor pentru celelalte limbaje in care m-am mai jucat:

1. JAWS Scripting:

Cod: Selectaţi tot

If x==y Then
..........
ElIf x>y Then
..........
Else
..........
EndIf
2. C++ (BGT Compiler):

Cod: Selectaţi tot

if x==y
{
.........
}
else if x>y
{
..........
}
else
{
..........
}
3. PHP:

Cod: Selectaţi tot

if x==y
{
..........
}
elseif x>y
{
..........
}
else
{
..........
}
4. m in M-Shell:

Cod: Selectaţi tot

if x=y then
........
elsif x>y then
..........
else
..........
end
Intre 2 si 3 diferenta este doar ca la a doua ramura este sau nu este spatiu intre else si [if[/i]. Tot la reprezentarea acestei ramuri, se pare ca toate cele patru sunt diferite de celelalte trei: ElIf, else if, elseif, elsif.
La al patrulea, m, e interesant ca se foloseste un singur "=" (egal) pentru a arata egalitatea intre x si y.
Ultima oară modificat 10 Oct 2010, 20:45 de către Manu, modificat 1 dată în total.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

Un if in python e si mai simplu decat in celelalte limbaje enumerate de tine. Vizual e chiar mult mai natural pt ca face apel doar la indentare si la semnul de doua puncte pentru a demarca conditia de cod

Cod: Selectaţi tot

if x==y:
    --------------
elif x>y:
    --------------
else:
    --------------
#iesirea din conditie se face prin indentarea de la inceput
    
Referitor la compilare pt windows exista Py2exe care transforma scripturile python in executabile de sine statatoare. Inca nu stiu pentru celelalte sisteme de operare. Oricum pt linux este o practica obisnuita sa instalezi si interpretorul python pentru ca acolo multe proiecte sunt scrise in acest limbaj. In plus interpretorul este destul de mic ca dimensiune, cel de windows inpachetat avea vreo 8 mega. Nu prea se compara de exemplu cu sdk-ul de la java care iti toarna sute de mega pe harddisk
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Campus scrie:Referitor la compilare pt windows exista Py2exe
Py2exe nu compileaza scripturile in Python, ci doar creaza un pachet care contine atat interpretorul Python, diverse biblioteci de functii dupa nevoie si codul sursa al programului care trebuie rulat.

Distributia de Python pentru Windows are 30 - 40 MB dar in zilele noastre nu cred ca conteaza dimensiunea programelor.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Am incercat si eu editorul Idle, numai ca nu merge chiar ferestruica cu class: "TkChild", cea in care se scrie... Inca nu am reusit sa conving JAWS sa considere ca acolo e vorba de un simplu edit, probabil ca e un control mai complex.
Ar trebui sa caut si eu Edsharp sa vad ce e cu el...
Tocmai vroiam sa ii pun o usita la acea casuta, doar ca... daca nu ma verific putin...
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Nu am folosit acel editor, insa daca numele clasei incepe cu Tk... e de rau. :-)
Asta fiindca este foarte probabil sa foloseasca clase grafice Tk, care sunt pentru moment (si probabil pentru totdeauna) absolut inaccesibile pentru JAWS.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Poate stie IonPop, Vortex sau alti utilizatori de JAWS care mai si programeaza, care ar fi cea mai buna metoda pentru a lucra eficient in Python, ma refer la un mod de a auzi cat mai eficient si scurt nivelul de indentare a codului.

Nu imi place acest limbaj pentru ca sunt prea obisnuit cu blocurile de cod intre acolade si cu tipuri statice, dar va trebui sa ma obisnuiesc cat de cat pentru ca voi lucra mai putin sau mai mult pentru un proiect in Python.

Asadar, cum il fac pe JAWS sa imi anunte nivelul de indentare al unei linii de cod? Stie cineva?
E totusi prea aiurea sa ma bazez doar pe detectare la nivel semantic al codului, sa imi dau seama ca aici sau acolo ar incepe un alt nivel de indentare si eventual sa ma conving numarand spatiile.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Poti sa configurezi Jaws ca sa iti spuna numarul de spatii folosite pentru indentare.
In Settings Center dupa ce apesi eventual Control+Shift+D ca sa se aplice in toate programele daca vrei, scri "indent", apesi sageata in jos, si va aparea ceva de genul "say indented characters", care are un check box.

Daca nu vrei sa se aplice decat intr-un program, nu apesi Control+Shift+D.
Daca vrei sa se aplice intr-un program cand programezi in Python, dar sa nu te tot anunte cand faci altceva cu acelasi editor fiindca este enervant, poti sa faci un duplicat al programului cu un alt nume, iar Jaws va crea un set de fisiere de configurare doar pentru el.
Si eventual poti si sa configurezi ca acel program doar sa deschida automat fisierele cu extensia .py.

Eu de exemplu am facut copy/paste cu fisierul textpad.exe in acelasi director in care este instalat TextPad in Program Files, iar pe al doilea l-am denumit textpad2.exe si pentru el am setat ca limba implicita a Jaws-ului sa fie romana.

Avantajul utilizarii acelei facilitati a Jaws-ului este ca daca ai mai multe linii cu aceeasi indentare, Jaws nu iti spune pentru fiecare nivelul de indentare, ci doar atunci cand ajungi cu cursorul pe o linie cu un nivel diferit de indentare.

Mie personal nu prea mi-a placut limbajul Python, fiindca este mult mai putin flexibil si decat Ruby si mai ales decat Perl, si este de acelasi tip, adica cu aceleasi avantaje si dezavantaje majore, insa unul dintre motivele importante pentru care l-am respins a fost tocmai aceasta problema legata de indentare. Totusi, de multa vreme deja eu indentez codul in Perl, desi nu este obligatoriu si chiar daca pot formata corect un intreg fisier cu o simpla comanda sau combinatie de taste in TextPad. Deci cu alte cuvinte, problema indentarii nu este chiar atat de mare cum am crezut initial, ci este la fel ca multe altele, doar una legata de obisnuinta.
Eu nici macar nu folosesc acea facilitate a Jaws-ului de anuntare a nivelului de indentare.
In Python s-ar putea sa nu ai nici macar atata nevoie de ea, fiindca acolo daca nivelul de indentare este incorect, vei primi probabil o eroare, asa ca vei sti.

Dar cine stie... probabil ca este totusi mai complicat in Python, fiindca daca ai mai multe niveluri de if, elseif, elseif, elseif, s-ar putea sa nu iti dea eroare daca nivelul de indentare nu este corect, ci doar programul ar putea sa nu functioneze corect.

Dar despre ce proiect este vorba?
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

E vorba de o aplicatie pentru nevazatorii mai in varsta sau cei care nu prea au timp si chef sa se adapteze la utilizarea normala a calculatorului.
A se face multe lucruri doar din 4 sageti, gen citire ziare, ascultare radiouri etc.

Adevarul e ca nici nu ma vad in viitor facand altceva in Python, nu imi place, mai ales ca o variabila poate avea pur si simplu un nume oarecare, fara nici un semn. Asadar, eu vad pe undeva in cod un x, dar nu stiu clar: acum a fost creat acel x, acum i se atribuie alta valuare etc, nici macar daca sigur e vorba de o variabila. :lol:
Cred ca intr-adevar limbajele astea nu prea sunt bune pentru a lucra in echipa, imi ia foarte mult pana inteleg codul altcuiva.

Am activat si eu acel Say Indented Characters, dar am avut senzatia ca nu numara bine, eu vedeam cu sageata stanga dreapta ca sunt 4 spatii si el spunea 7, m-am gandit ca nu e ceva in regula si numara si spatiile dintre cuvintele de pe un rand.

Mai incerc, poate nici editorul in care lucram nu ii convenea JAWS-ului.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Aa, pai inseamna ca editorul nu e bun. Spre deosebire, cu TextPad eroarea e mult mai mica, astfel in loc de 4 spatii spune ca sunt doar 5. :-O
Nu am experienta in utilizarea acelei facilitati asa ca nu stiu care o fi problema, insa s-ar putea sa se rezolva cu unele setari ale Jaws-ului si/sau cu modificarea marimii caracterelor in editor.
Mie nu imi place sa imi tot spuna Jaws-ul ce indentare exista, asa ca atunci cand am nevoie numar spatiile.
Apas doar home, Control+Shift+Sageata dreapta si citesc status bar-ul cu Insert+PageDown.
Sau alteori nu numar spatiile, ci aplic metoda urmatoare:
Apas home, apoi Control+Sageata Dreapta si cu Insert + Page Down citesc in ce coloana se afla cursorul, care cu combinatiile precedente este mutat inainte de primul caracter din rand.
Noroc ca rareori am nevoie sa numar spatiile.

Eu am un stil de programare mai plat, care de fapt este si recomandat fiindca codul este mult mai usor de inteles ulterior, si de mine, si de altii, iar in acel stil prefer sa creez mai multe subrutine mici care stiu doar ca isi fac treaba bine fara sa fie nevoie sa umblu prin ele, si sa nu creez un cod lunguiet cu multe niveluri de if, else si alte soiuri de blocuri.

In ceea ce priveste variabilele, si in Java poti avea o variabila numita doar x care sa nu sti ce contine si de care tip este. Recomandarea este sa creezi variabile a caror denumire face clar scopul lor, indiferent de limbaj.

Depinde doar de programatori cat de bine stiu sa scrie codul.
Poate exista o extrema nasoala sa folosesti variabile stupide ca zodtr, zomthm, zdurmto, zrarot (eu am intalnit uneori) pe care sa nici nu le poti memora si despre care sa nu sti ce reprezinta nici dupa ce ai citit intreg codul, si pe care uneori cu cititorul de ecran sa nici nu le poti diferentia usor, dar exista si o alta extrema folosita mult mai des in programele in Java, in care se folosesc nume de variabile foarte lungi de genul:
publicOffersWithRandomAllocationDealsAndOddLot
publicOfferWithDirectAllocationDealsAndOddLot
directOfferWithNormalAllocationDealsAndOddLot
publicOffersAndRightsWithRandomAllocation
...si multe altele.
Si acestea au multe probleme, unele fiind aceleasi ca la cele de mai sus, adica sunt greu de memorat si de inteles cu cititorul de ecran, fiindca uneori exista cuvinte la singular cum ar fi "Offer", alteori la plural ca "Offers", si te pot incurca cu acelasi succes.

Iar in ceea ce priveste continutul lor, in multe cazuri este oricum insuficient daca folosesti un nume kilometric, asa ca cel mai bine este sa folosesti variabile scurte, dar descriptive, cum ar fi first_name, last_name, email, iar daca o variabila contine ceva mult mai abstract care sa poata fi exprimat intr-un cuvant - doua, este oricum de preferat sa adaugi cel putin un comentariu daca nu chiar o bucata de documentatie ca lumea in care sa explici ce anume reprezinta acea variabila.

Din punctul asta de vedere chiar nu exista o diferenta prea mare intre limbaje, fiindca si in Python se pot folosi variabile la fel de lungi si de descriptive ca in Java, iar daca ele sunt altfel, tine doar de stilul programatorilor.

Exista insa alte chestii mai nasoale in Python... :-)
Cum ar fi un suport mai slab pentru Unicode, sau faptul ca 3/2=1 in Python 2.7 si 1.5 in Python 3, sau ca nu eexista scop in care variabilele sunt valabile incat trebuie sa lucrezi in general cu variabile globale care chiar ca poate crea confuzie...
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Da, dar macar in Java sau C++, daca vad un x = 5 voi sti clar ca trebuie sa fie undeva definit acel x anterior, cel putin voi exclude posibilitatea ca acea variabila sa fie creata exact acolo.
De asemenea, daca vad un x = 5, pot da repede o cautare dupa "int x" si vad exact unde a fost creata variabila x, daca nu gasesc cu "int x" eventual incerc cautarea si cu "double x".
Acum o intind si eu asa ca sa mai continuam discutia din Dynamic versus Static, desigur ca cel mai mult conteaza cum a fost scris codul, cum sunt sau cate sunt comentariile etc.

De acord, cel mai bine e ca numele variabilelor si ale functiilor sa fie cat mai descriptive, imi place ca la Java te instruiestc aia destul de bine sa procedezi astfel.

Se pare ca va trebui sa utilizez EdSharp-ul lui Jamal Masrui, cu ala am optiunea PyBrace: apas un Alt + Shift + { si imi transforma un cod de Python in cod C-like, iar la apasarea Alt + { imi readuce codul in format indentat pentru Python.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

"Da, dar macar in Java sau C++, daca vad un x = 5 voi sti clar ca trebuie sa fie undeva definit acel x anterior, cel putin voi exclude posibilitatea ca acea variabila sa fie creata exact acolo.".

Ma rog, in Perl recomandarea este ca variabilele sa fie definite anterior asa ca nu prea intampin aceasta problema, dar ma gandesc ca si daca nu ar fi asa, tot nu ar fi o problema.
Daca la un moment dat valoarea vezi ca este 5, de ce ar trebui sa te mai intereseze ce valori anterioare a avut acea variabila?
Cred ca pot aparea neclaritati doar daca codul este in general scris prost de genul "spaghetti" incat iti este greu sa iti dai seama ce valoare are la un anumit moment dat o variabila...
Cred ca problema va fi daca vei face operatiunea x / 2 care iti va da rezultatul 2 in Python 2.7. :-)

"De asemenea, daca vad un x = 5, pot da repede o cautare dupa "int x" si vad exact unde a fost creata variabila x, daca nu gasesc cu "int x" eventual incerc cautarea si cu "double x".".

Dar tot nu inteleg la ce te ajuta. Daca vezi la un moment dat x = 5, inseamna ca x este de tip integer si ca are valoarea 5. Ce importanta are sa vezi unde a fost definita? Asta daca nu a fost creata chiar in linia in care apare x = 5.
Daca ai fi vazut x = 5.0, atunci ar fi avut un tip de valoare in virgula mobila sau daca ai fi vazut x = "5" atunci ar fi fost string.... sau nu? Intreb fiindca nu sunt specialist in Python.

"De acord, cel mai bine e ca numele variabilelor si ale functiilor sa fie cat mai descriptive, imi place ca la Java te instruiestc aia destul de bine sa procedezi astfel.".

Eu nu sunt de acord, dupa cum am dat si exemplele de mai sus cu acele variabile cu nume cat mai descriptive.
Ele au multe dintre problemele variabilelor cu nume foarte scurte si criptice. Astfel de variabile sunt dificil de folosit chiar daca folosesti un IDE ca Eclipse, fiindca multe dintre ele pot avea nume asemanatoare, nume foarte lungi, iar intre unele pot exista diferente doar de o singura litera incat poti alege incorect si dintre optiunile oferite de IDE.
Cred ca variabilele trebuie sa aiba nume descriptive doar daca acele nume pot fi relativ scurte, dintr-un cuvant sau doua - trei. Daca sunt necesare 7 cuvinte ca sa definesti o variabila, cel mai usor este sa adaugi un comentariu in care sa explici ce reprezinta, si sa ii dai un nume mai scurt.
Asta pentru ca odata ce ai inceput sa lucrezi la un program, este nevoie doar de putin timp la inceput ca sa te lamuresti despre ce reprezinta acele variabile, nu sa citesti intreaga poveste de fiecare data cand le folosesti desi deja stii foarte bine ce reprezinta.
Daca intr-un fisier ar trebui sa folosesti sute de variabile, atunci intr-adevar, ar fi dificil sa le memorezi pe toate si nu ar ajuta sa pui comentarii pentru toate, asa ca ar fi bine sa fie cat mai descriptive, insa nu este bine sa ai fisiere cu sute de variabile cand poti foarte bine sa structurezi mai bine programul si sa creezi mai multe module de dimensiuni mai mici cu mai putine variabile.

"Se pare ca va trebui sa utilizez EdSharp-ul lui Jamal Masrui, cu ala am optiunea PyBrace: apas un Alt + Shift + { si imi transforma un cod de Python in cod C-like, iar la apasarea Alt + { imi readuce codul in format indentat pentru Python.".

Eu doar am citit despre acea facilitate, dar pe de o parte nu mi-a placut niciodata nici EdSharp (si i-am spus si lui Jamal de ce), iar pe de alta parte acel stil de programare imi pare un hack foarte instabil. Daca trebuie sa lucrezi doar la un proiect intr-un limbaj care nu iti place, atunci e OK, dar sa planuiesti sa il folosesti ca pe unealta principala de programare pe termen lung... nu imi pare a fi o idee extraordinara.
Nici mie nu imi place stilul Python/Ruby care nu foloseste acolade, fiindca obisnuiesc de foarte multe ori sa selectez ce este intre o acolada si perechea ei, ca sa mut un bloc dintr-o parte in alta, sau ca sa il sterg, sau pur si simplu ca sa vad cate linii are, ca sa imi dau seama cam cat de lung este, dar din fericire nu am fost nevoit sa lucrez in ele pana acum. :-)

Imi dau seama ca daca as fi fost vazator, probabil ca as fi apreciat mai mult aceste limbaje, fiindca as fi vazut codul in intregime asa ca nu as fi avut nevoie sa contorizez liniile ca sa vad cam cat este de mare, m-ar fi ajutat indentarea asa ca as fi apreciat obligativitatea indentarii din Python, as fi putut utiliza multe mai multe editoare care noua ne sunt mai greu accesibile care permit mai multe facilitati pentru lucrul in aceste limbaje, dar orb fiind...
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Pai de ce sa nu ma intereseze unde a fost creata o variabila? De exemplu poate vazand brusc un x = 5, as spera ca acel x are un comentariu la creare. :)
Nici eu nu sunt specialist in Python, incerc acum sa ma familiarizez cu el cat de cat si sper sa nu am nevoie de el in alte scopuri, de fapt atatea limbaje cu blocuri de cod intre acolade sunt incat nu cred sa existe riscul sa nu pot face ceva anume intr-unul din ele, sa ma trezesc ca doar Python mi-ar fi bun.
In cazul de fata se utilizeaza Python 2.7 si cu precadere biblioteca wxPython. De asemenea cred ca destul de rar imi va trebuie o variabila de tip float sau double, sincer inca nici nu am probat ce se intampla cu o impartire a lui 1 la 2. In cazul limbajelor statice stiu sigur ca int x=1/2 va fi egal cu 0, iar double x=1./2. va fi 0.5 - cel putin astfel de studii nu ar mai trebui sa fac.
Ei, daca spui ca in Python intr-o versiune da intr-un fel sin alta versiune altfel, treaba este ciudata, inseamna ca s-a dovedit de-a lungul timpului ca trebuie altfel sa stea lucrurile sau cine stie, asta nu poate fi decat un efect al neutilizarii cutiilor corespunzatoare pentru un anume tip de produs. La dinamic e ca si cum am avea un tip de cutii pe care incercam sa le folosim pentru orice produs, eventual le mai ajustam putin sa nu se strice continutul. :) Se pare ca la Pyton 3 au schimbat ceva legat de standardul cutiilor, au schimbat furnizorul...

Cat despre numele variabilelor, nu sustin nici eu utilizarea unui numar mai mare de 2 / 3 / 4 cuvinte, insa utilizarea adjectivelor si a substantivelor pentru proprietati si utilizarea si a unui verb in cazul metodelor nu e rea, devine totul foarte clar, stii mai sigur despre ce e vorba chiar la o citire rapida a codului pentru o prima familiarizare, daca e proprietate sau metoda, nici nu trebuie sa auzi daca sunt paranteze rotunde dupa o insiruire de acele 2 / 3 / 4 cuvinte.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Scrie răspuns