Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2994 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Programme faux en python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programme faux en python

n°2240886
alex9669
Posté le 21-10-2014 à 18:27:02  profilanswer
 

bonjour mes amis !  
j'essaie de programmer quelque chose cependant je n'y arrive pas. le but du jeu consiste à faire une "synthèse" d'une liste comportant plusieurs sous-listes composées de la manière suivante : carte=[[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction'],[nb de pas,'direction']].
pour essayer mes petits "bouts" de programmes déjà réalisés, j'ai utilisé cette liste : carte=[[89,'O'],[34,'S'],[56,'N'],[4,'N'],[8,'E'],[432,'S'],[2,'O'],[9,'E'],[876,'E'],[980,'O']]. et le but c'est de renvoyer à l'utilisateur la liste : carte=[[178,'O'],[406,'S']].  
voilà mon travail, pouvez vous me dire ou sont les erreurs ? Python m'indique qu'il y a un probleme avec le "L[2]=='N'" :  
 
carte=[[89,'O'],[34,'S'],[56,'N'],[4,'N'],[8,'E'],[432,'S'],[2,'O'],[9,'E'],[876,'E'],[980,'O']]
E=0
S=0
O=0
N=0
for i in range(1,len(carte)+1):
    L=carte[i]
    if L[2]=='N':
        N=N+L[1]
    elif L[2]=='S':
        N=N-L[1]
    elif L[2]=='E':
        E=E+L[1]
    elif L[2]=='O':
        E=E-L[1]
print(E)
print(N)

mood
Publicité
Posté le 21-10-2014 à 18:27:02  profilanswer
 

n°2240900
caps lock
Posté le 21-10-2014 à 21:14:04  profilanswer
 

Je suis pas vraiment certains d'avoir compris ce que tu cherches à faire, mais déjà à vue de nez je vois deux choses qui me dérange :
 

for i in range(1,len(carte)+1):


 
Tu ne commences pas début de la carte et pire tu en débordes de 1 !
 

   if L[2]=='N':  
        N=N+L[1]


 
Là je pense comprendre la raison de l'erreur précédente, il semblerai que tu commences à compter à 1 alors qu'en programmation on commence à compter à 0
 

Code :
  1. for i in range(len(carte)):
  2.     L=carte[i]
  3.     if L[1]=='N':
  4.         N=N+L[0]
  5.     elif L[1]=='S':
  6.         N=N-L[0]
  7.     elif L[1]=='E':
  8.         E=E+L[0]
  9.     elif L[1]=='O':
  10.         E=E-L[0]


 
Mais ta logique n'est pas très bonne non plus car tu vas te retrouver avec 4 variables rien que pour des coordonnées, utilise plutôt un axe X et Y

Code :
  1. X=0
  2. Y=0
  3. print(len(carte))
  4. for i in range(len(carte)):
  5.     L=carte[i]
  6.     if L[1]=='N':
  7.         Y=Y+L[0]
  8.     elif L[1]=='S':
  9.         Y=Y-L[0]
  10.     elif L[1]=='E':
  11.         X=X+L[0]
  12.     elif L[1]=='O':
  13.         X=X-L[0]
  14. print(X)
  15. print(Y)


Message édité par caps lock le 21-10-2014 à 21:28:11
n°2240901
rage2000
Posté le 21-10-2014 à 21:29:28  profilanswer
 

Salut,

 

En fait le soucis c'est que l'index d'une liste commence a 0 et non a 1.

 

Du coup tes sous listes n'ont pas d'index 2. (python doit te retourner comme erreur: IndexError: list index out of range, ce qui est assez explicite ;) )

 

Idem sur le range, tu vas commencer avec ton exemple sur la 2eme entrée et avoir une erreur quand il va vouloir accéder a l'index de fin.

 

Enfin si je peux me permettre quelques petites choses:
niveau syntaxe:
- On met des espaces après les ',' et entre les opérateurs numériques
- Au niveau des variables, n'utilises pas les majuscules, elles sont normalement réservé pour les constantes. De plus ca coûte pas plus cher de mettre plus de caractères pour avoir des noms de variables clairs (dans le monde python on y tiens, un peu de lecture sur le sujet http://sametmax.com/bien-nommer-se [...] en-python/ )

 

niveau code:
- En python tu peux faire des boucles for sur des listes, tuples et dicts, ce qui dans ton cas simplifierait énormément la lecture du code.
- Tu as la possibilité d'utiliser le syntaxe += et -=, elle permet d'ajouter une valeur a une variable
 my_var += 1 c'est équivalent a my_var = my_var + 1 (et idem pour le -)
- la déclaration de ta carte, c'est plus judicieux, vu qu'elle ne va pas être modifié dans ton programme, d'utiliser les tuples (c'est en gros des listes mais en readonly et donc plus rapide)

 

Du coup voila ce que ca donnerai ;) (ps: j'ai aussi passé les noms en anglais, une bonne habitude a prendre aussi ;) )

 
Code :
  1. map = ((89, 'O'), (34, 'S'), (56, 'N'), (4, 'N'), (8, 'E'), (432, 'S'),
  2.        (2, 'O'), (9, 'E'), (876, 'E'), (980, 'O'),)
  3. east = 0
  4. north = 0
  5. for (length, direction) in map:
  6.     if direction == 'N':
  7.         north += length
  8.     elif direction == 'S':
  9.         north -= length
  10.     elif direction == 'E':
  11.         east += length
  12.     elif direction == 'O':
  13.         east -= length
  14. print(east)
  15. print(north)
 

Edit: on a répondu en même temps avec caps lock, pour l'histoire du x et y je plussois, c'est plus clair ! ;)


Message édité par rage2000 le 21-10-2014 à 21:32:20
n°2240990
alex9669
Posté le 22-10-2014 à 18:07:29  profilanswer
 

ahhhh, j'avais oublié que le premier terme d'une liste commençait à 0, c'est pour ça que ça n'allait pas ! et Python ne m'a pas affiché ce "type" de phrase, mais un simple "syntaxe error" ou quelque chose comme ça !
 
merci beaucoup ! si j'ai d'autres problèmes, je n'hésiterais pas !

n°2240993
alex9669
Posté le 22-10-2014 à 19:00:49  profilanswer
 

Autre chose, est ce qu'il est possible d'ordonner une liste (composée de plusieurs listes) sur python. Autrement dit, ma liste serait par exemple :  
[[3, 45], [8, 98], [6, 3], [98, 87], [45, 8]]
et je voudrais qu'elle soit ordonnée en fonction du deuxième terme de chaque sous liste, donc ça me donnerait:  
[[6, 3], [45, 8], [3, 45], [98, 87], [8, 98]]

n°2241005
caps lock
Posté le 22-10-2014 à 22:07:30  profilanswer
 

carte = [[3, 45], [8, 98], [6, 3], [98, 87], [45, 8]]
carte.sort(key=lambda x: x[1])
print (carte)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Programme faux en python

 

Sujets relatifs
arguments dans programme COptimiser un programme Matlab
programme simple avec fautesDéterminer si un programme s'arrête ou non ?
? avant l'instalation de python sur pc avec serveur apacheProgramme (comme grep) capable de lire depuis stdin
récupération programme xilinx xc8536xlaide pour un programme en c
Difficulté à compiler un programmelancer des commandes python en parallele
Plus de sujets relatifs à : Programme faux en python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR