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)