Formation I.S.N.

Miroir

Exercice : à contre-sens

Écrire une fonction python récursive :

Entrée un mot (type str).
Sortie le mot à contre-sens.

Exemples :

  • miroir --> riorim
  • burps --> sprub
  • zorglub --> bulgroz
  • définition récursive
  • un premier code
  • traceur
  • avec accumulateur
  • Si le mot n'a aucune lettre ou une seule lettre, il est déjà retourné.
  • Dans les autres cas, le miroir du mot est la concaténation de sa dernière lettre et du miroir du mot tronqué de cette dernière lettre.

def miroir(mot) :
	if len(mot) < 2 : return mot
	else : return mot[-1] + miroir(mot[:-1])
	 
   
print( miroir('zorglub') )
print( miroir('nom') )

Décomposons un peu avec des traces :


def trace(f):
	decale = 0
	def g(mot):
		nonlocal decale
		if mot == '' :  pass
		else :
			print('|  ' * decale + '|--', f.__name__, '(', mot ,') ', end = ' = ' )
			print( mot[-1], '+', f.__name__, '(', mot[:-1] ,') '  )
		decale += 1
		valeur = f(mot)
		if mot == '' : print('|  ' * decale , f.__name__, '(', mot,') =', repr(valeur) )
		else :
			print('|  ' * decale ,  mot[-1] , '+',  f.__name__, '(', mot[:-1],') =', repr(valeur), end = ' --> '  )
			print( f.__name__, '(', mot,') =', repr(valeur) )
		decale -= 1
		return valeur
	return g
 
def miroir(mot) :
	if mot == '' : return mot
	else : return mot[-1] + miroir(mot[:-1])
	 
miroir = trace(miroir)    
miroir('zorglub')

def miroir(mot,   tom = '' , m = -1 ) :
	if m == -1-len(mot) : return tom
	else : return   miroir(mot, tom + mot[m]  , m-1) 
	
print( miroir('zorglub') )

Complément Python

On peut répondre à la question du calcul du miroir du mot de la façon suivante :


def miroir(mot) :
	m = list(mot)
	m.reverse()
	return ''.join(m)
	 
 
   
print( miroir('zorglub') )