Domanda parallela all'istanza semplice

0

Sono abbastanza nuovo per Python e lo sto imparando su Lynda.com, che non sembra avere modo di fare domande sul contenuto della lezione. In un video su loop while c'è questo codice:

a, b = 0, 1
while b < 50:
    print(b)
    a, b = b, a + b

che risulta in: 1, 1, 2, 3, 5, 8, 13, 21, 34 . Per curiosità, ho modificato l'assegnazione parallela di a, b = b, a + b a due distinti assegnamenti semplici:

a = b
b = a + b

ma questo cambia il risultato in: 1, 2, 4, 8, 16, 32

La mia domanda è - a parte il formato, in che modo queste dichiarazioni sono diverse? Perché il risultato è diverso?

    
posta Daniel Cardenas 08.08.2016 - 01:09
fonte

2 risposte

2

Supponi che a sia 3 e b sia 5.

Quindi:

a, b = b, a + b

farà la stessa cosa di:

a, b = 5, 3 + 5

o

a, b = 5, 8

vale a dire. imposta a su 5 e b su 8.

Quando hai due istruzioni separate:

a = b
b = a + b

funzionano in sequenza.

Prima viene eseguito:

a = b

e ora a è 5.

Quindi viene eseguito:

b = a + b

e ora b è 5 + 5 o 10. Il risultato finale è che a è 5 e b è 10, invece di 8.

    
risposta data 08.08.2016 - 03:38
fonte
2
a = b
b = a + b

Nelle dichiarazioni precedenti, il fatto che tu stia utilizzando il valore modificato di 'a,' (che ora è 'b') nella riga successiva è probabilmente il problema.

a, b = b, a + b

Considerando che, nella dichiarazione precedente, la modifica viene eseguita dopo l'assegnazione dei valori. E il nuovo valore di 'a' non si riflette nella parte 'a + b'. Presumo che vengano create una sorta di variabili temporanee con i valori correnti di a e b. Ma non conosco il funzionamento interno di Python.

    
risposta data 08.08.2016 - 01:50
fonte

Leggi altre domande sui tag