Rechercher : dans
Par :

[python] exercice de listes

Dernière réponse le 20 fév 2008 à 13:57:28 tarang, le 23 nov 2006 à 15:03:54 
 Signaler ce message aux modérateurs

Hello,

Je suis débutant version alpha en programmation. Je me suis pourtant plongé dans l'aventure avec Python pour mon plaisir personnel. C'est donc de façon autodidacte et probablement maladroite que je débute .
Je lis actuellement le livre "apprendre a programmer avec Python" de G.Swinnen et termine le chapitre des listes.
Voici un petit exercice personnel que je n'arrive pas a résoudre:

soit une liste de caractères CDEFGAB (hé oui, vous devinez ma source d'inspiration)
comment faire afficher une harmonisation d'accords de trois sons a partir de chaque degré (CEG * DFA * EGB ... etc.)
Ma syntaxe doit probablement être fausse car il m'affiche une erreur à la 9e ligne

voici:

# -*- coding:Latin-1 -*-
ch = "CDEFGAB"
lc = len(ch)
i = 0
nch = ""
c1, c2, c3 = 0, 2, 4

while i<lc:
nch = nch + "*" + ch[c1] + ch[c2] + ch[c3]
i = i + 1
c1 = c1 + 1
c2 = c2 + 1
c3 = c3 + 1
print nch



merci d'avançe

Meilleures réponses pour « [python] exercice de listes » dans :
[Python] Lire et écrire des fichiers CSV VoirLIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
[MS-Dos] Lister le contenu d'un répertoire dans un fichier VoirIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible...
Listes et énumérations en HTML VoirLes listes Une liste est un paragraphe structuré contenant une suite d'articles. Le langage HTML définit trois types de listes : La liste ordonnée ; La liste non ordonnée ; La liste de définition. Liste ordonnée Conteneur Type de...
Listes de diffusion (mailing lists) VoirNotion de liste de diffusion Une liste de diffusion (en anglais mailing-list) est un des services les plus couramment utilisés sur internet, permettant à un expéditeur d'envoyer un message à un ou plusieurs destinataires. Le courrier électronique a...
Liste des instructions en assembleur VoirTableau des principales instructions en assembleur Voici une liste (non exhaustive) des principales instructions en assembleur des processeurs 80x86, ainsi que du code machine qui leur est associé et de leur taille en mémoire. Les valeurs val et...

1

sebsauvage, le 23 nov 2006 à 15:13:18

Note: Met ton code entre deux balises < code> sinon on ne voit pas correctement l'indentation.
“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

2

sebsauvage, le 23 nov 2006 à 15:17:07

Voici comment je ferais:

ch = "CDEFGAB" 
ch2 = ch*2  # (Deux fois la longueur de ch)
for i in range(len(ch)):
    print ch2[i] + ch2[i+2] + ch2[i+4]



Ce qui donne:
CEG
DFA
EGB
FAC
GBD
ACE
BDF
“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

3

sebsauvage, le 23 nov 2006 à 15:19:37

Mais pour faire plus propre, on devrait plutôt faire:

ch = "CDEFGAB" 
lc = len(ch)
for i in range(lc):
    print ch[i%lc]+ch[(i+2)%lc]+ch[(i+4)%lc]


(% est l'opération de modulo (reste de la division entière)) “Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

4

sebsauvage, le 23 nov 2006 à 15:23:41
  • +1

Dans beaucoup de cas, on peut se passer du while et utiliser plutôt le FOR.
C'est le principe des itérateurs.

Beaucoup d'objets Python sont des itérateurs (chaînes, fichiers, listes, dictionnaires, etc).
Cela permet de les parcourir facilement avec FOR sans avoir utiliser et incrémenter une variable d'index (i).
“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

5

tarang, le 23 nov 2006 à 15:28:13

Merci pour cette réponse rapide et efficace
ce code est effectivement beaucoup plus court
je découvre cette commande "for i in range". Est-ce une instruction loop, dans ce cas i s'indente? Bref, j'ai de quoi étudier
Qu'est-ce qui cloche dans ma ligne 9?

Répondre à tarang

6

sebsauvage, le 23 nov 2006 à 15:35:27

Est-ce une instruction loop, dans ce cas i s'indente? Bref, j'ai de quoi étudier

En faisant: for a in b
L'instruction for va extraire élément par élément tout ce que contient b.
A chaque étape, il met la valeur dans a.
A l'intérieur du for, il n'y a plus qu'à faire ce que tu veux avec la valeur a extraite de b.

Exemple:

mot = "coucou"
for lettre in mot:
    print lettre.upper()

ce qui affiche:
C
O
U
C
O
U



range(n) va créer une liste [0,1,2,3,4,5...n-1]

Exemple:
print range(5)
[0, 1, 2, 3, 4]


Donc for i in range(5) est équivalent à for i in [0, 1, 2, 3, 4]

“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

7

sebsauvage, le 23 nov 2006 à 15:38:56

Qu'est-ce qui cloche dans ma ligne 9?

Tu essaie d'accéder à un caractère dont l'indice est plus grand que le tableau.

Exemple:

ch = "CDEFGAB" 
print ch[12]



Traceback (most recent call last):
  File "a.py", line 2, in <module>
    print ch[12]
IndexError: string index out of range



"index out of range" veut dire que tu as essayé d'utiliser un index hors des valeurs possible (range).
(normal puisque ma chaîne ne fait que 7 caractères, je peux donc seulement utiliser les indexes 0,1,2.. jusqu'à 6).

“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

8

tarang, le 23 nov 2006 à 16:58:28

Limpide ... merci
voila qui me donne de quoi avançer
je pense installer un shell sur mon palm, c'est vraiment gai Python
A++

Répondre à tarang

9

sebsauvage, le 23 nov 2006 à 17:00:34

Très sympa comme langage.

Je m'amuse bien avec:
http://sebsauvage.net/webgobbler/

Voir aussi les trucs et astuces Python (en anglais):
http://sebsauvage.net/python/snyppets/

Et aussi le wiki francophone:
http://wikipython.flibuste.net
“Life is short - You need Python” -- Bruce Eckel, membre du comité ANSI C++

Répondre à sebsauvage

10

tarang, le 23 nov 2006 à 17:47:47

Programme très amusant, chapeau! On dirait Armand Pierre
merci pour les liens

Répondre à tarang

11

 annie2215, le 20 fév 2008 à 13:57:28

Je suis en G2 info de gestion et je cherhe de exercices sur les listes

Répondre à annie2215