CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [Python] Problème "String index"

DébutPage précedente
1
Page suivantePage suivante
Xemantikk Xemantikk
MP
Niveau 4
21 février 2017 à 21:24:58

Bonjour, je souhaite faire un programme qui consiste à remplacer les majuscules par des minuscules et inversement à l'aide de la table de code ASCII. Cependant j'ai un soucis dans mon programme :


i = 0

chaine = raw_input("Chaine de caractères : ")
l = len(chaine)

while i<=l:
    b = chaine[i]
    c = ord(b)
    i = i+1
if 65<=c<=90:
    chaine.lower()
else:
    chaine.upper()

Un message d'erreur apparait au niveau du b = chaine[i] me disant :''' " IndexError: string index out of range "

Quelle serait la solution ?

MrGreez94 MrGreez94
MP
Niveau 10
21 février 2017 à 21:49:17

A moins que ce soit le réel objectif de l'exercice, sache qu'il y a déjà des fonctions qui font ça, notamment swapcase()

Ex :

chaine = aBcDeF
print(chaine.swapcase())

output : AbCdEf

Cj1993 Cj1993
MP
Niveau 10
21 février 2017 à 21:54:48

Ta boucle va jusqu'à i = L sauf que chaine[L] existe pas

Message édité le 21 février 2017 à 21:56:12 par Cj1993
Xemantikk Xemantikk
MP
Niveau 4
21 février 2017 à 22:09:33

Le 21 février 2017 à 21:49:17 MrGreez94 a écrit :
A moins que ce soit le réel objectif de l'exercice, sache qu'il y a déjà des fonctions qui font ça, notamment swapcase()

Ex :

chaine = aBcDeF
print(chaine.swapcase())

output : AbCdEf

Oui c'est l'objectif de l'exercice.

Le 21 février 2017 à 21:54:48 Cj1993 a écrit :
Ta boucle va jusqu'à i = L sauf que chaine[L] existe pas

Du coup la solution serait de mettre l-1 au lieu de l ?

Grymmis Grymmis
MP
Niveau 10
21 février 2017 à 22:42:04

Oui, l-1 au lieu de l.
Mais honnêtement, ton programme est très mal conçu.

D'abord, on passera sur le fait que tu utilises Python 2.X plutôt que Python 3.X ( sûrement car tes professeurs t'ont imposé ce choix, ce qui est dommage... étant donné que passer à la dernière version ne coûte rien )... C'est pas si grave.

Mais ce qui l'est plus, c'est ton choix de boucle :
En algorithmique, on distingue généralement deux types de boucles : les boucles " Pour " ( = for en anglais ), qu'on utilise lorsque l'on connait le nombre d'itérations ( = tour de boucle ) qu'il faut réaliser, et les boucles " Tant Que " ( = while en anglais ) qui tourneront tant qu'une certaine condition est valide... On les utilise que lorsque nous ne pouvons pas savoir à l'avance le nombre de tours maximum que l'on va réaliser.

Or, là, tu connais le nombre de tours que l'on va réaliser : c'est la longueur de ta chaine.
Du coup, l'utilisation d'une boucle Tant Que est inappropriée.

Et d'un point de vue plus pythonique, les boucles Pour en Python sont des boucles for ... in ..., c'est à dire qu'elles parcourent un objet dit " itérable ". En l’occurrence, elles peuvent parcourir une chaine de caractères ( caractère par caractère )... Ce qui est exactement ce que tu veux.

Ton programme s'écrirait donc plus de la forme :

for i in chaine: #A chaque tour de boucle, i prend la valeur du caractère suivant de la boucle #Les actions que tu veux réaliser #La boucle se termine quand le parcours de la chaine est terminé...

Bref, tu n'avais peut-être pas vu ça en cours, mais ça me semblait nécessaire de préciser que l'usage d'une boucle Tant Que est inapproprié... Tu as déjà probablement vu la nuance entre les deux boucles en cours....

( et dernier point je sais pas si c'est un mauvais C/C, mais ta condition doit être à l'intérieur de ta boucle hein... Tu veux qu'elle s'exécute pour chaque caractère... Pas seulement pour le dernier ( de toute façon ça ne marcherait pas :hap: ) )

Xemantikk Xemantikk
MP
Niveau 4
21 février 2017 à 22:54:20

Merci beaucoup Grymmis, je pense que cela va beaucoup m'aider pour améliorer mon programme, voir recommencer du début ^^.

Je vais regarder pour passer sur Python 3.X et oui ma condition en fin de programme est initialement dans la boucle (Problème C/C)

Grymmis Grymmis
MP
Niveau 10
23 février 2017 à 02:18:22

Nan mais te casse pas la tête pour Python 3.X, si ton / tes profs travaille(nt) avec Python 2.X, reste sur Python 2.X, ça risque de te poser quelques soucis sinon.

C'était juste une remarque que je me faisais à moi même, je trouve ça dommage... J'ai encore jamais entendu parler de profs travaillant avec Python 3.X, alors que cette version n'est pourtant pas si récente...

De rien sinon, je me sentais obligé d'intervenir... Parce que tu ne te serais pas rendu compte du problème, étant donné que ton programme allait fonctionner correctement.... Mais comme on le rabâche souvent, coder, c'est pas simplement produire quelque chose qui fonctionne... Faut-il aussi que ce soit juste. :ok:

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment