Convertir un nombre binaire en carrés noirs et blancs

Fermé
tomthiel Messages postés 11 Date d'inscription samedi 5 février 2022 Statut Membre Dernière intervention 22 octobre 2022 - Modifié le 17 oct. 2022 à 14:50
 houpla - 1 oct. 2022 à 12:59

Bonsoir,

J'aimerais renvoyer la représentation binaire d'un nombre (par exemple 1101001),  en vue de dessiner des carrés noir et blanc à l'aide de turtle (1 pour les carrés blancs, 0 pour les carrés noirs).

Mais je ne vois pas comment procéder pour exploiter cette séquence binaire avec turtle. Voici ce que j'ai écrit :

from turtle import *

def dec_bin(nombre):
    binaire = ''
    while nombre // 2 != 0:
        binaire = str(nombre % 2) + binaire
        nombre = nombre//2
    binaire = str(nombre % 2) + binaire
    return binaire

nombre = int(input("Entrer un nombre :"))
print(dec_bin(nombre))

2 réponses

Bonjour, je ne suis pas certain d'avoir bien saisi ta demande, mais pour relier 0 à tel commande et 1 à une autre, un dictionnaire suffit.

ex. avec 2 fonctions que tu auras à remplacer par tes fonctions turtle.

def commande_0():
    print('zéro')

def commande_1():
    print('un')

cmds = {'0':commande_0, '1':commande_1}

s = '0011010'

for c in s:
    cmds[c]()
1

Bonjour,

Merci ! Pour mieux expliquer mon problème :

  • Je ne choisis pas le chiffre binaire. Il est obtenu à l'aide du code de mon premier message, qui me demande d'entrer un nombre de mon choix et qui après validation le transforme en chiffre binaire.
  • Une fois le chiffre binaire généré, je dois convertir la séquence binaire (e.g,11001100) en générant dans turtle des carrés noirs pour remplacer les 1 et des carrés blancs pour remplacer les 0. Et c'est à ce moment-là que je bloque, car je n'arrive pas à faire comprendre à turtle que les carrés doivent être le résultat de  :
def dec_bin(nombre):
    binaire = ''
    while nombre // 2 != 0:
        binaire = str(nombre % 2) + binaire
        nombre = nombre // 2
    binaire = str(nombre % 2) + binaire
    return binaire

nombre = int(input("Entrer un nombre :"))
print(dec_bin(nombre))

Je ne sais pas si c'est plus précis ^^ 

0

Bonjour, déjà, ta fonction on peut la remplacer en utilisant la fonction native de python : bin()

De plus que ce soit des couleurs ou des commandes, la méthode est identique, passer par un dict pour lier ces éléments.

Je suis nul en turtle, il est bien plus préférable d'utiliser directement tkinter qu'un bibliothèque telle que turtle n'ayant qu'un but purement pédagogique et ayant pour finalité que de faire des choses simplistes.

Donc on obtient rapidement quelque chose comme

import turtle

WINDOW_WIDTH = 400
WINDOW_HEIGHT = 400

COLORS = {'0': 'white', '1': 'black'}


def draw_square(size, color):
    turtle.color(color)
    turtle.forward(size)
    turtle.right(-90)
    turtle.forward(size)
    turtle.right(-90)
    turtle.forward(size)
    turtle.right(-90)
    turtle.forward(size)
    turtle.right(-90)


number = int(input("Entrer un nombre :"))
number_bin = str(bin(number))[2:]

turtle.screensize(canvwidth=400, canvheight=WINDOW_WIDTH, bg='lightBlue')
turtle.setworldcoordinates(-1, WINDOW_HEIGHT, WINDOW_WIDTH, -1)

square_size = 20
square_spacing = 5
turtle_pos = [10, 10]

for n in number_bin:
    turtle.up()
    turtle.goto(turtle_pos)
    turtle.pendown()
    draw_square(square_size, COLORS[n])
    turtle_pos[:] = [n + square_size + square_spacing for n in turtle_pos]

turtle.mainloop()

Évidemment, il faudra modifier pour changer la position de traçage des rectangles, et adapter leur dimensions en fonction de la longueur du binaire.

0