L'un des produits nécessaires pour la fabrication de l'onguent magique, un minerai très rare, ne se trouve qu'en un seul endroit sur la planète, au fond de la plus vieille mine existante, jadis exploitée par le peuple nain. Désormais seuls quelques uns d'entre eux sont encore sur place, afin de guider les voyageurs (commerçants et touristes) au sein de ce dédale de cavernes et galeries.
Après avoir engagé un guide, il vous mène jusqu'à l'endroit prévu mais un petit désaccord sur le paiement de ses services le pousse à vous laisser sur place, sans aucune chance de retrouver la sortie. Heureusement votre robot à conservé en mémoire la suite des déplacements qui vous ont amené de l'entrée jusqu'à votre position actuelle, il ne vous reste plus qu'à suivre le chemin inverse !
Ce que doit faire votre programme :
Il existe 5 types de déplacements, représentés par 5 entiers différents : aller à gauche (1), aller à droite (2), aller tout droit (3), monter (4) et descendre (5).
Le premier entier à lire est le nombre total de déplacements (1000 au maximum). Ensuite, chaque déplacement (représenté par un entier) est indiqué sur sa propre ligne.
Vous devez afficher la suite des déplacements à faire pour aller de votre position actuelle à la sortie.
Exemple
entrée :
6
1
3
2
4
4
5
sortie :
4
5
5
1
3
2
Voici mon code
nbDeplacement=int(input())
CheminEntrée=[0]* nbDeplacement
for deplacement in range (nbDeplacement):
deplacement=int(input())
if deplacement==5:
CheminEntrée[deplacement]==4
if deplacement==4:
CheminEntrée[deplacement]==5
else:
CheminEntrée[deplacement]=deplacement
for deplacement in range(nbDeplacement):
print(CheminEntrée[deplacement])
et le message d'erreur qui s'affiche.
Échec
La réponse donnée par votre programme est incorrecte. Il a affiché :
0
1
2
3
0
5
au lieu de :
4
5
5
1
3
2
<input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />
Pourriez vous m'aider à modifier les conditions pour pas qu'elles se suivent car si je comprends bien, si la valeur qui sort est un 4 je veux la transformer en 5 mais aux if suivant il retransforme mon 5 en 4...
Egalement je n'ai pas compris comment afficher la liste à l'envers.
Merci de votre aide
- Edité par RaphaëlBitoun 27 septembre 2019 à 12:23:20
Oui ton idée est bonne ça devrait fonctionner, par contre là tu va avoir des problèmes :
for deplacement in range (nbDeplacement): #ici déplacement est l'indice dans la liste CheminEntrée
deplacement=int(input()) # ici déplacement est la valeur du déplacement, ça va coincer si tu changes pas les noms
if deplacement==5:
CheminEntrée[deplacement]==4
Et il faut aussi remplacer les 1 par 2 et inversement
nbDeplacement=int(input())
CheminEntrée=[0]* nbDeplacement
for deplacement in range (nbDeplacement):
valeur_deplacement=int(input())
if valeur_deplacement==5:
CheminEntrée[deplacement]==4
if valeur_deplacement==4:
CheminEntrée[deplacement]==5
else: #rajoute le 1<->2
CheminEntrée[deplacement]=deplacement
for deplacement in range(nbDeplacement):
print(CheminEntrée[-deplacement])
Pour parcourir à l'envers tu peux faire soit :
l=[1,2,3,4]
for i in range(3):
print(l[-i])
#ou alors
l.reverse()
for i in range(3):
print(l[i])
pourquoi inverser les 1 et 2 puisqu'ils faut juste les sortir dans l'ordre inverse.
Car si je remplace 1 par 2 et 2 par 1 et que je sors la liste à l'envers ce ne sera pas bon.
Et le site indique une erreur de syntaxe sur le code que tu m'a donné
nbDeplacement=int(input())
CheminEntrée=[0]* nbDeplacement
for deplacement in range (nbDeplacement):
valeur_deplacement=int(input())
if valeur_deplacement==5:
CheminEntrée[deplacement]==4
if valeur_deplacement==4:
CheminEntrée[deplacement]==5
else:
CheminEntrée[deplacement]=deplacement
for deplacement in range(nbDeplacement):
print(CheminEntrée[-deplacement])<br><br>
me donne une erreur :
Erreur de compilation :
File "exe", line 12
print(CheminEntrée[-deplacement])<br><br>
^
SyntaxError: invalid syntax
J'arrive à créer ma liste avec les nouvelles valeur à afficher
nbDeplacement=int(input())
CheminEntrée=[0]* nbDeplacement
for deplacement in range (nbDeplacement):
valeur_deplacement=int(input())
if valeur_deplacement==5:
CheminEntrée[deplacement]=4
if valeur_deplacement==4:
CheminEntrée[deplacement]=5
if valeur_deplacement==1:
CheminEntrée[deplacement]=2
if valeur_deplacement==2:
CheminEntrée[deplacement]=1
if valeur_deplacement==3:
CheminEntrée[deplacement]=3
for deplacement in range(nbDeplacement):
print(CheminEntrée[deplacement])
et la résultat est
Test 1
Échec
La réponse donnée par votre programme est incorrecte. Il a affiché :
2
3
1
5
5
4
au lieu de :
4
5
5
1
3
2
<input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />
0 %
Test 2
Succès
Exécuté en 0,05 seconde.
100 %
Test 3
Succès
Exécuté en 0,05 seconde.
100 %
Test 4
Succès
Exécuté en 0,05 seconde.
100 %
Test 5
Succès
Exécuté en 0,06 seconde.
100 %
Test 6
Succès
Exécuté en 0,06 seconde.
100 %
Test 7
Échec
La réponse donnée par votre programme est incorrecte.
0 %
Donc j'imagine que j'ai à afficher la liste à l'envers.
et quand je rentre ton code (sans le br br lol)
nbDeplacement=int(input())
CheminEntrée=[0]* nbDeplacement
for deplacement in range (nbDeplacement):
valeur_deplacement=int(input())
if valeur_deplacement==5:
CheminEntrée[deplacement]=4
if valeur_deplacement==4:
CheminEntrée[deplacement]=5
if valeur_deplacement==1:
CheminEntrée[deplacement]=2
if valeur_deplacement==2:
CheminEntrée[deplacement]=1
if valeur_deplacement==3:
CheminEntrée[deplacement]=3
for deplacement in range(nbDeplacement):
print(CheminEntrée[-deplacement])
Test 1
Échec
La réponse donnée par votre programme est incorrecte. Il a affiché :
2
4
5
5
1
3
au lieu de :
4
5
5
1
3
2
<input style="font-family: inherit; font-size: inherit; margin: 3px 0px;" type="button" value="Surligner le premier caractère différent" />
0 %
Ca me change les valeurs mais ne les affiche pas dans l'ordre inverse, il doit y avoir qlqch que je n'ai pas compris.
Quand tu parcours une liste à l'envers la première case (en réalité la dernière ) est à l'indice -1 et pas -0 comme on pourrait imaginer. Donc si tu as une liste de 5 éléments:
l=[1,2,3,4,5]
for i in range(1,6):
print(l[-i])
Normalement avec ça tu as tout pour réussir.
Essayer d’accéder à l'indice -0, tu verra que ça te retourne en fait l'indice 0.
Merci beaucoup pour ton aide j'ai trouvé c'est vraiment sympa!! même si la façon dont fonctionne le programme reste quand même un peu flou à mes yeux, j'ai du mal à bien visualiser ce qu'il fait .... ca viendra!lol
dans le cour de France ioi sur la boucle for, il est écrit que -1 correspond à l'indice d'un tableau pour décrémenter. Sur cet exercice, je l'ai fait et ça me met une erreur. Je ne comprends pas.
totDeplac = int(input())
tableauDeplac = [0] * totDeplac
for types in range(totDeplac):
valeurDepl = int(input())
if valeurDepl == 5:
tableauDeplac[types] = 4
if valeurDepl == 4:
tableauDeplac[types] = 5
if valeurDepl == 2:
tableauDeplac[types] = 1
if valeurDepl == 1:
tableauDeplac[types] = 2
if valeurDepl == 3:
tableauDeplac[types] = 3
print(tableauDeplac)
for types in range(-1, 0, totDeplac):
print(types)
print(tableauDeplac[types])
Malgré les aides qu'il y a eu je ne comprend toujours pas
nbDeplacement=int(input())
CheminEntrée=[0] * nbDeplacement
for deplacement in range (nbDeplacement):
valeur_depl=int(input())
if valeur_depl==5:
CheminEntrée[deplacement]=4
if valeur_depl==4:
CheminEntrée[deplacement]=5
if valeur_depl==1:
CheminEntrée[deplacement]=2
if valeur_depl==2:
CheminEntrée[deplacement]=1
if valeur_depl==3:
CheminEntrée[deplacement]=3
for i in range(nbDeplacement):
print(CheminEntrée[-deplacement])
Je sais pas c'est ce qui est dans le programme proposé en haut, et la personne à dit qu'elle avait réussi en modifiant des choses mais je trouve pas quoi que je mette le - ou pas ca reste pas bon
nbDeplacement=int(input())
CheminEntrée=[0] * nbDeplacement
for deplacement in range (nbDeplacement):
valeur_depl=int(input())
if valeur_depl==5:
CheminEntrée[deplacement]=4
if valeur_depl==4:
CheminEntrée[deplacement]=5
if valeur_depl==1:
CheminEntrée[deplacement]=2
if valeur_depl==2:
CheminEntrée[deplacement]=1
if valeur_depl==3:
CheminEntrée[deplacement]=3
for i in range(nbDeplacement):
print(CheminEntrée[i])
J'ai donc ca maintenant ? Mais ca ne marche toujours pas
Ah oui ! Mais comment on fait ca ? Je suis complètement perdu
Lis ta liste CheminEntrée par la fin, ce qui peut se faire de multiples façons, par exemple, en changeant dans la boucle deplacement en nbDeplacement-1-deplacement ou en utilisant un indice auxiliaire.
Merci beaucoup de votre réponse, je ne connais pas l'instruction reversed (pas encore vue dans le parcours lycée de France IOI) mais je ne suis pas loin, tout est inversé sauf le premier déplacement et le dernier. Pourquoi les indices du range ne sont-ils pas bons, je vais bien "à l'envers" avec un pas de 1 ?
Il faut mettre des elif au lieu des if sinon le programme doit continuer à modifier les valeurs !
Merci beaucoup de votre réponse, je ne connais pas l'instruction reversed (pas encore vue dans le parcours lycée de France IOI) mais je ne suis pas loin, tout est inversé sauf le premier déplacement et le dernier. Pourquoi les indices du range ne sont-ils pas bons, je vais bien "à l'envers" avec un pas de 1 ?
C'est assez cocasse en effet. Il faut soit afficher (le print) tout de suite sans attendre la fin soit utiliser des elif.
Bonsoir PascalOrtiz, ça m’intrigue, vous pouvez détailler svp ?
Imaginons que direction[i]=1 alors vous changez direction[i] en 2. Le problème c'est juste que derrière vous avez un if direction[i] == 2 et comme vous avez mis if au lieu de elif, le if va être examiné et vous allez encore changer la valeur de direction[i] alors qu'elle était bonne. Donc, ce n'est même pas une histoire d'affichage immédiat (contrairement à ce que je vous avais dit) mais c'est qu'il faut mettre des elif au lieu de if à partir de la ligne 7. Bien souvent écrire if ou elif ne change pas l'exécution du programme mais pas dans votre cas.
La prochaine au lieu de faire un screnshot de votre code, pensez à mettre votre code dans des balises sinon on ne peut pas le tester.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
J'ai donc ca maintenant ? Mais ca ne marche toujours pas
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères