# Débutant python \[Résolu\]

**URL:** <https://www.debian-fr.org/t/debutant-python-resolu/24257>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 9:19 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257 "2016-02-20T21:19:46Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![shell-boudeur](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/85f322/32.png) [@shell-boudeur](https://www.debian-fr.org/u/shell-boudeur)\
**Post date:** [Février 20, 2016, 9:19 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/1 "2016-02-20T21:19:46Z")

</div>

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

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

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

> [@](#):
>
> Exercices :  
> 5.11. Soient les listes suivantes :  
> 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’]  
> Écrivez un petit programme qui crée une nouvelle liste t3. Celle-ci devra contenir tous les éléments des deux listes en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours correspondant : [‘Janvier’,31,‘Février’,28,‘Mars’,31, etc…].  
> 5.12. Écrivez un programme qui affiche « proprement » tous les éléments d’une liste. Si on l’appliquait par exemple à la liste t2 de l’exercice ci-dessus, on devrait obtenir :  
> Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre

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

> [@](#):
>
> 4.6. Remarque concernant les caractères accentués et spéciaux :

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

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:19 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/2 "2016-02-20T21:19:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![shell-boudeur](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/85f322/32.png) [@shell-boudeur](https://www.debian-fr.org/u/shell-boudeur)\
**Post date:** [Février 20, 2016, 9:19 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/3 "2016-02-20T21:19:58Z")

</div>

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)`

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/4 "2016-02-20T21:20:07Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![shell-boudeur](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/85f322/32.png) [@shell-boudeur](https://www.debian-fr.org/u/shell-boudeur)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/5 "2016-02-20T21:20:09Z")

</div>

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

> [@](#):
>
> Mais si tu utilise python 3 tu peut simplement faire print(t3) et tout s’affiche comme il faut.

En clair, le codeur python n’utilise pas de caractères spéciaux s’il veut que son script fonctionne partout ➡  
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… ❓ ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![Cyrilleb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/a9adbd/32.png) [@Cyrilleb](https://www.debian-fr.org/u/Cyrilleb)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/6 "2016-02-20T21:20:10Z")

</div>

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… ❓ ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")[/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/](http://www.olivierberger.org/python/)

Bon courage

Cyrille

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/7 "2016-02-20T21:20:15Z")

</div>

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

> [@](#):
>
> Mais si tu utilise python 3 tu peut simplement faire print(t3) et tout s’affiche comme il faut.

En clair, le codeur python n’utilise pas de caractères spéciaux s’il veut que son script fonctionne partout ➡  
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… ❓ ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")[/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.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/8 "2016-02-20T21:20:24Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![tuxicoman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/d6d6ee/32.png) [@tuxicoman](https://www.debian-fr.org/u/tuxicoman)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/9 "2016-02-20T21:20:39Z")

</div>

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 :

```auto
# 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.

---

<div class="post-metadata">

**Author:** ![shell-boudeur](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/85f322/32.png) [@shell-boudeur](https://www.debian-fr.org/u/shell-boudeur)\
**Post date:** [Février 20, 2016, 9:20 UTC](https://www.debian-fr.org/t/debutant-python-resolu/24257/10 "2016-02-20T21:20:48Z")

</div>

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