El nombre e¶
El nombre \(e\) es pot definir mitjançant la sèrie infinita següent:
\(e = \sum_{i=0}^\infty {1 \over i!} = {1 \over 0!} + {1 \over 1!} + {1 \over 2!} + {1 \over 3!} + {1 \over 4!} + \cdots\)
Deseu el generador i les funcions següents al fitxer nombre_e.py.
Dissenyeu el generador
e_termesque genera els termes de la sèrie infinita anterior, és a dir, \({1 \over 0!}\), \({1 \over 1!}\), \({1 \over 2!}\), i així successivament. Per exemple,>>> from nombre_e import e_termes >>> it = e_termes() >>> print '%.5g' % it.next() 1 >>> print '%.5g' % it.next() 1 >>> print '%.5g' % it.next() 0.5 >>> print '%.5g' % it.next() 0.16667 >>> print '%.5g' % it.next() 0.041667 >>> print '%.5g' % it.next() 0.0083333 >>> print '%.5g' % it.next() 0.0013889 >>> print '%.5g' % it.next() 0.00019841 >>> print '%.5g' % it.next() 2.4802e-05 >>> print '%.5g' % it.next() 2.7557e-06 >>> print '%.5g' % it.next() 2.7557e-07
Els apartats següents d’aquest problema s’han de resoldre usant les utilitats de itertools i les funcions predefinides, però sense utilitzar iteracions; doncs, està prohibit usar while o for en el cos de les funcions que dissenyeu.
Dissenyeu la funció
e_serie_nque donat un nombre naturalncalcula la sèrie anterior fins al terme n-éssim inclòs, és a dir, \(S_{n}\): \(S_n = \sum_{i=0}^n {1 \over i!}\)Per exemple,
>>> from nombre_e import e_serie_n >>> print "%.5g" % e_serie_n(0) 1 >>> print "%.5g" % e_serie_n(1) 2 >>> print "%.5g" % e_serie_n(2) 2.5 >>> print "%.5g" % e_serie_n(3) 2.6667 >>> print "%.5g" % e_serie_n(4) 2.7083 >>> print "%.5g" % e_serie_n(5) 2.7167 >>> print "%.5g" % e_serie_n(6) 2.7181 >>> print "%.5g" % e_serie_n(7) 2.7183 >>> print "%.5g" % e_serie_n(8) 2.7183
Per aquest apartat, islice us pot resultar útil.
Dissenyeu la funció
e_serie_epsque donat l’error admissible \(\epsilon\) calcula la sèrie anterior formada per tots els termes més grans que \(\epsilon\), és a dir, \(S_{n}\) tal que \({1 \over n!} {>} \epsilon\) i \({1 \over (n+1)!} \leq \epsilon\). Per exemple,>>> from nombre_e import e_serie_eps >>> print "%.5g" % e_serie_eps(1e-3) 2.7181 >>> print "%.5g" % e_serie_eps(1e-4) 2.7183 >>> print "%.5g" % e_serie_eps(1e-5) 2.7183 >>> print "%.8g" % e_serie_eps(1e-5) 2.7182788 >>> print "%.8g" % e_serie_eps(1e-6) 2.7182815 >>> print "%.8g" % e_serie_eps(1e-7) 2.7182818 >>> print "%.8g" % e_serie_eps(1e-8) 2.7182818
Per aquest apartat, takewhile us pot resultar útil.