Rekurencja

(1/1)

raaasuu:
Mam pytanie odnośnie starego postu:

"Napisz skrypt, który rekurencyjnie wypisuje na ekran wszystkie funkcje znajdujące się w module math i ich wartości, podstawiając dla wszystkich argumentów liczbę math.pi (jeśli ma to sens)."

Kod
#Author: Duzie_A
import inspect
import math
import warnings
 
warnings.simplefilter('ignore', DeprecationWarning)
 
for nazwa, wartosc in inspect.getmembers(math, callable):
   try:
       x = eval('math.'+nazwa+'(math.pi)')
   except TypeError, opis:
       x = eval('math.'+nazwa+'(math.pi,math.pi)')
   except:
       x = 'nie dziala dla arg PI=%.3f' %  math.pi
   finally:
       print nazwa+':', x
Jak zrobić to z rekurencją? Z góry bardzo dziękuję za pomoc :).

pigmej:
Kod
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import math, inspect, re
 
#regex na blad w postaci "TypeError: pow() takes exactly 2 arguments (1 given)"
#potrzebny do wycięcia liczby parametrów ( brak możliwości
#xxx.func_code.co_argcount dla builtin)
regex=re.compile(".+ takes exactly (?P<num>\d+) .+")
 
def recursion(list):
   #warunek końca rekurencji
   if not list:
       print "Koniec"
       return
   else:
       #usunięcie jednego elementu z listy fcji
       now=list.pop()
       try:
           #fcja z parametrem jako string
           func='math.%s(math.pi)'%now[0]
           #wykonanie fcji
           out=eval(func)
       #przechwycenie bledu
       except Exception, e:
           #wyciecie liczby parametrów
           params=re.findall(regex,str(e))
           #czy był to błąd odnośnie nieprawidłowej liczby parametrów
           if not params:
               out="nie obsluguje math.pi"
           else:
               #ustawienie odpowiedniej liczby parametrów
               params='math.pi,'*int(params[0])
               #fcja z parametrami jako string
               func='math.%s(%s)'%(now[0],params)
               #wykonanie fcji
               out=eval(func)
       #wydruk wyniku
       print "Dla %s: %s"%(func,out)
       #wywołanie rekurencyjne
       return recursion(list)
 
if __name__=="__main__":
   #start metody
   recursion(inspect.getmembers(math, callable))
To jest pewnie lekki przerost formy nad treścią. Ale jest to uniwersalna metoda ( math ma chyba max 2 argumenty zawsze ).

Opisać co po kolei i dlaczego ? Czy komentarze wystarczą?

//ps. to ty jesteś tą osobą która prosiła mnie o pomoc via gg/jabber ?

Nawigacja

[0] Indeks wiadomości