You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
5.2 KiB
144 lines
5.2 KiB
2 days ago
|
"""
|
||
|
Ce programme permet de lire le fichier "ma_rue.txt" et de le convertir de façon à pouvoir afficher une rue correspondant
|
||
|
aux informations écrites (si les règles du "README.txt" sont respectées)
|
||
|
"""
|
||
|
|
||
|
|
||
|
# Importation
|
||
|
|
||
|
from rue import couleur_aleatoire,couleur_aleatoire_fonce,dessiner_rue_decrite
|
||
|
import random as rd
|
||
|
obj_rue = open('ma_rue.txt', 'r', encoding="utf-8")
|
||
|
|
||
|
|
||
|
# Constantes
|
||
|
|
||
|
LIGNE = []
|
||
|
for a in obj_rue:
|
||
|
LIGNE.append(a)
|
||
|
NB = int(LIGNE[0][0])
|
||
|
COULEURS = ('yellow', 'magenta', 'green', 'cyan')
|
||
|
obj_rue.close()
|
||
|
|
||
|
# Fonction privées
|
||
|
|
||
|
def lire_ligne_liste(l) -> list :
|
||
|
"""
|
||
|
Transforme une ligne de description d'un immeuble en une liste formatée pour générer ses attributs.
|
||
|
|
||
|
Cette fonction prend en entrée une chaîne représentant les caractéristiques d'un immeuble, séparées par ' - ', et
|
||
|
retourne une liste contenant ces attributs. Les valeurs incorrectes ou non spécifiées sont remplacées par "aléatoire".
|
||
|
|
||
|
Paramètres:
|
||
|
l (str): La ligne de description de l'immeuble sous forme de chaîne.
|
||
|
|
||
|
Retourne:
|
||
|
list: Une liste contenant les attributs de l'immeuble dans l'ordre suivant :
|
||
|
- Couleur de la façade
|
||
|
- Nombre d'étages
|
||
|
- Position de la porte (0 = gauche, 1 = milieu, 2 = droite)
|
||
|
- Type de toit (False = rectangle, True = triangle)
|
||
|
- Type de fenêtre (0 = simple, 1 = balcon, 2 = carreaux)
|
||
|
Les valeurs non spécifiées ou incorrectes sont remplacées par "aléatoire".
|
||
|
"""
|
||
|
l = l.split(' - ')
|
||
|
if l[0] not in COULEURS :
|
||
|
l[0] = 'aléatoire'
|
||
|
|
||
|
if type(int(l[1])) != int :
|
||
|
l[1] = 'aléatoire'
|
||
|
else :
|
||
|
l[1] = int(l[1])
|
||
|
|
||
|
if l[2] == "gauche" :
|
||
|
l[2] = 0
|
||
|
elif l[2] == "mileu" :
|
||
|
l[2] = 1
|
||
|
elif l[2] == 'droite' :
|
||
|
l[2] = 2
|
||
|
else :
|
||
|
l[2] = 'aléatoire'
|
||
|
|
||
|
if l[3] == 'lisse' :
|
||
|
l[3] = False
|
||
|
elif l[3] == 'pointu' :
|
||
|
l[3] = True
|
||
|
else :
|
||
|
l[3] = 'aléatoire'
|
||
|
|
||
|
if l[4] == 'careaux\n' or l[4] == 'careaux' :
|
||
|
l[4] = 2
|
||
|
elif l[4] == 'balcon\n' or l[4] == 'balcon' :
|
||
|
l[4] = 1
|
||
|
elif l[4] == 'simple\n' or l[4] == 'simple' :
|
||
|
l[4] = 0
|
||
|
else :
|
||
|
l[4] = 'aléatoire'
|
||
|
|
||
|
return l
|
||
|
|
||
|
#Fonctions Publiques
|
||
|
def lire_rue() -> list :
|
||
|
"""
|
||
|
Génère la description complète d'une rue en créant une liste de dictionnaires, chaque dictionnaire représentant un immeuble.
|
||
|
|
||
|
Cette fonction utilise les données de la liste LIGNE pour lire les attributs de chaque immeuble. Lorsqu'une valeur
|
||
|
n'est pas définie, elle est remplacée par une valeur par défaut ou générée aléatoirement.
|
||
|
|
||
|
Retourne:
|
||
|
list: Une liste de dictionnaires, chaque dictionnaire contient les informations de l'immeuble suivant :
|
||
|
- 'couleur_facade' (str) : couleur de la façade
|
||
|
- 'numero' (int) : numéro de l'immeuble dans la rue
|
||
|
- 'nb_etage' (int) : nombre d'étages (entre 1 et 5 par défaut)
|
||
|
- 'pos_porte' (int) : position de la porte (0 = gauche, 1 = milieu, 2 = droite)
|
||
|
- 'couleur_porte' (str) : couleur de la porte
|
||
|
- 'type_fenetre' (list) : type de chaque fenêtre (0 = normal, 1 = balcon, 2 = carreaux)
|
||
|
- 'type_toit' (bool) : forme du toit (False = rectangle, True = triangle)
|
||
|
"""
|
||
|
rue = []
|
||
|
for i in range(NB) :
|
||
|
informations = {}
|
||
|
liste = lire_ligne_liste(LIGNE[i+1])
|
||
|
#info immeuble
|
||
|
if liste[0] != 'aléatoire' :
|
||
|
informations['couleur_facade'] = liste[0]
|
||
|
else :
|
||
|
informations['couleur_facade'] = couleur_aleatoire()
|
||
|
informations['numero'] = i
|
||
|
if liste[1] != 'aléatoire' :
|
||
|
informations['nb_etage'] = liste[1]
|
||
|
else :
|
||
|
informations['nb_etage'] = rd.randint(1,5)
|
||
|
|
||
|
#info porte
|
||
|
if liste[2] != 'aléatoire' :
|
||
|
informations['pos_porte'] = liste[2]
|
||
|
else :
|
||
|
informations['pos_porte'] = rd.randint(0,2)
|
||
|
informations['couleur_porte'] = couleur_aleatoire_fonce()
|
||
|
|
||
|
#info fenetre
|
||
|
informations['type_fenetre'] = []
|
||
|
if liste[4] == 2 :
|
||
|
for _ in range(int(informations['nb_etage'])*3) :
|
||
|
informations['type_fenetre'].append(2) # 0 -> normal, 1 -> balcon, 2 -> carreaux
|
||
|
elif liste[4] == 1 :
|
||
|
for _ in range(int(informations['nb_etage'])*3) :
|
||
|
informations['type_fenetre'].append(1) # 0 -> normal, 1 -> balcon, 2 -> carreaux
|
||
|
elif liste[4] == 0 :
|
||
|
for _ in range(int(informations['nb_etage'])*3) :
|
||
|
informations['type_fenetre'].append(0) # 0 -> normal, 1 -> balcon, 2 -> carreaux
|
||
|
else :
|
||
|
for _ in range(int(informations['nb_etage'])*3) :
|
||
|
informations['type_fenetre'].append(rd.randint(0,2)) # 0 -> normal, 1 -> balcon, 2 -> carreaux
|
||
|
|
||
|
#info toit
|
||
|
if liste[3] != 'aléatoire' :
|
||
|
informations['type_toit'] = liste[3] # False -> rectangle, True -> triangle
|
||
|
else :
|
||
|
informations['type_toit'] = bool(rd.randint(0,1))
|
||
|
rue.append(informations)
|
||
|
return rue
|
||
|
|
||
|
|
||
|
dessiner_rue_decrite(lire_rue())
|