Migliorare il codice

di il
3 risposte

Migliorare il codice

# realizza il gioco dell'impiccato


print ('gioco dell\'impiccato')

domande = ['protegge l\'uovo', "quando piove danneggia le piante", "il contrario di perdere",
        "neanche una persona"]

# risposta 1
guscio = '-*--**'
print(domande[0])
print(guscio)
risposta = 0
errori = 0
while not guscio == risposta:
    risposta = input()
    if errori < 5:
          
        if errori == 5:
            print('sei morto')
            break
        
        
        if risposta == 'g':
            l = list(guscio)
            l[0] = 'g'
            guscio = "".join(l)
            print (guscio)
            

        if risposta == 'u':
            l = list(guscio)
            l[1] = 'u'
            guscio = ''.join(l)
            print(guscio)
        

        if risposta == 's':
            l = list(guscio)
            l[2] = 's'
            guscio =''.join(l)
            print(guscio)
            
        if risposta == 'c':
            l = list(guscio)
            l[3] = 'c'
            guscio =''.join(l)
            print(guscio)
            
        if risposta == 'i':
            l = list(guscio)
            l[4] = 'i'
            guscio =''.join(l)
            print(guscio)
            
        if risposta == 'o':
            l = list(guscio)
            l[5] = 'o'
            guscio =''.join(l)
            print(guscio) 
            
        
        if guscio == 'guscio':
            print('risposta esatta')

            break
        if risposta == 'guscio':
            print('risposta esatta')

            break 
  

# risposta 2
print (domande[1])
grandine = '--*--*-*'
if errori < 5:
    while not grandine == risposta:
        risposta = input()
        if risposta == 'g':
            l = list(grandine)
            l[0] = 'g'
            grandine = ''.join(l)
            print(grandine)
            
        if risposta == 'r':
            l = list(grandine)
            l[1] = 'r'
            grandine = ''.join(l)
            print(grandine)
            
        if risposta == 'a':
            l = list(grandine)
            l[2] = 'a'
            grandine = ''.join(l)
            print(grandine)
            
        if risposta == 'n':
            l = list(grandine)
            l[3] = 'n'
            l[6] = 'n'
            grandine = ''.join(l)
            print(grandine)
            
        if risposta == 'd':
            l = list(grandine)
            l[4] = 'd'
            grandine = ''.join(l)
            print(grandine)
            
            
        if risposta == 'i':
            l = list(grandine)
            l[5] = 'i'
            grandine = ''.join(l)
            print(grandine)
            
        if risposta == 'e':
            l = list(grandine)
            l[7] = 'e'
            grandine = ''.join(l)
            print(grandine)
        
        if grandine == 'grandine':
            print('risposta esatta')    
            break
        
        if risposta == 'grandine':
            print('risposta esatta')    
            break
        
  
questo è il codice per un semplice gioco dell'impiccato, mi chiedevo se fosse possibile riscrivere l'if in modo più efficiente 
specialmente perchè vorrei implementare il conteggio degli errori e seguendo questo metodo dovrei scrivere un if per ogni
lettera dell'alfabeto che non appartiene a quella parola 

3 Risposte

  • Re: Migliorare il codice

    Dipende da che livello di Python sei: se conosci lo slicing delle stringhe e i dizionari puoi fare una cosa del genere:

    # realizza il gioco dell'impiccato
    
    
    print("Gioco dell'impiccato")
    print()
    print("Q per uscire")
    print()
    
    # dizionario con item composti da definizione (usata come chiave) e risposta (usata come valore)
    # non è il massimo dell'efficienza ma va bene come esempio
    domande = {"Protegge l'uovo": "guscio",
               "Quando piove danneggia le piante": "grandine",
               "Il contrario di perdere": "vincere",
               "Neanche una persona": "nessuno"}
    
    # Iterazione su tutto il dizionario 'domande'
    for domanda in domande:
        risposta = domande[domanda]
        # Costruisco la risposta mascherata
        rispostaX = ''
        for j in range(0, len(risposta)):
            if risposta[j] in "aeiou":
                rispostaX += '*'
            else:
                rispostaX += '_'
    
        errori = 0
        print(domanda)
        while rispostaX != risposta and errori < 5:
            print(rispostaX)
            myrisp = input()
            # Sanifico un minimo l'input: tengo solo il primo carattere della risposta
            if len(myrisp) > 1:
                myrisp = myrisp[0:0]
            # Se l'utente digita 'Q' (maiuscolo) il gioco termina
            if myrisp == 'Q':
                print("Arrivederci")
                exit(0)
    		# Controllo se il mio carattere è nella risposta
            if myrisp in risposta:
            	# il carattere c'è, localizzo la posizione e sostituisco nella risposta mascherata
                for i in range(0, len(risposta)):
                    if risposta[i] == myrisp:
                        if i == 0: # inizio stringa
                            rispostaX = myrisp + rispostaX[i+1:]
                        else:
                            rispostaX = rispostaX[0:i] + myrisp + rispostaX[i+1:]
            else:
            	# il carattere non c'è aumento il contatore degli errori
                errori += 1
                print(errori)

    Ho usato alcune caratteristiche di Python, come l'iterazione sui dizionari, più l'operatore di appartenenza ‘in’ per cercare nelle stringhe.

  • Re: Migliorare il codice

    17/04/2023 - Andrea Quaglia ha scritto:


    Dipende da che livello di Python sei: se conosci lo slicing delle stringhe e i dizionari puoi fare una cosa del genere:

    # realizza il gioco dell'impiccato
    
    
    print("Gioco dell'impiccato")
    print()
    print("Q per uscire")
    print()
    
    # dizionario con item composti da definizione (usata come chiave) e risposta (usata come valore)
    # non è il massimo dell'efficienza ma va bene come esempio
    domande = {"Protegge l'uovo": "guscio",
               "Quando piove danneggia le piante": "grandine",
               "Il contrario di perdere": "vincere",
               "Neanche una persona": "nessuno"}
    
    # Iterazione su tutto il dizionario 'domande'
    for domanda in domande:
        risposta = domande[domanda]
        # Costruisco la risposta mascherata
        rispostaX = ''
        for j in range(0, len(risposta)):
            if risposta[j] in "aeiou":
                rispostaX += '*'
            else:
                rispostaX += '_'
    
        errori = 0
        print(domanda)
        while rispostaX != risposta and errori < 5:
            print(rispostaX)
            myrisp = input()
            # Sanifico un minimo l'input: tengo solo il primo carattere della risposta
            if len(myrisp) > 1:
                myrisp = myrisp[0:0]
            # Se l'utente digita 'Q' (maiuscolo) il gioco termina
            if myrisp == 'Q':
                print("Arrivederci")
                exit(0)
    		# Controllo se il mio carattere è nella risposta
            if myrisp in risposta:
            	# il carattere c'è, localizzo la posizione e sostituisco nella risposta mascherata
                for i in range(0, len(risposta)):
                    if risposta[i] == myrisp:
                        if i == 0: # inizio stringa
                            rispostaX = myrisp + rispostaX[i+1:]
                        else:
                            rispostaX = rispostaX[0:i] + myrisp + rispostaX[i+1:]
            else:
            	# il carattere non c'è aumento il contatore degli errori
                errori += 1
                print(errori)

    Ho usato alcune caratteristiche di Python, come l'iterazione sui dizionari, più l'operatore di appartenenza ‘in’ per cercare nelle stringhe.

    Grazie mille per la risposta, ancora non conosco molto di quello che hai detto, sto usando il libro di Paolo Aliverti “python pratico” per imparare, non so se lo conosci o se lo reputi valido, in caso contrario potresti consigliarmi qualche libro di testo o corso valido ? ho provato a seguire corsi su youtube ma se non ho esercizi con cui fare pratica faccio molta fatica ad assimilare le nozioni 

  • Re: Migliorare il codice

    Non conosco quel libro. Io ho usato “Dive into Python3” (reperibile online anche tradotto), più “Python 3 Object Oriented Programming” e ovviamente il tutorial di docs.python.org. Poi tanti esperimenti.

    I corsi sul tubo hanno una valenza bassa, meglio fare dei videocorsi sulle piattaforme di e-learning (Coursera, ad esempio, o anche Udemy, ma quest'ultimo ha il difetto che i corsi non sono erogati da docenti professionisti), che almeno ti mettono a disposizione degli strumenti per fare esercizi e valutare il tuo grado di apprendimento.

    Qui trovi un elenco di libri liberamente scaricabili.

Devi accedere o registrarti per scrivere nel forum
3 risposte