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)