Forum Clubic

Fonctions mathématiques en Python

Bonsoir,

Je débute dans le langage Python, et je me suis procuré une liste d’exercices concernant ce langage, parmi laquelle deux fonctions me posent problèmes. A vrai dire, je ne sais vraiment pas comment faire. Voici les deux énoncés:

1°) Ecrire une fonction puissance(a,n) qui retourne a^n.

def puissance(a,n):
   return a*a*a*...*a (n fois? comment l'écrire?)

2°) Ecrire une fonction plus_petit_entier(a,n) qui retourne le plus petit entier k tel que a^k > n.

Merci d’avance à ceux qui pourront m’aider. :slight_smile:

1 ) pow
2 ) regarde du coté de min/max, c’est quand même façile ça.

Nous n’avons pas encore appris “pow” … :sweet: Et il faut uniquement faire avec nos connaissances actuelles.

J’aurais préféré utilise une boucle comme ceci pour le 1°)

def puissance(a,n):
   for i in range[1,n+1]
      A=a^i
   return A

Cependant, s’il s’avérait que ce soit correct, Python n’accepte pas, il me semble, le a^i (pour l’exposant). Du coup, je suis encore perdu …

Quant au 2°), je ne vois toujours pas … Mais je connais les notions min et max!

Si tu n’as pas droit à pow, dans ce cas si x puissance y alors z = xn
en gros si x = 4 et y = 2 donc 4 puissance 2 alors z = 4 * 4, de la simple factorisation.

ça ne fonctionne pas en python les a**2 ?

Pour les puissances, si ton truc avec "a**2" marche pas, il y a toujours la fonction récursive!

Un exemple en pseudo-code

J’espère que j’ai été assez précis…

Et y a même un exemple en Python sur internet qui se rapproche de mon pseudo-code (mais sans la qualité d’indentation :slight_smile: ):

Definition. Une fonction est recursive si elle s’appelle elle-meme.
def puissance ( x , n):
"Calcul x**n de façon recursive"
# Uniquement valeurs positives
if n>0:
return x * puissance (x,n-1)
else : return 1
print puissance (2,32)

(a noter que mon implémentation ne gère pas la puissance zéro et que aucune des deux ne prennent des puissances factorielles)

EDIT: Et apparemment "x**n" ça existe bien :paf:


Procedure MyPow(foo,bar)
Protected counter.l, result.l = 1

 If bar = 1
  ProcedureReturn foo
 EndIf
  
  For counter = 1 To bar
    result * foo
  Next counter
  
 ProcedureReturn result
EndProcedure

Debug MyPow(8,8)