mauvais depart

mauvais depart - Python - Programmation

Marsh Posté le 29-09-2007 à 12:24:09    

Bonjour je debute dans le python, notament grace a des tutos trouvés sur le net.
 
J'utilise Idle, tous va bien mais au moment d'enregistrer un script, je me retrouve avec une fenetre  
 
"non ASCII found, yet no encoding  
.add a line like
 
# -*- coding: cp1252 -*-
 
choose ok to save this file as cp1252
Edityour general option to slave the warning
 
je choisis ok  
 
et quand je lance le processus,  j'obtient une fenetre :
 
syntax error
 
There an error in your program:
 
invalid syntax.
 
j'ai pourtant essayer de regarder si j'avai fais une erreur, j'en ai pas trouvé, devant mes echec, j'ai fait un copier coler du code donné sur le site et la encore les meme fenetre...
 
Je tourne sous vista. et j'utilise python 2.5.1
 
Pouvez vous me dire d'ou vient l'erreur?

Reply

Marsh Posté le 29-09-2007 à 12:24:09   

Reply

Marsh Posté le 29-09-2007 à 15:45:38    

Faudrait ptet penser à lire les messages d'erreur au lieu de cliquer "ok" sans réfléchir hein [:pingouino]
 
Tu as des caractères non-ascii dans ton source (avec des accents par exemple), python ne les gère pas par défaut, il faut lui indiquer ton encodage avec une annotation spécifique. Donc IDLE te prévient, et te demande si tu veux rajouter la ligne indiquant l'encodage (# -*- coding: encodage_de_ton_fichier -*-).
 
Il te fournit ensuite deux options: "ok", qui indique "ok rien à foutre", et "Edit my file" qui indique "Rajoute l'annotation d'encodage au fichier".
 
Donc commence par rajouter cette indication d'encodage (ou par dégager les accents de ton source).


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-09-2007 à 10:56:32    

merci bien , en effet c'etai tout bête .
 
J'ai une deuxieme question tout aussi bête surement mais comme un dis un con qui demande reste con qq seconde...
 
J'explique, quand je met la condition "else" l'indentation ne se fait pas automatiquement sous windows, je fais donc 4 espaces comme indiqué dans le tuto de Gerard Swinnen et la ....
 
 
>>> a = 20
>>> if (a >1 00):
 print ' a est superieur a la centaine'
      else:
       
  File "<pyshell#8>", line 3
    else:
         
^
IndentationError: unindent does not match any outer indentation level
>>>  
 
 
ça doit encore etre tout bête...

Message cité 1 fois
Message édité par noise83 le 30-09-2007 à 10:58:50
Reply

Marsh Posté le 30-09-2007 à 11:25:16    

noise83 a écrit :

merci bien , en effet c'etai tout bête .

 

J'ai une deuxieme question tout aussi bête surement mais comme un dis un con qui demande reste con qq seconde...

 

J'explique, quand je met la condition "else" l'indentation ne se fait pas automatiquement sous windows, je fais donc 4 espaces comme indiqué dans le tuto de Gerard Swinnen et la ....

 


>>> a = 20
>>> if (a >1 00):
 print ' a est superieur a la centaine'
      else:
     
  File "<pyshell#8>", line 3
    else:
       
^
IndentationError: unindent does not match any outer indentation level
>>>

 


ça doit encore etre tout bête...


Ta condition "else" ne doit surtout pas être indentée ici, la ligne "if" n'est pas indentée (même si elle n'est pas collée au bord gauche) à cause du marqueur ">>> " de shell, qui ajoute des caractères mais pas d'indentation (c'est pas super clair je sais, mais c'est comme ça)

 

Donc un if/else doit ressembler à ça dans le shell:

Code :
  1. >>> if True:
  2.     print "ok"
  3. else:
  4.     print "nok"
  5.  
  6.     
  7. ok
  8. >>>
 

Accessoirement, les parenthèses dans ton "if" sont inutiles et redondantes, elles ne sont à utiliser que pour clarifier une condition ou pour créer des groupes incompatibles avec la précédences naturelle.

 

Typiquement, une opération du type

Code :
  1. >>> a = 5
  2. >>> b= 6
  3. >>> c = 7
  4. >>> d = 8
  5. >>> if a < b != c > d:
  6.     print "ok"


ne va rien imprimer du tout, parce que les opérateurs de comparaison ont tous la même précédence, donc évaluation de la gauche vers la droite, donc c'est équivalent à

Code :
  1. if (((a < b) != c) > d):
  2.     print "ok"


qui n'est pas du tout ce que je voulais.

 

Donc je rajoute des parenthèses pour bypasser la précédence naturelle, et ça donne

Code :
  1. >>> if (a < b) != (c > d):
  2.     print "ok"
  3.  
  4.     
  5. ok


mais chez toi il n'y a qu'une seule opération et elle n'est pas ambigue, donc pas de parenthèses.


Message édité par masklinn le 30-09-2007 à 11:26:06

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-09-2007 à 12:13:10    

merci pour tes conseils, en effet sans indentation tout fonctionne.
 
Tu as entierement raison pour les parenthese mais comme je te le disai plus haut j'en suis pour le moment au stade "tutoriel" je suppose qu'il nous les font mettre pour prendre les bonnes habitudes , et que au fur et a mesure on doit alleger sont code de soit meme.
 
Cela dis je vai essayer de prendre l'habitude de faire au plus simple.
 
Merci encore.

Reply

Marsh Posté le 30-09-2007 à 14:46:30    

Ca n'est pas un mauvais départ, c'est un départ ;)

Reply

Marsh Posté le 30-09-2007 à 16:28:10    

Merci gzii, en effet c'est dur et laborieux mais faut bien y passer et comme on dis c'est en tombant qu'on apprend...

Reply

Marsh Posté le 17-12-2008 à 09:20:18    

bonjour, je me mêle de votre conversation , pardon par avance.
Je m'essaye à python et quand après une suite de lignes je tape print  il me marque  
"SyntaxError: invalid syntax (<pyshell#11>, line 2)"
Donc moi pas comprendre !! :??:

Reply

Marsh Posté le 17-12-2008 à 10:37:15    

Tu tapes print quoi ?
(la ligne entière)
Et avec Python 3 ?
Si oui print devient une fonction
print('hello')
au lieu de  
print 'hello'

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed