Seguendo un approccio incrementale allora prima scriviamo un programma che legga i dati, li immagazzini nelle nostre strutture dati (liste) e poi stampi il contenuto di ciò che ha letto. In questo modo, ci curiamo che la parte di input/output sia corretta e non la toccheremo più. In secondo luogo, possiamo notare che le equazioni precedenti si possono scomporre in
if __name__ == '__main__': numdata=input('number of data = ') i = 0 x=[] y=[] while i < numdata : # input legge anche una lista di valori separati da , d1,d2=input('give me the x,y value = ') x.append(d1) y.append(d2) i =i+1 N=numdata A = 0.0 B = 0.0 ''' # equations D=N*sumXX - (sumX)**2.0 A=(sumXX*sumY-sumX*sumXY)/D B=(N*sumXY-sumX*sumY)/D ''' print "data",x,y print "B x + A => B =",B, "A =", AA questo punto possiamo fare una importante considerazione. Siccome abbiamo bisogno della somma degli elemeti della lista e , allora è sufficiente scrivere una sola funzione da utilizzare per entrambe le liste. Possiamo quindi in modo incrementale, scrivere la nostra funzione somma e verificare che faccia quello per cui l'abbiamo definita. Da cui scriviamo la funzione
def sum(v): ''' sum(v) -> sum over the element v[i] ''' s=0 for e in v: s = s + e return float(s)e nel programma principale aggiungiamo le istruzioni
sumX=sum(x) sumY=sum(y) print 'sumX=',sumX,'sumY='sumY # to test the functionAnalogamente al caso precedente, possiamo notare che anche per sumXX e sumXY è necessaria una sola funzione, per esempio
def sum2(v1,v2): ''' sum2(v1,v2) -> sum over the v1[i]*v2[i] ''' d=len(v1) s=0 for i in range(d): s = s + v1[i]*v2[i] return float(s)di cui possiamo verificare il comportamento, inserendo nel programma le seguenti istruzioni
sumXX=sum2(x,x) sumXY=sum2(x,y) print 'sumXX=',sumXX,'sumXY='sumXY # to test the functionUna volta verificato che i singoli pezzi del nostro programma singolarmente fanno il loro dovere, allora possiamo vedere se le singole parti funzionano bene assieme, per cui il nostro programma finale sarà
def sum(v): ''' sum(v) -> sum over the element v[i] ''' s=0 for e in v: s = s + e return float(s) def sum2(v1,v2): ''' sum2(v1,v2) -> sum over the v1[i]*v2[i] ''' d=len(v1) s=0 for i in range(d): s = s + v1[i]*v2[i] return float(s) if __name__ == '__main__': numdata=input('number of data = ') i = 0 x=[] y=[] while i < numdata : d1,d2=input('give me the x,y value = ') x.append(d1) y.append(d2) i =i+1 N=numdata sumX=sum(x) sumY=sum(y) sumXX=sum2(x,x) sumXY=sum2(x,y) # equations D=N*sumXX - (sumX)**2.0 A=(sumXX*sumY-sumX*sumXY)/D B=(N*sumXY-sumX*sumY)/D print "data",x,y print "B x + A => B =",B, "A =", A