Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Problème script pour débutant

Problème script pour débutant

Remonter à Forum général Python
  • Problème script pour débutant

    Envoyé par JM le 5 Mai 2006 à 18:42
    Bonjour

    J'apprends Python depuis quelques jours avec le livre [em]Apprendre à programmer avec Python,[/em]de Gérard Swinnen. Très bon ouvrage.

    Mais là je coince sur le chapitre 5, plus précisément l’exercice 5.6 (recherche d’un caractère particulier dans une chaîne) :

    ch = "Monty Python Flying Circus"
    cr = "e"
    lc = len(ch)
    i = 0
    t = 0

    while i < lc:
    if ch[ i] == cr:
    t = 1
    i = i + 1
    print "Le caractere", cr,
    if t == 1:
    print "est present",
    else:
    print "est introuvable",
    print 'dans la chaine", ch

    .......

    J’ai mis en gras la partie où je pige plus. Quelqu’un peut-il me traduire en « langage naturel » la chose ?
    i = 0
    t = 0

    je suis largué là ??? Comprends pas cette histoire d’indice…
    Ah mince l’indentation a disparu dans mon exemple ! C’est mon premier post ici, pardonnez ma maladresse :P

    • Re: Problème script pour débutant

      Envoyé par JM le 6 Mai 2006 à 17:14
      En effet c’est beaucoup plus simple !
    • Re: Problème script pour débutant

      Envoyé par LaurentPi le 9 Mai 2006 à 10:48
      JM" a écrit:
      i = 0 en fait c'est une instruction qui dit à Python de commencer par le premier caractère si j'ai bien compris...

      Non, i = 0 est une instruction qui dit à Python d'étiqueter l'objet 0 de type entier avec le nom i, mais cela va servir au programmeur à accéder au premier caractère de la chaîne.

      Cette variable i va ensuite être utilisée dans 3 autres instructions : dans le test de la boucle 'while', comme index pour accéder au ième caractère de la chaîne (ch[ i]) et enfin pour s'automodifier dans i = i+1, qui dit à Python de créer un nouvel objet résultat de l'évaluation de l'expression i+1 et de l'étiqueter avec le nom i.

      En tant que programmeur dans un langage impératif classique (C, C++, Pascal, Java, VB, Perl, PHP, etc.), on utilise souvent ce type d'idiome avec une variable i qui sert d'indice pour accéder aux élements d'un tableau (une chaîne de caractères est un tableau d'indices).

      Comme l'a dit Tarek, cette façon de faire n'est pas très Pythonesque, et pour ce cas particulier de test de présence d'un élément dans une liste on utilisera l'opérateur 'in'.

      D'une manière générale on se passera en Python de la variable i, en utilisant la boucle 'for', exemple :

      ch = "Monty Python Flying Circus"
      cr = "e"
      t = 0
      for c in ch:
      if c == cr:
      t = 1
      print "Le caractere", cr,
      if t == 1:
      print "est present",
      else:
      print "est introuvable",
      print 'dans la chaine", ch

      La boucle 'while' est remplacée par un 'for' et la variable 'i' n'est plus utile, ainsi que le calcul de la longueur de la chaîne.

      Ce type d'idiome 'for' n'est pas directement utilisable en C, mais il tend à se généraliser dans les autres langages de programmation ('foreach' en PHP, itérateurs en Java 1.5, 'foreach' en C#, etc.)
    • Re: Problème script pour débutant

      Envoyé par JM le 9 Mai 2006 à 15:33
      Tout ça est très intéressant. Je comprends de mieux en mieux. Merci pour vos réponses à mes questions… un peu neuneu.
    • Re: Problème script pour débutant

      Envoyé par tarek le 5 Mai 2006 à 22:22
      salut,

      i et t sont des variables de type entier utilisées dans les boucles pour parcourir la chaine, elle sont initialisées à 0.
    • Re: Problème script pour débutant

      Envoyé par JM le 5 Mai 2006 à 23:47
      i = 0 en fait c'est une instruction qui dit à Python de commencer par le premier caractère si j'ai bien compris...
    • Re: Problème script pour débutant

      Envoyé par tarek le 6 Mai 2006 à 08:23
      oui, et while boucle tant que i est inférieur à la longueur de la chaine. Ceci étant dit, ce code (c'est peut etre voulu dans la progressio, je sais pas) n'est pas très Pythonique et ressemble à du C++.

      Pour voir si "e" est dans la chaine, j'aurais écris:


      >>> if "e" in "Monty Python Flying Circus":
      ... print "est present"
      ... else:
      ... print "est introuvable"
      ...
      est introuvable


Rendu par Ploneboard