Débutant python [Résolu]

Hi, je m’essaye au Python et déjà des soucis :cry: avec les

-- coding:Utf-8 -- et consœurs.

je suis le tuto de http://python.developpez.com/cours/TutoSwinnen/
Je bloc ici :

Mon code fonctionne, mais j’ai le hic avec les caractères spéciaux. Je retourne lire :

Une petite recherche sur le Web, mais les exemples ne sont pas des listes. Je regarde la solution du tuto mais rien n’y fait, j’ai toujours :

['Janvier', 31, 'F\xc3\xa9vrier', 28, 'Mars', 31, 'Avril', 30, 'Mai', 31, 'Juin', 30, 'Juillet', 31, 'Ao\xc3\xbbt', 31, 'Septembre', 30, 'Octobre', 31, 'Novembre', 30, 'D\xc3\xa9cembre', 31]

Merci de vos explications

Quel est l’encodage de ton fichier et quel est la version de ton interpréteur python ?

Pour l’encodage, j’ai essayé l’utf et le latin
Ci-dessous, le code (la solution fournie, j’ai juste rajouté la 1ère ligne)

[code]# -*- coding:Utf-8

Combinaison de deux listes en une seule

Listes fournies au départ :

t1 = [31,28,31,30,31,30,31,31,30,31,30,31]
t2 = [‘Janvier’,‘Février’,‘Mars’,‘Avril’,‘Mai’,‘Juin’,
‘Juillet’,‘Août’,‘Septembre’,‘Octobre’,‘Novembre’,‘Décembre’]

Nouvelle liste à construire (vide au départ) :

t3 = []

Boucle de traitement :

i = 0
while i < len(t1):
t3.append(t2[i])
t3.append(t1[i])
i = i + 1

Affichage :

print t3
[/code]

>>> sys.version_info (2, 6, 4, 'final', 0)

J’ai essayé ceci :

[code]#!/usr/bin/python

-- coding: utf-8 --

Combinaison de deux listes en une seule

import sys

Listes fournies au départ :

t1 = [31,28,31,30,31,30,31,31,30,31,30,31]
t2 = [‘Janvier’,‘Février’,‘Mars’,‘Avril’,‘Mai’,‘Juin’,
‘Juillet’,‘Août’,‘Septembre’,‘Octobre’,‘Novembre’,‘Décembre’]

Nouvelle liste à construire (vide au départ) :

t3 = []

Boucle de traitement :

i = 0
while i < len(t1):
t3.append(t2[i])
t3.append(t1[i])
i = i + 1

Affichage :

print sys.stdout.encoding
moi = True
for i in t3:
if moi:
print i.encode(sys.stdout.encoding,‘replace’)
else:
print i
moi = not moi[/code]
Et il me plante sur le février avec :

Traceback (most recent call last): File "./test.py", line 24, in <module> print i.encode(sys.stdout.encoding,'replace') UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)
Donc les chaines restent en ASCII. Je l’ai fais avec la version 2.6 de l’interpréteur.

Mais si tu utilise python 3 tu peut simplement faire print(t3) et tout s’affiche comme il faut.

Apparemment, c’est assez galère toute cette histoire d’unicode, d’utf etc…

En clair, le codeur python n’utilise pas de caractères spéciaux s’il veut que son script fonctionne partout :arrow_right:
je commence à me demander si je fais bien de me mettre à ce langage ?
désolé de la question, mais je viens de vb (appris sur le tas) alors… :question: :mrgreen:

Bonsoir,

[quote=“shell-boudeur”]Apparemment, c’est assez galère toute cette histoire d’unicode, d’utf etc…
je commence à me demander si je fais bien de me mettre à ce langage ?
désolé de la question, mais je viens de vb (appris sur le tas) alors… :question: :mrgreen:[/quote]

Python est porteur, beaucoup le choisissent (notamment pour wxpython d’après les retours que j’ai eus)
Sinon perl est aussi pas mal, as tu jeté une oeil dans ce sens ?

Mais c’est comme pour tout apprentissage je pense, les débuts sont fastidieux mais si l’on persiste ça paye !

pas mal de tutos là :
olivierberger.org/python/

Bon courage

Cyrille

[quote=“shell-boudeur”]Apparemment, c’est assez galère toute cette histoire d’unicode, d’utf etc…

En clair, le codeur python n’utilise pas de caractères spéciaux s’il veut que son script fonctionne partout :arrow_right:
je commence à me demander si je fais bien de me mettre à ce langage ?
désolé de la question, mais je viens de vb (appris sur le tas) alors… :question: :mrgreen:[/quote]
Le python (comme le perl) peuvent avoir se genre de problème la version 3 de python (et 6 de perl) corrigent cela.

En python il y a des solutions. D’après ce que j’ai compris ce sont des modificateurs du genre u"chaine". Mais je n’ai jamais appris ce langage, il faudrait que je m’y penche plus.

Je viens d’un peu plus m’y intéresser et en fait ça marche si tu fait l’affichage élément par élément.

quand tu fais “print t3”, python affiche le contenu de l’objet en ascii. Donc avec les codes utf-8. la fonction print n’est pas faite pour afficher “proprement” un tableau.

maintenant, remplace ton code d’affichage par :

# Affichage :
txt = "" 			# variable texte vide
for i in t3 :
	txt += str(i) + ", "	# ajout des champs du tableau à la chaine de texte, séparation des champs par une virgule
print txt 			# affichage de la chaine de texte

et tout s’imprime bien.

Merci beaucoup, je vais étudier ça de plus près