Sarò scemo ma non capisco perchè non riesco a scrivere in Python una cosa che in C è semplicissima, cioè questo:
Code:int a=2;
int b=3;
if (a==2){
if (b==4){
cout << "B vale 4" << endl;
}
cout << "Prova Prova";
}
Printable View
Sarò scemo ma non capisco perchè non riesco a scrivere in Python una cosa che in C è semplicissima, cioè questo:
Code:int a=2;
int b=3;
if (a==2){
if (b==4){
cout << "B vale 4" << endl;
}
cout << "Prova Prova";
}
non devi tabbare un sacco? :D
Lo sai vero che python usa(va ...sono fermo a 2 anni fa ma presumo non sia cambiata questa caratteristica) le indentazioni e non le graffe per dividere i blocchi di codice?
Se scrivi tutto senza indentare le condizionate non funzioneranno.
tabbare = indentarte
per il resto dovrebbe essere così:
if a == 2:
if b == 4:else:print "B vale 4"
print "Prova Prova"
dovrebbe essere una cosa del genere
Io voglio che quando termina il codice dell if b torni a eseguire il codice restante di if a
ma mettilo prima della if=b
Molte volte mi capita di dover fare cose simili...quindi chiedevo
in python invece delle parentesi usi i tab... cose con la stessa indentazione fanno parte delle stesse parentesi per capirci
Secondo me no.
Entra nell if b, e quando esce non esegue quello nell'else, ma lo salta.
Faccio esempio del programma
Allora mostro i due casi per essere chiaroCode:nome=raw_input('Inserisci il nome :')
età=input=('Inserisci la tua età :')
if (len(nome)>0):
print "Nome Inserito :",nome
if (età > 20) print "Hey hai più di 20 anni"
print "Caro %s di %d anni il programma è terminato" % (nome,età)
Caso 1:
Nome=Pippo
Età 18
Output a Console:
Caso 2:Code:Nome Inserito : Pippo
Caro Pippo di 18 anni il programa è terminato
Nome: Topolino
Età: 35
Code:
Nome Inserito: Topolino
Hey hai piu di 20 anni
Caro Topolino di 20 anni il programma è terminato
@hardcore: è consigliabile usare raw_input in qualsiasi caso indipendentemente dal tipo (stringa o intero)Code:a = 2
b = 3
if a == 2 and b ==3:
print 'a vale 2 e b vale 3'
else:
print 'nulla'
Code:nome=str(raw_input('nome: '))
eta=int(raw_input('eta: '))
Non ho capito il primo codice che hai messo.
Ok, però non fa quello che penso io, l'idea è
A Vale 2? SI
Entro nel blocco
<eseguo del codice per tutti i casi in cui a vale 2>
Dentro a questo blocco caso particolare <b vale 3?> Si eseguo anche questo particolare codice
Esco da b
continuo a eseguire del codice dell if A
Quello scritto da te se a o b valgono quello esegue tutto quel codice, non un codice limitato solo ad b=3 nel caso a =2.
Ovviamente potrei fare
if a==2 and b==3 : <blocco A>+<blocco B>
ma poi avrei anche un
if a==2 and b!=3: <blocco A>
cioè del codice scritto piu volte che mi sembra una cosa un pò inutile. Oh magari sta cosa in python non si può fare e basta
si scusa ho scazzato con le variabili, pardon.
Comunque se è per imparare i cicli if/elif/else
Tutto a base di indentazione pythonCode:domanda = str(raw_input("Che lingua ti piace di piu? Inglese o Italiano? "))
if domanda == 'inglese' or domanda == 'Inglese':
print 'bene! parli inglese'
elif domanda == 'italiano' or domanda == 'Italiano':
print 'bene! Parli italiano'
else:
print 'Rispondi alla domanda'
funziona cosi quel che dici tu
puoi fare una funzione con il blocco di codice, successivamente la richiami nel ciclo if quando la condizione è veraCode:if expression:
statement(s)
else:
statement(s)
in questo caso la variabile che contiene il valore 2 è una variabile Globale. Da richiamare dentro la funzione
Code:if tizio == caio:
qui parti con la funzione()
ok ma come fa a capire che finisce la parte di <codice di b==3 e a==2> in C sono abbituato con le { }
Bene ho risolto, Non si può fare e basta.Devo usare ste dannate sequenze di if eleif ed else.
si che si può fare zio pera
link --> http://www.tutorialspoint.com/python/python_if_else.htmQuote:
The Nested if...elif...else Construct
There may be a situation when you want to check for another condition after a condition resolves to true. In such a situation, you can use the nested if construct.
In a nested if construct, you can have an if...elif...else construct inside another if...elif...else construct.
The syntax of the nested if...elif...else construct may be:
Code:if expression1:
statement(s)elif expression4:
if expression2:
statement(s)elif expression3:
statement(s)else
statement(s)
statement(s)else:
statement(s)
Ok ci son saltato fuori, praticamente, cosa non presente in C conta come si scrive il codice dal punto di vista grafico e come le cose sono allineate.
Grazie a tutti per la pazienza, so di essere un testone :)
In ogni caso credo che questa sia la cosa piu idiota che abbia mai visto.
Scrivevo il codice di prova con VI che andava a capo in automatico e quindi non veniva niente.
Ho messo eclipse e allinea le cose lui.
A mio parere è la cosa piu stupida che si possa fare non avere dei caratteri di inizio o fine blocco.
Python e` stato concepito anche in modo da imporre la leggibilita` del codice ed uniformarla: troppo spesso accade che ognuno applichi la propria formattazione (o non ne applichi proprio una) e il codice diventi un blob.
Demandare tutto all'IDE puo` semplificare la vita, ma non e` detto che quello che vedi in eclipse sia necessariamente lo stesso che vedi in netbeans o vi. Python lo impone.
E` una questione di filosofia di programmazione: se vuoi vedere la cosa portata all'estremo, butta un occhio sui linguaggi di porgrammazione esoterici ( Brainfuck e Whitespace, per dirne un paio).
a me python piace una cifra... si vede subito il codice di un blocco rispetto agli altri!
hardcore, senza offesa, ma se non riesci a scrivere 2 if annidati in un qualunque linguaggio, devi prendere una guida di sintassi di quel linguaggio e studiartelo.
i linguaggi, coi costrutti base, hanno più o meno tutti le stesse caratteristiche... si suppone che switchare da uno all'altro sia una banalità...
cmq nel tuo caso in python è
io uso vi e non ho questi problemi -.-'Code:a=2
b=3
if (a==2);
_if (b==4): #uno spazio
__print "B vale 4" #due spazi
_print "Prova Prova" #uno spazio
Mi mancava il pro player della situazione...Forsr ignori che i compilatori C Java se ne fregano dell aspetto o degli spazi. quindi tabbare è sempre stato un mero vezzo estetico. cosa che qui non è.
La leggibilità del codice non è un mero vezzo estetico, così come non lo sono i commenti.
Sto 3d è epico :sneer:
cavolo che merda il python! molto meglio il c con vi!
:sneer:
Mi convinco giorno dopo giorno che tu abbia dei difetti di comprensione dell'italiano.
Evidentemente non comprendi la differenza tra Estetica e Funzionalità.
Vediamo se ti è piu chiaro.
In C++ / C scrivere:
Funziona diversamente da:Code:if (a==b){ for(int i=0;i<=a;i++) for (j=0;j<=b;j++) x=i;y=j; cout << vector[x][y] << endl; cout << "Prova Prova"; }
La Risposta è NO. Ergo l'estetica in C/Java/C++ si segue solo ed esclusivamente per rendere il codice leggibile, python ti obbliga a torto/ragione invece ad avere un codice esteticamente piacevole.Code:if (a==b){
for(int i=0;i<=a;i++)
for(int j=0;j<=b;i++)
x=i;
y=j;
cout << vector[x][y] << endl;
cout << "Prova Prova";
}
Mi sembra che facciate i pro player per una questione che non esiste.
Vuoi scrivere codice bello, fai pure. Io ho pagine di codice ottimizzato al cui interno vi sono sberle di SSE2, e segmenti __asm, e non è certo piacevole esteticamente.
Sinceramente ritengo che scrivere del codice leggibile sia obbligatorio o comunque necessario per permettere successive modifiche o permettere a estranei di leggere il codice, ma questa è un regola di "educazione", non una regola dettata dal linguaggio o dal compilatore.
Ma sicuramente sei migliore di me e sinceramente non me ne può fregar di meno.
Vabbè rigira la frittata come vuoi, il senso tanto è chiaro a tutti.
La cosa fun è che insisti ancora dopo una figura a dir poco barbina, gg :sneer:
Sicuramente Axet, guarda io ho scritto questo:
Ed è alquanto chiaro, ma evidentemente sei molto bravo a scrivere codice e poco a leggere un libro, punti di vista :)
A dimostrarti ancor, come se non si fosse già capito, che l'estetica != funzionalità. Il codice di seguito, è l'inverso della radice quadrata, scritto da Carmack per Quake 3 Arena, operazione che va come un treno, sicuramente molto leggibile....
Arrogante come sei dirai che non è vero. Link : http://en.wikipedia.org/wiki/Fast_inverse_square_rootCode:
float Q_rsqrt (float number)
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
// evil floating point bit level hacking [sic]
i = * ( long * ) &y;
// what the fuck? [sic]
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
// 1st iteration
y = y * ( threehalfs - ( x2 * y * y ) );
return y;
}
Ora tornatene a spingere l'alfa nella notte.
Ma che minchia di senso ha sto reply? :rotfl: :rotfl: :rotfl: :rotfl:
Oltretutto il codice alla pagina che wiki che hai linkato è indentato correttamente, ti sei perso la formattazione con il copia-incolla :rotfl: :rotfl: :rotfl: :rotfl:
Oh cmq contento te, scrivi pure il codice come un babbuino senza spazi, indentazioni (giusto non sai che sono :sneer:) e commenti. Però hai le parentesi che delimitano i blocchi di codice, eh!
Sei sicuro che ti stai per laureare in informatica e non in veterinaria?
Mi spiace Axet, riprova :)
. L'argomento è: Scrivere codice estetico o no cambia l'effetto su un compilatore C?. Ma tu as usual devi passare sul piano personale che non centra niente, non avendo mai visto del codice scritto da me.Quote:
Sinceramente ritengo che scrivere del codice leggibile sia obbligatorio o comunque necessario per permettere successive modifiche o permettere a estranei di leggere il codice, ma questa è un regola di "educazione", non una regola dettata dal linguaggio o dal compilatore.
Ti consiglio un buon libro, potresti imparare a comprendere l'italiano. :)
Mi stupisco del fatto che essendo tu un genio dell'informatica ignori cosa sia quel codice. Ma forse io da povero agrario ti insegnerò una cosa. Un codice non è leggibile solo perchè è tabbato, ma anche perchè si capisce cosa fa.
Carmack dovette spiegare perchè usava quei numeri e cosa diavolo faceva, perchè pur essendo identato nessuno ci aveva capito na mazza.
Cristo santo :rotfl:
Scusa, che intendi con funzionalita`? Maggiore velocita`? Non mi risulta che se nel listato metti spazi, tabulazioni e commenti l'eseguibile poi e` piu` lento... Il compilatore ci passa sopra con signorilita`. O almeno dovrebbe.
Quel codice e` piu` efficiente perche` per la combinazione di istruzioni (oltre che per alcune istruzioni nello specifico), non per come e` scritto.
Sia chiaro, uno puo` scrivere il codice come cazzo gli pare, purche funzioni. Ma visto che uno dei trend che piu` si e` affermato negli ultimi decenni e` quello della riutilizzabilita` del codice, chi poi ci dovra`ravanare in quel codice potrebbe apprezzare avere il tutto indentato e ordinato a dovere. In generale, noi umani ci troviamo piu` comodi cosi`.
Poi se a te danno fastidio fronzoli come indentazione e leggibilita`, non capisco perche` perda tempo con linguaggi ad alto livello invece che dedicarti alla scrittura direttamente in codice macchina.