Problème pour supprimer les commentaires dans une liste

Fermé
Foutriquet - Modifié le 8 avril 2020 à 16:03
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 - 8 avril 2020 à 18:15
Bonjour,

Voici mon problème :

Je dois réussir à supprimer les commentaires commençant par des # dans ma liste de caractère. D'autre part, si la suppression des caractères créée une ligne vide, je dois supprimer la ligne. Exemple :
['M# MM', 'M'','#TEXT']] doit devenir [['M'], ['M']]
Quand il y a un #, je dois donc supprimer tout ce qu'il y a derrière jusqu'à la virgule.
Voici mon programme, je ne comprends vraiment pas comment supprimer tout ce qu'il y a derrière les # qui peuvent se situer n'importe où

def nettoyer_carte(carte):
    T=carte
    for i in range(len(T)):
        if "#" in T[i]:
            T[i]=T[i].replace(T[i:], "")
        if T[i]=="":
            T=T.remove(T[i])


python affiche : TypeError: replace() argument 1 must be str, not list


J'ai bien compris que ma ligne était fausse, mais je ne comprends vraiment pas comment faire.
Merci pour l'aide!
Configuration: Windows / Chrome 80.0.3987.149
A voir également:

1 réponse

yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479
Modifié le 8 avril 2020 à 17:24
bonjour, peux-tu donner un exemple complet, qui permet de comprendre ce qu'est carte?
tout fonctionne parfaitement quand je fais:
k=["j1j5","jj"]
nettoyer_carte(k)
0
Bonjour, oui, je suis entrain de créer un labyrinthe composé de Mur (M), d'un point d'arrivée (A), de départ (H), de mini-jeux sur le chemin( C) et de cases vide (espace).

Carte est un fichier txt que j'ai lu sous python et mis dans une liste. Voici a quoi ressemble la carte :

MMMMMMMMMM
MH MMMMM
MMMM MMMMM
MM MM MM
MM M MM
MM CMMM MM
MMMMMCM M
M M
MAMMM MMMM
MMMMMMMMMM

Avec ce programme, je la mets dans une liste :
def lire_carte(nomfichier):
lignes=""
chaine=open(nomfichier,"r").read()
lignes=chaine.split("\n")
return lignes
chaine.close()

En l'appliquant sur ma carte (qui correspond à mon labyrinthe j'obtiens ceci :
['MMMMMMMMMM', 'MH MMMMM', 'MMMM MMMMM', 'MM MM MM', 'MM M MM', 'MM CMMM MM', 'MMMMMCM M', 'M M', 'MAMMM MMMM', 'MMMMMMMMMM']

et à présent, voici la consigne que j'ai :

Créer une fonction nettoyer_carte(carte) qui prend en entrée un tableau 1D de chaînes de caractères représentant la carte et qui renvoie la carte nettoyée, selon ces règles :

Suppression des commentaires : tout ce qui suit le caractère # est supprimé (# inclus)
Toute ligne vide est supprimée (donc aussi celle qui sont devenues vides après suppression des commentaires)

Je dois donc pouvoir supprimer les éventuelles commentaires qui se sont glisser dans la "carte", exemple :

['MMMMMMM#MMM', 'MH MMMMM', 'MMMM# MMMMM', 'MM MM MM', 'MM M MM', 'MM CMMM MM', 'MMMMMCM M', 'M M', '#text', 'MAMMM MMMM', 'MMMMMMMMMM']

j'espère que j'ai été un peu plus clair...

Je suis donc bloqué sur le problème de suppression des commentaires dans la listes que j'ai créé.
0
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479 > Foutriquet
8 avril 2020 à 17:37
je ne sais pas ce que tu essaies de faire en écrivant
T[i]=T[i].replace(T[i:], "")

peut-être pourrais-tu donner un exemple?
en attendant, remplace cette ligne par
print(T[i:])
0
Foutriquet > yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024
8 avril 2020 à 17:41
J'essaye de, en gros, dès que la boucle repère un # dans la liste, il supprime tout ce qu'il y a derrière le # avec le # inclus jusqu'à la fin de la ligne

exemple :

['MM#MM', 'MM', 'M#text'] doit devenir : ['MM', 'MM', 'M'] (Les # ainsi que ce qu'il y a droite du # jusqu'à la virgule a été supprimé)
0
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479 > Foutriquet
8 avril 2020 à 17:49
as-tu essayé
print(T[i:])
?
0
Foutriquet > yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024
8 avril 2020 à 18:02
oui, print ne m'affiche rien quand je lance le programme. De plus, il ne rempace pas ce qui vient derrière le #
0