Bonjour à tous,
J'ai débuté la programmation il y a quelques mois (Python).
J'ai commencé par le cours de LeGoff puis j'ai enchainé sur Swinnen. Je suis un brillant juriste ( ) mais en programmation c'est une autre paire de manche …
Je suis bloqué depuis quelques jours sur un problème que je n'arrive pas à résoudre malgré mes recherches.
Il s'agit de remplacer par des caractères ( des petites * ) les lettres d'une liste.
Ex: Liste_non_etoilee ['a','b','c',d'] => Liste_etoilee = ['*','*','*','*'] Liste_non_etoilee est dans le corps de mon programme. C'est je pense ce que l'on appelle une variable Globale ( ?). Liste_non_etoilee est censée est un paramètre de la fonction mot_etoile
La première version de ma fonction, appelée par la suite dans le corps de mon programme était:
1 2 3 4 5 6 7 8 | def mot_etoile (X): n=0 a=1 while a <= len (X): X [n] = '*' n +=1 a+=1 return X |
Lors de l'utilisation de ma fonction dans le corps de mon programme j'écris donc MAVARIABLE = mot_etoile (Liste_non_etoilee) MAVARIABLE fait son job elle me renvoie ma liste avec les étoiles Sauf que ma variable Globale (?) Liste_non_etoilee me renvoie elle aussi des étoiles quand je la print …
J'ai cherché et j'ai trouvé une solution
1 2 3 4 5 6 7 8 9 10 11 12 | def mot_etoile (X): n=0 a=1 #création d'une liste vide pour éviter de changer X liste_sep = [] for i in X: liste_sep.append (i) while a <= len (X): liste_sep [n] = '*' n +=1 a+=1 return liste_sep |
Et la, formidable cela marche quand j'appelle ma fonction dans le corps elle me renvoie bien mes petites étoiles et ma variable globale (?) Liste_non_etoilee reste égale à elle même.
Sauf que je n'ai pas bien compris pourquoi. D'après ce que je sais :
- Une variable globale ne peut être changée de l'intérieur d'une fonction
- SAUF si on utilise une méthode sur cette variable au sein de la fonction -Or je n'ai pas utilisé de méthode ( ?) dans la première version de la fonction … Si ?
J'ai également esssayé une solution intermédiaire qui elle non plus ne marche pas puisque ma variable globale est aussi changée :
1 2 3 4 5 6 7 8 9 10 | def mot_etoile (X): n=0 a=1 #Création d'une variable écran var_écran = X while a <= len (X): var_écran [n] = '*' n +=1 a+=1 return var_écran |
Et la, c'est encore plus sombre, quand je teste ( print ( Liste_non_etoilee )
) elle est étoiléé … Mais OUIALLE ? J'ai pourtant mis une variable "écran" ?
J'espère avoir été suffisamment clair, merci d'avance pour vos lumières …