Algorithme qui place des étoiles entre chaque caractères [Résolu]

Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Bonjour,
Je suis actuellement en train de faire un DM de NSI (numérique et sciences informatiques), mon exercice est le suivant :
Placez des "étoiles " entre chaque caractères.
J'ai un début d'algorithme :
def chaine_etoilee(chaine):
       index = 0
       white index  < len(chaine):
                print(chaine[index] + "*", end="")
                index  = index + 1

Lorsque on rentre un prénom dans la fonction comme Fred, cela nous renvoie : F*r*e*d*, alors que il faudrait : F*r*e*d
Auriez-vous des idées ?
Merci à ceux qui prendront le temps de me répondre !
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626
1
Merci
Bonjour,

Pense à utiliser les balises pour la colorisation du texte !

white 
tu es sur ?

Tu devrais tester l'index par rapport à la longueur de la chaine, et dans le cas du dernier caractère, faire le print sans *

Cdlt

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 69714 internautes nous ont dit merci ce mois-ci

ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Pardon petite erreur d'écriture concernant le "while", le correcteur a écrit "white"
Concernant les balises pour la coloration du texte je ne vois pas de quoi tu parles.
Pour le dernier caractères je ne vois pas trop comment l'écrire sans le "*"...
Cdlt
Commenter la réponse de jee pee
Messages postés
26654
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2019
1858
1
Merci
Bonjour
Il suffit de faire ta boucle sur "nombre de caractères - 1 "

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 69714 internautes nous ont dit merci ce mois-ci

ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Bonjour,
J'ai déjà essayé ce que tu me conseilles mais cela m'écrit : F*r*e* au lieu de F*r*e*d si j'ai bien compris ce que tu me dis.
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 > ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
laisse la boucle sur len, mais compare indice à len - 1 pour le dernier caractère

une boucle for à la place de while t'évite de gérer l'indice

et pour le code juste là, au dessus de la saisie de ton message l'icone <>^ qui permet de choisir le type du code, python
jordane45
Messages postés
26654
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2019
1858 > ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Oui, et il ne te reste plus qu'à afficher le dernier caractère une fois la boucle terminée
chaine[len(chaine)-1]


Il y a d'autres façons de réaliser cet exo.
Par exemple,
Tu peux faire un IF dans ta boucle pour savoir si tu es au dernier caractère ou non... et en fonction.. écrire ton * ou pas.

Sinon tu dois également pouvoir utiliser un SPLIT sur la chaine
Puis un join
https://www.w3schools.com/python/ref_string_split.asp
https://www.w3schools.com/python/ref_string_join.asp
Commenter la réponse de jordane45
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626
1
Merci
Alors tu en es où ?

Moi j'ai 2 solutions, une avec un if dans la boucle, et la seconde, que je préfère, suggérée par jordane45, la boucle sur n-1 caractères et en sortie de boucle traitement du dernier caractère.

Comme sur ton précédent exercice tu sembles partir d'une bonne logique mais avoir du mal à finaliser. Généralement quand on écrit un programme, on arrive à le faire tourner dans sa tête, on "voit" l'instruction s'exécuter, on traite la boucle, ... Aujourd'hui avec un ordinateur et un écran c'est facile. Tu devrais à chaque pas mettre des print pour voir le contenu de chaque variable, de chaque champ, presque de chaque instruction pour voir la trace complète de l'exécution.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 69714 internautes nous ont dit merci ce mois-ci

ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Cela me renvoie :
F
r
e
d
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 > ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
oui le nom d'un champ ne fait pas tout, c'est pourquoi on utilise
range(len(chaine))
, en se rappelant que le 1er indice, c'est 0
ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Ah oui et ça me renvoi :
0
1
2
3
Est ce que je pourrais te recontacter pour que tu essaye de m'aider, si tu le veux bien, pour un autre de mes exercices s'il te plaît jee pee ?
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 > ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Pose ta question sur le forum, si je suis en ligne je regarderai, ou sinon peut être qu'un autre intervenant répondra
ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Ok, merci en tout cas pour ton aide !
Commenter la réponse de jee pee
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
0
Merci
Donc tu voudrais que je fasse (jee pee)


def chaine_etoilee(chaine):
indice = 0
for indice in (len(chaine)-1):
print("chaine[indice] + "*", end = "")
indice = indice + 1
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 -
pour la colorisation voir : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

def chaine_etoilee(chaine):
    for i in range(len(chaine)-1):
        print(chaine[i] + "*", end="")
 


Plus en fin une ligne comme indiqué par jordane45
   print(chaine[len(chaine)-1], end="")
Commenter la réponse de ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
0
Merci
Super, merci Jordan 45 je n'avais pas pensé au "if" !
Mais mon problème est que lorsque j'effectue la commande :print(chaine[indice] + "*",end = ""), il me marque dans la console "string indices must be integers "
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 -
il faut se rappeler qu'une chaine de caractère démarre à l'indice 0, donc pour une chaine de len=4 il faut utiliser, [0,1,2,3]
Commenter la réponse de ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
0
Merci
Oui c'est donc pour cela que j'initialise "indice = 0"
jee pee
Messages postés
27142
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
2 novembre 2019
5626 -
là tu as toutes les billes, il faut juste que tu les assembles en faisant des tests
ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Desole mais je n'ai pas compris ce que tu souhaites me dire jee pee
jordane45
Messages postés
26654
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2019
1858 > ledebutantenpython
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Je t'ai tout ecrit..
Si tu ne sais pas me relire...ça va devenir compliqué
Commenter la réponse de ledebutantenpython