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)