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 :

Les choses se corsent pour Suppadrakn


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut Les choses se corsent pour Suppadrakn
    Un titre qui en dit long n'est - ce - pas ?

    Me voila rendu au chapitre concernant les fonctions ( diantre ! On sent de suite que le niveau à monté ). On y retrouve pas mal d'informations et surtout pas mal de nouveau vocabulaire à démêler et assimiler (arguments, paramètres etc..)

    Tranquillement donc je découvre ce qu'est une fonction et je pense avoir clairement compris que la fonction nous permettais d'alléger notre code d'une part mais aussi de rendre notre travail plus efficace en nous évitant ( si besoin ) de réécrire plusieurs fois les même choses.

    Je me heurte ce soir (déjà) au premier exercice ( voila qui est déroutant ) et je fais donc appel à vous afin d'éclairer ma lanterne.

    Nous nous situons à l'exercice e.44 dont voici la consigne :

    Définissez une fonction ligneCar(n,ca) qui renvoie une chaîne de n caractère ca.
    Comme à l'accoutumé, je commence par vous exprimez mon raisonnement :

    On commence tout logiquement par appelé la fonction soit

    Je définis ensuite trois variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    compteur = 0
    ret= str("ca")
    liste= []
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While a <= n:
        compteur = compteur + 1
        list.append(ret)
    donc tant que la valeur utilisateur n'est pas atteinte on incrèmente le compteur
    et on ajoute à ma liste la chaîne de caractère "ça"

    Pour terminé je demande à la fonction de retourner et donc d'afficher ma liste, soit :

    Qu'en est-il maintenant du corps principal du programme ? Les choses me semblent toute simples pourtant :

    Je demande tout d'abord à l'utilisateur d'entrer une valeur qui viendra donc remplacer mon "n"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valeur = raw_input("Veuillez entrer une valeur :")
    nouveau paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afCa = "ca" ou éventuellement afCa = str("ca")
    j'appel ensuite ma fonction en utilisant mes deux variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligneCar (valeur, afCa)
    Petite mise en situation (désolé au passage si mon poste paraît lourd mais disons qu'en écrivant tout ceci de manière détaillé, je me dis parfois qu'une illumination....Enfin vous voyez.)

    L'utilisateur, entrer le chiffre 9.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while a <= 9 :
    a = a + 1
    list.append(afCa) #soit ajouté un "ca" à ma liste.
    Avec ça, il devrait donc me retourner la liste suivante :

    ca, ca, ca, ca, ca, ca, ca, ca
    Et pour ceux et celles qui préfère la version courte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    ####################################
    # Programme Python Type            #
    # Sujet : exercice e.44            #
    ####################################
     
    ####################################
    # Définire une fonction            #
    # ligneCar(n, ca) qui renvoie une  #
    # chaine de n caractere ca.        #
    ####################################
     
     
    ####################################
    # Définition de(s) fonctions :     #
    ####################################
     
    def ligneCar(n, ca):
        a = 0
        ret = str("ca")
        liste = []
        while a <= n:
            a = a + 1
            list.append(ret)
        return(liste)
     
     
    ####################################
    # corps principal du programme     #
    ####################################
     
     
    valeur = raw_input("Entrer une vleur:")
    AfCa = "ca"
    ligneCar(valeur, AfCa)

    Ou se situe mon erreur ?

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Une ligne de n caractère ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def ligneCar(n, ca):
    ...     return ca * n
    ... 
    >>> ligneCar(10, 'a')
    'aaaaaaaaaa'
    Pensez simple.

    @+

  3. #3
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Salut, concernant tes erreurs...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def ligneCar(n, ca):
        a = 0
        #comme dit par PauseKawa, c'est pas la chaine "ca" que tu dois retourner
        #mais le contenu de ta variable <ca>(caractère)
        ret = str("ca")
        #nom de variable <liste>
        liste = []
        while a <= n:
            a = a + 1
            #ici, tu te sers du type <list> au lieu de ta variable <liste>
            list.append(ret)
        #Il t'es demandé de retouner une chaine de caractère. <liste> est une <list>
        return(liste)
    En suivant l'idée des listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def ligneCar(n, ca):
        a = 0
        liste = []
        while a <= n:
            a = a + 1
            liste.append(ca)
        #"".join(un_ensemble_contenant_des_str) retournes une str constituée
        #de tous les éléments de l'ensemble concatenés
        return "".join(liste)
    en se libérant de while (au profit de for) ainsi que des listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def ligneCar(n, ca):
        ret = ""
        for i in range(n):
            ret += ca
        return ret
    et pour le faire hard-pythonic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def ligneCar(n, ca):
        #Produit un "ensemble" contenant n-fois <ca> et concatène le tout.
        return "".join(ca for i in range(n))
    Bien que le plus simple étant comme l'a fait Pausekawa
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  4. #4
    Membre éclairé Avatar de Lujeni
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 52
    Par défaut
    Ma proposition pour ceux qui aime le one shot
    C’est exactement la même chose que précédemment, seule la syntaxe change:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> ligneCar = lambda n, ca: ca*n
    >>> ligneCar(10, 'a')
    'aaaaaaaaaa'

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut


    Effectivement....Penser simple, et que dire d'autre si ce n'est merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      #ici, tu te sers du type <list> au lieu de ta variable <liste>
            list.append(ret)
    Arf une bien belle erreur, j'aurais du prendre le temps de me relire un peu mieux...En espérant apprendre de mes erreurs. Au passage, que signifie exactement :


  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2011
    Messages : 65
    Par défaut
    Après vos dernières explications et une relecture attentive du chapitre, j'enchaîne sur l'exercice e.45 :

    Définir une fonction surfCercle(R), cette fonction doit renvoyer la surface, l'aire d'un cercle dont ou lui fournit le rayon R en argument.
    Cette fois-ci j'arrive avec un code qui fonctionne Je ne sais pas si j'ai appliqué de façon formel la magnifique expression de Monsieur Kawa ( Pensez - simple ) mais le tout fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    ####################################
    # Programme Python Type            #
    # Sujet : exercice e.45            #
    ####################################
     
    ####################################
    # Définire une fonction            #
    # surfCercle qui renvoie la        #
    # surface (l'aire) d'un cercle     #
    # dont on lui fournit le rayon     #
    ####################################
     
     
    ####################################
    # Définition de(s) fonctions :     #
    ####################################
     
    def surfCercle(R):
        return (3.14159 * R * R)
     
     
    ####################################
    # corps principal du programme     #
    ####################################
     
    print ("Veuillez entrer le Rayon du cercle:")
    rayon = float(raw_input())
    cercle = surfCercle(float(rayon))
    print (cercle)
    edit : Je me suis rendu compte en travaillant sur l'exercice 46 que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cercle = surfCercle(float(rayon))
    flot n'était pas nécessaire puisque j'avais déjà réaliser la conversion via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rayon = float(raw_input())

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rayon = float(raw_input())
    cercle = surfCercle(float(rayon))
    Pas besoin de faire deux fois la conversion. Mais là je chipote.

    Pour ce qui est du 'pensez simple' l'auteur ne tend pas de piège, surtout en abordant un autre sujet. Regardez ce qu'il vous présente, rajoutez y ce qu'il a déjà dit si cela ne suffit pas mais ne vous perdez pas dans des considérations qui vont vous faire perdre le but.

    @afranck64 ni range ni .join() ne sont abordés (ni lower(), upper() etc...)
    L'auteur survole le langage pour arriver rapidement aux fonctions puis a tkinter. Pour le message précédent j'ai eu du mal a trouver in et not...

    @+

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/10/2013, 16h41
  2. Réponses: 2
    Dernier message: 24/04/2008, 16h42
  3. les event de IBQuery pour activer,desactiver la Transaction?
    Par amad206 dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/03/2005, 14h12

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