Topic: (RISOLTO) Errore ultima istruzione per indovina numero  (Letto 334 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Rasjah

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Ciao a tutti,

Sono un novellino di Python, ho appena iniziato a programmare e ho fatto un semplice programma, per indovinare un numero.
Tutto funzionante, tranne l'ultima istruzione che mi stampa "bravo il numero era".. e quindi NON mi soddisfa l'eguaglianza..!!

Dove sbaglio !!! Grazie per un eventuale aiuto !!! :) :) :)



import random
incognita=random.randint(1,20)
print(incognita)
noto = int(input("metti numero: "))

while incognita != noto:
    if noto > incognita:
        print("ALTO")
        noto = int(input("Provaci ancora !! "))
    elif noto < incognita :
            print("MINORE")
            noto = int(input("Provaci ancora !! "))
    else:       
           print("bravo il numero era:", incognita)



« Ultima modifica: Luglio 05, 2018, 08:54 da Rasjah »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:Errore ultima istruzione per indovina numero
« Risposta #1 il: Luglio 04, 2018, 18:26 »
Per forza: se ci pensi, a ogni ciclo per prima cosa si verifica se "incognita" è uguale a "noto": se è uguale, si esce subito dal ciclo, e quindi non si fa in tempo a stampare il tuo bel messaggio di congratulazioni.

Il novantanove per cento di questi misteri si risolve prendendo carta e penna e provando a mappare esattamente che cosa fa il codice davvero, riga per riga, con il massimo scrupolo possibile, senza saltare nessun caso, senza dare per scontato che il codice si comporterà come tu hai immaginato che si dovrebbe comportare.

Offline Rasjah

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:Errore ultima istruzione per indovina numero
« Risposta #2 il: Luglio 05, 2018, 07:36 »
Certo RicPol,

Quello lo avevo capito anch'io che all'istruzione while, si verifica un True, e quindi il programma termina... Ma siccome ho anche provato altre "varianti", senza venirne a capo, mi chiedevo se commettevo un macro errore, volevo sapere da qualcuno se c'era una soluzione !!! grazie comunque...

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:Errore ultima istruzione per indovina numero
« Risposta #3 il: Luglio 05, 2018, 08:32 »
> Quello lo avevo capito anch'io

Uhm, certo.

>  se c'era una soluzione

La soluzione è prendere carta e penna e ingegnerizzare i tuoi cicli.
Se "avevi già capito" (certamente) che esce dal ciclo *s*e*n*z*a* eseguire quell'ultima istruzione, allora direi che hai due possibilità (con carta e penna):
- o eviti che esca dal ciclo in quel modo
- o metti quell'ultima istruzione fuori dal ciclo.

Punti bonus se le sperimenti entrambe e rifletti sui pro e sui contro.

Offline Rasjah

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:Errore ultima istruzione per indovina numero
« Risposta #4 il: Luglio 05, 2018, 08:51 »
Cercavo un aiuto concreto :(  comunque grazie !!!
Ho risolto brillantemente con un ciclo FOR..che mi da anche i tentativi !!
adesso devo "raffinarlo"...alla prossima   :) :)


import random
incognita=random.randint(1,100)

noto = int(input("metti numero: "))
tentativi=10

cicli=range(1,tentativi)

for x in cicli:
    if noto > incognita:
        print("troppo ALTO")
        print("tentativi",x)     
        noto = int(input("Provaci ancora !! "))
             
    elif noto < incognita :
            print("troppo BASSO")
            print("tentativi",x)
            noto = int(input("Provaci ancora !! "))
    else:
        print("bravo il numero era:", incognita)
        break

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:(RISOLTO) Errore ultima istruzione per indovina numero
« Risposta #5 il: Luglio 05, 2018, 09:32 »
> Cercavo un aiuto concreto

Beh insomma, per cose *così* semplici la ricettina pronta è veramente un po' eccessiva.

> Ho risolto brillantemente con un ciclo FOR

"Brillantemente" non è il temine che mi verrebbe subito. Però questa soluzione potrebbe condurti a un pensiero: adesso dovrebbe essere possibile eliminare il primo input fuori dal ciclo, vero? E ingegnerizzare meglio il ciclo stesso in modo da evitare ripetizioni, vero? E perché adesso è possibile, e prima non lo era? E perché ci interessa eliminare l'input fuori dal ciclo, se possiamo?

Detto questo, non scomoderei un "for" per questo esercizio: visto che hai già capito che cosa fa "break", usa piuttosto un ciclo "while True" con un contatore e due break. E osserva che l'obbiettivo di ridurre il numero degli input si può ottenere anche così. Da un punto di vista idiomatico credo che si trovino entrambe le varianti con la stessa frequenza, più o meno. Da un punto di vista didattico, visto che stavi lavorando su "while", continua a lavorare su "while" e vedi che cosa ne cavi fuori.

Offline Rasjah

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:(RISOLTO) Errore ultima istruzione per indovina numero
« Risposta #6 il: Luglio 05, 2018, 09:44 »
Beh...magari invece di fare filosofia digitale, caro RicPol...postare un esempio...visto che sei bravo!!?...e la chiudo qui....Passo e chiudo 😊😊😊😊

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:(RISOLTO) Errore ultima istruzione per indovina numero
« Risposta #7 il: Luglio 05, 2018, 10:53 »
Boh, come vuoi. Non sono io che devo imparare. (E incidentalmente, auguri a chi dovesse insegnarti).