Topic: Non riesco a far ritornare un valore con return  (Letto 67 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline DRN

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Non riesco a far ritornare un valore con return
« il: Novembre 21, 2020, 23:22 »
Ciao a tutti,mi sono appena iscritto perchè non riesco a risolvere un problema che ritengo di semplice soluzione. Abbiate pazienza...
Ho cercato di snellire il codice. il problema è che non riesco a assegnare alla variabile (o) un valore che ritorna da una funzione come spiegato nel codice.

def mazziere(o,n):
    #scelta carta del mazziere
        return o
   
def somma(m,n):
    if n==0:
        n=estrazione(n)
        m+=n
        somma(m,n)

    else:
        while True:               
            if m<=7:
                a=input("Vuoi un'altra carta? (s/n)")
                if a=='s':
                    n=estrazione(n)
                    m+=n
                if a=='n':
                    o=mazziere(o,n)
                    print("o=",o) #qui o ha un valore
                    return o
               
def estrazione(n):
    #scelta mia carta
    return n

while True:
    print("\nGIOCO DEL 7 E MEZZO")
    o=somma(m,n)
    print("o=",o) #qui mi dice none come valore di o. è questo il problema

# qui continuerà il programma
       


Non da nessun errore solo non assegna nessun valore a o (none)
Grazie a chi mi spiega

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 321
  • Punti reputazione: 0
    • Mostra profilo
Re:Non riesco a far ritornare un valore con return
« Risposta #1 il: Novembre 22, 2020, 09:52 »
Il problema è, fondamentalmente, l'articolazione dell'algoritmo, studiatelo per bene, come impostato non va proprio.

In particolare, una funzione dovrebbe limitarsi all'aspetto specifico della sua "funzionalità", mi riferisco, in particolare alla Tua funzione "somma", che dovrebbe sommare i punteggi e basta (a proposito, i punteggi di fante, cavallo e re valgono mezzo punto nel 7-1/2) nella Tua ci metti anche la logica di estrazione, oltre tutto condizionata dal valore di una variabile "n" che non vedo valorizzata da nessuna parte ... o manca un bel pezzo di codice (e così è impossibile dare un qualsiasi parere), o non è proprio definita (e così il software indicato NON può proprio funzionare, altro che dare il "return", che lo "darebbe" solo se le condizioni "m<7" ed "a==n" fossero vere, altrimenti no; ammesso cge il Tuo codice "completo" possa funzionare, trovi qui il problema.

... poi, trova la documentazione sui "parametri" delle funzioni e studiateli per bene, li utilizzi in maniera impropria.

Inoltre, copio un consiglio che da spesso chi ne sa più di me : scrivi su carta le fasi che devi realizzare nel Tuo programma, cose se effettivamente giocassi a carte, non considerare il "programma", solo il gioco ... se lo fai vedrai che le carte le da comunque il mazziere, e che sei sempre in presenza di una "estrazione", vedrai che trovi delle ridondanze nel Tuo primo pensiero ... vedrai, anche, che una estrazione è "casuale" e, magari ti andrai a vedere il modulo "random" ...

Ciao :)