IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

[2 problèmes PYTHON] Interprétation IDLE + chaines


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 34
    Points
    34
    Par défaut [2 problèmes PYTHON] Interprétation IDLE + chaines
    bonjour à tous,

    Je crée des scripts avec python 2.6, je suit le tuto de gerard swimmen, et j'en suis aux chaines.

    L'énoncé est :

    Écrivez un script qui recopie une chaîne (dans une nouvelle variable), en insérant des
    astérisques entre les caractères.
    Ainsi par exemple, « gaston » devra devenir « g*a*s*t*o*n »

    J'ai pensé à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    chaine, etoile = "Julien", "*"
    chaine_final = ""
    i = 0
    taille = len(chaine)
     
    while (i < (taille * 2)):
    	if (i % 2 == 0):
    		chaine_final[i] = etoile[0]
    	else:
    		chaine_final[i] = chaine[i-1]
     
    	i = i + 1
     
    print chaine_final
    Mais le DOS m'affiche ça : line 8 in <module>
    chaine_final[i] = etoile[0]
    Typ error: str object does not support item assignment

    ?
    Ensuite, je vous ai dit que c'est DOS qui me renvoi ça, mais je ne peux pas interprété un fichier avec l'iDLE.

    Quand je fais ça dans l'interpréteur il me fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> python essai(.py) # je l'ai aussi rajouté pour essayer
    syntax error ...
    Peut être le fichier a interprété doit être placé autre part ?

    Merci beaucoup

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Les chaînes de caractères sont des objets immuables, tu ne peux pas assigner une valeur à l'un des caractères comme ça. Il faut recréer une chaîne à laquelle tu ajoutes au fur et à mesure.
    Tu n'as pas besoin d'utiliser etoile[0], il n'y a pas de type caractère en Python, tu peux utiliser etoile directement. Sinon, une astuce consiste à utiliser la méthode join, mais ce n'est pas le but de l'exercice.

    Concernant ta deuxième question, les ">>>" indiquent que tu es dans le mode interactif de Python. Tu peux taper directement tes instructions et il t'affichera l'éventuel résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> 1+2*3
    7
    >>> a = 2
    >>> print 2*a
    4
    >>> if a > 1:
    ...     print "OK"
    ...
    OK
    Pour lancer un script à partir d'IDLE, il faut que tu l'ouvres, ensuite tu n'auras plus qu'à utiliser Run->Run module (raccourci: F5)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    oiffrig,

    Pourquoi est ce que en faisant une boucle je n'ajoute pas au fur et à mesure ? Il me semble qu'a chaque tour j'ajoute ?

    Ensuite, quand je lance l'IDLE, le raccourci F5 ne marche pas. Il n'y a pas de menu run

  4. #4
    Nouveau membre du Club Avatar de arnaudk
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par devatt Voir le message
    Pourquoi est ce que en faisant une boucle je n'ajoute pas au fur et à mesure ? Il me semble qu'a chaque tour j'ajoute ?
    En fait tu n'ajoutes pas, mais tu assignes, c'est-à-dire que tu définis la ième lettre ( qui n'existe pas ) comme étant une lettre de chaine ou etoile, ce qui ne fonctionne pas avec une chaine.

    Pour t'en convaincre, dans une console, définis une chaine vide test, et essaye de lui assigner une lettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test=""
    test[0]="a"

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Ah oui, effectivement, dois-je d'abord définir la taille avant ?

    comme ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chaine = "test"
    chaine2 = ""
    len(chaine2) = len(chaine)
    ?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Non, tu n'as pas besoin de définir la taille.
    Voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    chaine = "gaston"
    chaine_final = ""
    i = 0
     
    while (i < len(chaine)):
        chaine_final = chaine_final + chaine[i] + "*"
        i = i + 1
     
    print chaine_final
    Tu peux aussi utiliser les +=, mais apparemment tu ne l'as pas encore vu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    chaine = "gaston"
    chaine_final = ""
    i = 0
     
    while (i < len(chaine)):
        chaine_final += chaine[i] + "*"
        i += 1
     
    print chaine_final

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Merci j'ai compris !

    pour le +=, je viens du C et C++, donc je le connaissais masi savait si c'était de même pour Python je vais essayer

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Si tu viens de la planète C-C++, tu dois donc déjà savoir programmer, c'est à dire avoir des capacités à développer des algorithmes en utilisant les ressources d'un langage donné dans sa syntaxe.
    S'il peut être formateur de faire les exercices de Swinnen pour apprendre les détails de la syntaxe dans l'écriture d'algorithme efficaces mais sans beaucoup d'astuce, je pense qu'il est aussi indispensable de se dire sur chacun de ses exercices qui me semblent assez raz les paquerettes la plupart du temps (mais il faut bien commencer aussi) que Python dispose de ressources, c'est à dire de fonctions et méthodes, qui permettent de faire en 1/2 coup de cuiller à pot ce que les solutions annonantes que demande Swinnen permettent de faire en plusieurs lignes.
    Donc après avoir résolu chaque exercice de la façon la plus rustique qui semble demandée par Swinnen, se demander quelle est la méthode agile disponible dans les ressources de Python sera, à mon avis, bien instructif aussi.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Dans ce cas précis tu peux utiliser join :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    in = "gaston"
    out = "*".join(in)
    print out
    Oups pas vu le post de oiffrig (join n'étant pas le but de l'exercice ...)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    En fait, je viens du C++, mais avec les bases, je ne sais pas programmez à proprement dit, et oui ej cherche toujours plus court, je pense qu'au fur et à mesure j'apprendrais de nouvelles choses, je ne peux tout apprendre les fonctions à peine d"barqué :

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  2. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  3. Problème d'interprétation XSL XML
    Par ForceTranquille dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/03/2006, 15h53
  4. Réponses: 5
    Dernier message: 22/09/2005, 10h34
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo