Domanda Problema codice

Stato
Discussione chiusa ad ulteriori risposte.

Hemek

Utente Silver
9 Novembre 2014
57
14
9
61
Ultima modifica:
Ciao,
Ho un problema con il funzionamento di una calcolatrice scritta in Python, ovvero vorrei che il messaggio "Il risultato è: --" non viene visualizzato se il numero dell'operazione non è valido, ecco il codice:

nbq8v9.png
 
Ultima modifica:
Ti sarei grato se postassi direttamente il sorgente anziché un' immagine di quest'ultimo.
Inizio facendo una piccola osservazione, non prenderla come una critica:

L' istruzione "loop = int(loop)" non ha alcun senso, infatti non fai altro che convertire loop (1, un numero intero) in un numero intero :\

Per il tuo problema, invece, basta aggiungere break nel corpo dell'else, in parole povere, quest'istruzione (break) esce immediatamente dal ciclo e non esegue le istruzioni restanti nel ciclo stesso.
 
  • Mi piace
Reazioni: uerreelle
Grazie mille per la spiegazione ora funziona, e scusa per l'immagine, ma non so perché quando incollo un codice dall' IDLE di python in qualunque campo di testo non lo incolla come dovrebbe.
 
Se metti break però esce dal loop, un'alternativa sarebbe mettere il print all'interno di ogni if [MENTION=215521]Hemek[/MENTION]
 
  • Mi piace
Reazioni: Hemek
Ultima modifica:
Mi permetterebbe anche di poter ripetere l'operazione all'infinito giusto?
 
Se metti break però esce dal loop, un'alternativa sarebbe mettere il print all'interno di ogni if [MENTION=215521]Hemek[/MENTION]
A me sembra che il break faccia a caso suo in questo caso, se poi vuole che l' utente inserisca primo numero, secondo numero ed operazione all'infinito, deve solo aggiungere un while ad inizio programma, e quel break continuerebbe ad andare bene.

Inoltre mettere un print in ogni if non mi sembra una scelta cosi geniale, anzi secondo me andrebbe ad allungare, inutilmente, il programma.
 
  • Mi piace
Reazioni: Hemek
Una domanda, esistono condizioni che vengono sempre verificate? Mi spiego meglio:

Nel C abbiamo il while("TRUE"), ovvero una condizione che viene verificata all'infinito, in Python è possibile una cosa del genere? Oppure l'unico metodo è quello che ho utilizzato io?
 
Una domanda, esistono condizioni che vengono sempre verificate? Mi spiego meglio:

Nel C abbiamo il while("TRUE"), ovvero una condizione che viene verificata all'infinito, in Python è possibile una cosa del genere? Oppure l'unico metodo è quello che ho utilizzato io?
Se vuoi che un operazione sia ripetuta all'infinito puoi fare:

while True:
operazioni
 
Mi permetterebbe anche di poter ripetere l'operazione all'infinito giusto?

Sì.

A me sembra che il break faccia a caso suo in questo caso, se poi vuole che l' utente inserisca primo numero, secondo numero ed operazione all'infinito, deve solo aggiungere un while ad inizio programma, e quel break continuerebbe ad andare bene.

Inoltre mettere un print in ogni if non mi sembra una scelta cosi geniale, anzi secondo me andrebbe ad allungare, inutilmente, il programma.

Siccome il suo obbiettivo era ripeterlo gli ho dato una delle tante soluzioni anche se di sicuro non è la migliore. Ma neanche mettere un doppio while è molto geniale.
 
  • Mi piace
Reazioni: TheSeeker
Ultima modifica:
pfff, metti un contatore e una variabile che conta le volte che il programma si ripete in modo da creare un ciclo while/dowhile che ripete il tutto o fa finire il programma secondo la condizione (se ripeto, vera) c<n.
Poi toglierei tutti quei if e userei uno switch(operazione), per ogni case, a seconda del valore 1<valore<4 esegue un operazione.
ho letto che state discutendo sul break, non ho ben letto tutto però il break vi manda alla fine dell'esecuzione del ciclo e non del programma quindi se lo metto sotto il case 1 che è associato all'addizione, dopo l'addizione esce dal ciclo e torna al mio while/dowhile (che ho consigliato qualche riga sopra); se non metti break il contatore del case si incrementa ++, quindi case 1, dopo l'esecuzione dei calcoli passerà subito a case 2 e così via finchè non finiranno i case. pertanto devi utilizzare default, che comprende qualsiasi valore non dichiarato nei case ;)

saluti, ciao @AdvancedTechnology


ps. ti aggiungo un esempio fatto da me ora, in C

12d2536ddb93811b4b9d2177d19f0c77.png
Codice:
#include <stdio.h>


int main()
{
 int n, num1, num2, operazione, risultato;
 int c = 0;
 
 printf("Numero di esecuzioni: ");
 scanf("%d", &n);
 
 do{
     printf("Inserisci num1: ");
     scanf("%d", &num1);
     printf("Inserisci num2: ");
     scanf("%d", &num2);
     printf("Operazione <1:add,2:sottr..>: ");
     scanf("%d", &operazione);
     switch(operazione)
     {
                       case 1:
                            risultato = num1+num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 2:
                            risultato = num1-num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 3:
                            risultato = num1*num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 4:
                            risultato = num1/num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;                                                        
                       default: //nel caso operazione non è compresa tra 1 e 4..
                            printf("Operazione non valida!\n");
                            break;                                
     }           
 }while(c!=n);
 
 getchar();   
}
 
pfff, metti un contatore e una variabile che conta le volte che il programma si ripete in modo da creare un ciclo while/dowhile che ripete il tutto o fa finire il programma secondo la condizione (se ripeto, vera) c<n.
Poi toglierei tutti quei if e userei uno switch(operazione), per ogni case, a seconda del valore 1<valore<4 esegue un operazione.
ho letto che state discutendo sul break, non ho ben letto tutto però il break vi manda alla fine dell'esecuzione del ciclo e non del programma quindi se lo metto sotto il case 1 che è associato all'addizione, dopo l'addizione esce dal ciclo e torna al mio while/dowhile (che ho consigliato qualche riga sopra); se non metti break il contatore del case si incrementa ++, quindi case 1, dopo l'esecuzione dei calcoli passerà subito a case 2 e così via finchè non finiranno i case. pertanto devi utilizzare default, che comprende qualsiasi valore non dichiarato nei case ;)

saluti, ciao @AdvancedTechnology


ps. ti aggiungo un esempio fatto da me ora, in C

12d2536ddb93811b4b9d2177d19f0c77.png
Codice:
#include <stdio.h>


int main()
{
 int n, num1, num2, operazione, risultato;
 int c = 0;
 
 printf("Numero di esecuzioni: ");
 scanf("%d", &n);
 
 do{
     printf("Inserisci num1: ");
     scanf("%d", &num1);
     printf("Inserisci num2: ");
     scanf("%d", &num2);
     printf("Operazione <1:add,2:sottr..>: ");
     scanf("%d", &operazione);
     switch(operazione)
     {
                       case 1:
                            risultato = num1+num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 2:
                            risultato = num1-num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 3:
                            risultato = num1*num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;
                       case 4:
                            risultato = num1/num2;
                            printf("risultato: %d\n", risultato);
                            c++;
                            break;                                                        
                       default: //nel caso operazione non è compresa tra 1 e 4..
                            printf("Operazione non valida!\n");
                            break;                                
     }           
 }while(c!=n);
 
 getchar();   
}
In Python non esiste il costrutto switch...
 
  • Mi piace
Reazioni: examinedcastle
Stato
Discussione chiusa ad ulteriori risposte.