You are not logged in.

Computer Science in 1ère

The forum to cure all your computer anxieties

#1 15-Sep-2019 17:22:09

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

défi n°2 (nombre en déca-décimale --> nombre en binaire)

Voilà ma proposition


def int_to_bin(nb: int) -> str:
   
    if nb > 2**10-1:
        return "erreur : nombre choisi trop grand"
    x = 10
    chaîne = ""
   
    while x != 0:
       
        if nb > 2**x:
            chaîne = chaîne + "1"
            x = x - 1
            nb = nb/2
        else:
            chaîne = chaîne + "0"
            x = x - 1
   
    if nb < 1:
        chaîne = chaîne + "0"
    else:
        chaîne = chaîne + "1"
       
    return chaîne
 

Offline

#2 15-Sep-2019 22:24:03

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Il y a comme un problème....


Moi[2]: int_to_bin(13)
Python[2]: '00000001111'

Moi[3]: int_to_bin(8)
Python[3]: '00000000111'
 

Il faut un minimum tester vos fonctions....Bon, pensez aux cartes des petits enfants : je retourne ou pas la carte mais de toute façon je passe toujours à la carte suivante !

Pour éviter ce genre de désagrément, écrivez bien l'algo sur papier avant, faites-le tourner sur papier sur un exemple, passez ensuite à la traduction en programme python, écrivez un docstring avec au moins un exemple, commentez  code et testez.

Offline

#3 17-Sep-2019 14:10:57

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

voilà le programme corrigé

def int_to_bin(nb: int) -> str:
   
    if nb > 2**10-1:
        return "erreur : nombre choisi trop grand"
    x = 10
    chaîne = ""
   
    while x != 0:
       
        if nb < 2**x:
            chaîne = chaîne + "0"
            x = x - 1          
        else:
            chaîne = chaîne + "1"
            nb = nb - 2**x
            x = x - 1
   
    if nb == 1:
        chaîne = chaîne + "1"
    else:
        chaîne = chaîne + "0"
       
    return chaîne
 

Offline

#4 17-Sep-2019 15:32:13

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

OK.
Suite au cours de mardi, la fonction à améliorer est maintenant celle-ci:


def algo_sous(n: int) -> str:
    """
    Renvoie l'écriture de l'entier positif n
    en base 2 sous forme d'une chaîne de caractères
    >>> algo_sous(12)
    '1100'
    """

    assert 0 <= n, "n doit être un entier positif !"
    # TODO : enlever la limite max
    pmax = 10 # comment calculer pmax dans le cas général ?
    nb_billes_restantes = n
    liste_nb_billes_sur_carte = [2**k for k in range(pmax, -1, -1)]
    chaine_bin = ''
    for nb_billes_sur_carte in liste_nb_billes_sur_carte:
        if nb_billes_sur_carte > nb_billes_restantes:
            chaine_bin += '0'
        else:
            chaine_bin += '1'
            nb_billes_restantes -= nb_billes_sur_carte
    return chaine_bin
 

Offline

#5 18-Sep-2019 17:55:51

Pacôme Giraudeau
Member
Registered: 12-Sep-2019
Posts: 67

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Je propose de remplacer 

 pmax = 10

par

 pmax = max_p_2(n)

et de rajouter la fonction


def max_p_2(n: int) -> int:
    p_2 = 0
    while n > 2**p_2:
        p_2 += 1
    return p_2 - 1
 

Offline

#6 18-Sep-2019 20:15:23

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Bonne idée de créer une fonction auxiliaire qui d'ailleurs semble faire le boulot

Offline

#7 18-Sep-2019 21:24:35

Paul Nicou
Member
Registered: 16-Sep-2019
Posts: 3

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Renvoie l'écriture de l'entier positif n en base 2 sous forme d'une chaîne de caractères, je propose :


def algo_sous (n:  int)  -> str:
    n= input ("nombre entier à tranposer en base 2: ")
    bin("nombre entier")
    print("nombre entier")
 

Offline

#8 18-Sep-2019 21:32:09

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Ne pas oublier de mettre le code entre deux balises :


[code=python]
votre code python
[/code]
 

comme expliqué dans un post précédent (il faut lire les posts précédents)

Offline

#9 18-Sep-2019 21:35:18

Vader
Administrator
Registered: 05-Oct-2018
Posts: 220

Re: défi n°2 (nombre en déca-décimale --> nombre en binaire)

Paul Nicou wrote:

Renvoie l'écriture de l'entier positif n en base 2 sous forme d'une chaîne de caractères, je propose :


def algo_sous (n:  int)  -> str:
    n= input ("nombre entier à tranposer en base 2: ")
    bin("nombre entier")
    print("nombre entier")
 

L'idée n'est pas d'utiliser bin ! Il faut bien sûr écrire une fonction personnelle qui fait la même chose...comme dit plusieurs fois en cours !
Et les input/print, ce n'est pas ce que l'on recherche...comme expliqué en cours !

Offline

Board footer

Powered by FluxBB