Domanda [BEGINNER]Intoppo per un programmatore alle prime armi....

Stato
Discussione chiusa ad ulteriori risposte.

AINDN

Utente Silver
20 Giugno 2013
58
11
2
59
Salve,
ho cominciato da poco a imparare il mio primo linguaggio di programmazione che sarebbe il python 2.x con i videoguida youtube di NiktorTheNat, ho fatto un piccolo programmino di quiz vedendo il suo video ma ho un problemuzzo, eccovi il codice :
Codice:
risp=''punti=0
nome=''
while nome=='':
    nome=raw_input('Scrivi il tuo nick/nome. ')
print'Ciao',nome,',benvenuto al quiz.'
risp=raw_input("Quale è la capitale della Francia? ")
if risp=='Parigi':
    punti=punti+10
risp=raw_input("Quale è la capitale d'Italia? ")
if risp=='Roma':
    punti=punti+10
risp=raw_input('Quale è la capitale della Spagna? ')
if risp=='Madrid':
    punti=punti+10
print'Il tuo punteggio è',punti,'su 30.'
il probelama è che per esempio io avevo messo così sui if risp=='xxx'or'xxx'or'xxx': per far si che l'utente anche se sbaglia la forma del testo che esso sia lo stesso accettata come risposta in modo che se scrivo madrid=risp giusta ma anche MADRID=risp giusta perchè nel codice di sopra non è affatto così.
Codice:
if risp=='Madrid'or'madrid'or'MADRID':
    punti=punti+10
ma dopo quando lo eseguivo mi faceva cose ben diverse AIUTTOO sono alle prime armi !!!
 
PHP:
if risp=='Madrid'or'madrid'or'MADRID':
    punti=punti+10
L'errrore è il seguente:
l'interprete python considera 3 le condizioni che possono rendere vera la condizione "if". Queste tre condizioni sono:
PHP:
risp=='Madrid'
'madrid'
'MADRID'
e non, come si potrebbe erroneamente pensare:
PHP:
risp=='Madrid'
risp=='madrid'
risp=='MADRID'
Siccome una stringa non vuota, convertita in un valore booleano, è vera, le stringhe 'madrid' e 'MADRID' fanno si che la condizione venga sempre soddisfatta, assegnando all'utente 10 punti qualunque sia la risposta inserita.
Per risolvere questo problema ci sono varie strade, eccone due:
PHP:
if risp=='Madrid' or risp=='madrid'or risp=='MADRID':
    punti=punti+10

PHP:
if risp in ('Madrid', 'madrid', 'MADRID'):
    punti=punti+10
Per il primo metodo non credo ci sia bisogno di spiegazioni. Nel secondo viene controllato se risp è presente nell'elenco di nomi che gli viene fornito.
 
  • Mi piace
Reazioni: kronozfx
L'errore più grave è proprio iniziare con NiktorTheNat.
Per quanto Niktor ci metta tutto l'impegno e la passione di questo mondo, non ha assolutamente le competenze per insegnare programmazione. Senza esagerare, almeno il 90% di ciò che dice è completamente errato o impreciso. Inoltre seguire dei video-tutorial per la programmazione è già assurdo di per se visto che per la programmazione l'unica cosa da vedere solo codici (e per questo basta un testo scritto).
Prendi un manuale di programmazione e studialo. è l'unico modo per impararla. Dimentica l'uso di video-tutorial o altra robaccia simile. Se non hai intenzione di fare così, abbandona la programmazione: la programmazione deve essere studiata.
 
L'errore più grave è proprio iniziare con NiktorTheNat.
Per quanto Niktor ci metta tutto l'impegno e la passione di questo mondo, non ha assolutamente le competenze per insegnare programmazione. Senza esagerare, almeno il 90% di ciò che dice è completamente errato o impreciso. Inoltre seguire dei video-tutorial per la programmazione è già assurdo di per se visto che per la programmazione l'unica cosa da vedere solo codici (e per questo basta un testo scritto).
Prendi un manuale di programmazione e studialo. è l'unico modo per impararla. Dimentica l'uso di video-tutorial o altra robaccia simile. Se non hai intenzione di fare così, abbandona la programmazione: la programmazione deve essere studiata.
Ok,grazie per la dritta ma mi potresti perfavore consigliare un buon libro o testo online?(insomma, qualsiasi documentazione adatta per un novellino come me)perfavoreee!

- - - Updated - - -

PHP:
if risp=='Madrid'or'madrid'or'MADRID':
    punti=punti+10
L'errrore è il seguente:
l'interprete python considera 3 le condizioni che possono rendere vera la condizione "if". Queste tre condizioni sono:
PHP:
risp=='Madrid'
'madrid'
'MADRID'
e non, come si potrebbe erroneamente pensare:
PHP:
risp=='Madrid'
risp=='madrid'
risp=='MADRID'
Siccome una stringa non vuota, convertita in un valore booleano, è vera, le stringhe 'madrid' e 'MADRID' fanno si che la condizione venga sempre soddisfatta, assegnando all'utente 10 punti qualunque sia la risposta inserita.
Per risolvere questo problema ci sono varie strade, eccone due:
PHP:
if risp=='Madrid' or risp=='madrid'or risp=='MADRID':
    punti=punti+10

PHP:
if risp in ('Madrid', 'madrid', 'MADRID'):
    punti=punti+10
Per il primo metodo non credo ci sia bisogno di spiegazioni. Nel secondo viene controllato se risp è presente nell'elenco di nomi che gli viene fornito.
WOOOW grazie per la spiegazione :O adesso potrò sistemare un paio di cosuccie per semplificare altri miei piccoli programmuzzi....
Mareck, non è che anche tu avresti della documentazione su come imparare il python per un programmatore alle prime armi?
 
Stato
Discussione chiusa ad ulteriori risposte.