Bonsoir j'aurais besoin d'aide sur deux exercices de Python similaires (niveau première spé NSI)

Aidez-moi, S'IL-VOUS-PLAÎT. MERCI PAR AVANCE. Et alexis7818, ne supprimez pas ce devoir, merci. говнюк

Exercice 3 : Puissance de 2 la plus proche d’un nombre entier n. Boucle while

Ecrire une fonction d’argument n, qui renvoie la puissance de 2 la plus proche de n.

Commencer par trouver la valeur de l’exposant k telle que 2k-1 <= n < 2k.

Aide : k = 1 ; tant que 2**k <= n, augmenter k de 1 ; à la sortie de la boucle on a trouvé k.

Si l’écart entre n et 2k -1 est plus petit que l’écart entre 2k et n, alors la fonction retourne 2k -1 , sinon elle retourne 2k.

Exercice 4 : Ecrire un entier n comme une somme de puissance de 2. Boucle while

S’inspirer de l’exercice 3 pour trouver comment encadrer n entre deux puissances successives de 2.

Trouver k tel que 2k -1 <= n < 2k

n s’écrit donc n = 2k -1 + reste ; afficher cette égalité.

Recommencer avec le reste, tant que le reste n’est pas nuL.
Je planceh dessus depuis un certain temps... Mais je ne trouve pas...


Sagot :

Réponse :

Bjr,

Explications :

def p(n):

   k=0

   while 2**k<=n:

       k+=1

   if n-2**(k-1)<2**k-n:

       return 2**(k-1)

   else:

       return 2**k

>>> p(532)

512

>>> p(1000)

1024

def p(n):

   R=n

   L=[]

   M=""

   while R!=0:

       k=0

       while 2**k<=R:

           k+=1

       L+=[2**(k-1)]

       R=R-2**(k-1)

   for i in range(len(L)):

       if i==0:

           M+=str(L[0])

       else:

           M+=" + "+str(L[i])

   print(n,"=",M)

>>> p(8)

8 = 8

>>> p(67)

67 = 64 + 2 + 1

>>> p(1001)

1001 = 512 + 256 + 128 + 64 + 32 + 8 + 1

>>> p(131071)

131071 = 65536 + 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1

>>>