Forum Imprimante

 Oublié Pass?
 Register
Rechercher
Voir: 558|Réponse: 10

[python] exercice de listes

[Copier lien]

Post sur le : 2012-05-08 08:59:59 |Tout les posts
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 ich = "CDEFGAB"
print ch[12]
Traceback (most recent call last):
  File "a.py", line 2, in
    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).
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 10:43:09 |Tout les posts
dans ton cas, lors du quatrième passage de while:
i=3, lc=7, c3=7 et ch[7]= "index out of range": indice en dehors de la chaine de 7 éléments [0,1,2,3,4,5,6]
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 12:30:51 |Tout les posts
Note: Met ton code entre deux balises  sinon on ne voit pas correctement l'indentation.
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 14:06:03 |Tout les posts
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
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 15:26:06 |Tout les posts
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))
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 17:22:21 |Tout les posts
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éponse

Accessoires Signaler

Post sur le : 2012-05-08 18:56:00 |Tout les posts
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]
Réponse

Accessoires Signaler

Post sur le : 2012-05-08 20:43:18 |Tout les posts
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éponse

Accessoires Signaler

Post sur le : 2012-05-08 22:39:52 |Tout les posts
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
Réponse

Accessoires Signaler

Post sur le : 2012-05-09 00:15:08 |Tout les posts
programme très amusant, chapeau! On dirait Armand Pierre
merci pour les liens
Réponse

Accessoires Signaler

Post sur le : 2012-05-09 02:07:15 |Tout les posts
je suis en G2 info de gestion et je cherhe de exercices sur les listes
Réponse

Accessoires Signaler

Vous devez vous connecter d'abord connect | Register

Contact Us| Archive| Forum Imprimante

GMT+1, 2014-07-23 10:31

Powered by Discuz! 7.2

Release 20121101, © 2001-2014 Forum Imprimante.

Top