tresses.py

Created by schraf

Created on November 07, 2021

1.01 KB

Ecrire une fonction tresse ayant en paramètres le nombre de colonnes et de lignes voulues (par exemple tresse(5,7) pour 5 colonnes et 7 lignes) et qui en sortie affiche un motif dont la partie en gauche est répétée symétriquement à droite et la partie haute est répétée symétriquement en bas.

Exemples :

>> tresse(5,4)
-o-o-
ooooo
ooooo
-o-o-
>>tresse(8,5)
o------o
o-oooo-o
ooo--ooo
o-oooo-o
o------o

La version ci-dessous utilise les nombres binaires mais on peut imaginer plusieurs autres solutions.


from random import randint
from math import ceil,floor

def tresse(col,lig):
  lignes = []
  # nb de lignes et col pr la partie a repeter
  # ceil pour gerer les nombres impairs
  nblig = ceil(lig / 2)
  nbcol = ceil(col / 2)
  # chaque ligne est remplie avec un nb entre 0 et 2^nbcol
  for k in range(nblig):
   lignes.append(randint(0,2 ** nbcol))
  # on ecrit les lignes
  for l in range(lig):
   # jusqu'a la moitie puis symetrique
   data = lignes[l] if l < nblig else lignes[lig - l - 1]
   # contenu de la ligne
   gauche = ""
   for c in range(nbcol):
    # on regarde si le nb se termine par 0 ou 1 en binaire
    # ex : si data = 100111 --> 1
    gauche += "-" if data % 2 == 1 else "o"  # ou data & 1
    # on decale d'un bit vers la droite
    # 100111 // 2 --> 10011
    data //= 2  # ou data >>= 1
   # symetrique pour la partie droite
   drte = ''.join(reversed(gauche))
   # si nb de col impair, on supprime le premier caractere
   if col % 2 == 1: drte = drte[1:]
   print(gauche + drte)
   
tresse(8,5)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.