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 :

une calculette simple


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut une calculette simple
    Créer une calculette simple qui réalisera les opérations addition et multiplication sur des entiers.

    Ce script prendra les arguments suivants :
    opération (add ou mult) entier1 entier2 ... entierN
    et renverra le résultat de l'opération demandée.

    Exemple :
    $ ./calculette.py add 1 2 3 4 5
    resultat=15

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Salut,

    Nous avons pour politique de ne pas faire les exercices d'école à la place des étudiants.

    Mais nous acceptons d'aider, donc montre-nous ce que tu as déjà fait et explique où tu bloques.

    Éventuellement, si tu as un message d'erreur copie-le ici dans son intégralité.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    j'ai essayer de faire ce script:

    ******************

    Code bash : 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
    #!/bin/bash
     
    taille="$#-2"
    entier=0
     
    if [$1="add"];then
    {
        for(1=0;1<taille;i--);do
     
            entier=$entier+$1
            shift
         done
         echo "resultat=$entier"
    }
    elif [$1="mult"];then
    {
        for(1=0;1<taille;i--);do
     
            entier=$entier*$1
            shift
        done
        echo "resultat=$entier"
    }
    else
        echo "operation impossible"
    fi

    ******************

    Mais ça ne marche pas.

  4. #4
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Points : 704
    Points
    704
    Par défaut
    premièrement :
    deuxièmement : c'est pas du python donc bon ... si j'ai bien compris le bute de l'exercice (que je trouve très moyen) est de produire du python

    bon, il faut que vous faut faire (en python bien sûr)
    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
    créez une fonction qui prend n argument (regardez sys.argv)
    	vérifier que le 1er arg est add ou mult
    		vérifier que la fonction prend bien plusieurs arguments (>=2)
    			vérifier que arg<sub>2</sub>, arg<sub>3</sub>, ..., arg<sub>n</sub> soit des nombres
    				si 1er argument vaut add
    					...
    					afficher résultat
    				sinon si 1er argument vaut mult
    					...
    					afficher résultat
    			sinon
    				afficher un message d'erreur expliquant à l'utilisateur comment utiliser le script
    		sinon
    			afficher un message d'erreur expliquant à l'utilisateur comment utiliser le script
    	sinon
    		afficher un message d'erreur expliquant à l'utilisateur comment utiliser le script
    je vous est mâcher le travail de réflexion sur le code (après tout vous avez fait l'effort d'une production, même si elle n'est pas en python), mais je pense que vous allez vous mordre les doigts sur certains points que j'ai omis de préciser.
    Bien sur il est possible de faire plus concis, mais chaque chose en son temps
    Bon courage.

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 302
    Points : 6 782
    Points
    6 782
    Par défaut
    Citation Envoyé par bkam20 Voir le message
    1 = 0 ??
    Avec les maths modernes je suis perdu.

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    Citation Envoyé par VinsS Voir le message
    1 = 0 ??
    Avec les maths modernes je suis perdu.
    C'est peut-être la lettre L minuscule...

  7. #7
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Eh !
    Ne regardez pas si vous n'avez pas trouvé une solution pas vous-même, sinon j'irai hanter et faire boguer vos codes python pour l'éternité en leur jetant des mauvais sort avec quelques Exceptions aléatoires.

    Deux simples exemples, l'un utilisant itertools, l'autre les méthodes de float.
    Code python : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    import itertools
    import operator
     
    def operation(type_, *nums) :
        try :
            res = tuple(itertools.accumulate(nums, getattr(operator, type_)))
        except ZeroDivisionError :
            res = 'La tête à toto 0÷0',
            #res = 'nan',
        except Exception as e :
            res = e.args
        if res :
            return res[-1]
        else :
            return 0
     
    def operationF(type_, *nums) :
        res = float(nums[0])
        try :
            for n in nums[1:] :
                res = getattr(float, type_)(res, n)
        except ZeroDivisionError :
            res = 'La tête à toto 0÷0'
        return res
     
    if __name__ == '__main__' :
        import sys
     
        operateurs = {
            ('+', 'add', 'plus', 'a', 'additionner',):'__add__',
            ('-', 'sub', 'moins', 's', 'soustraire',):'__sub__',
            ('x', 'mul', 'fois', 'm','multiplier', '×'):'__mul__',
            ('/', 'div', 'quotient', 'd', 'diviser', '÷'):'__truediv__',
        }
     
        help = '({}) numérique, numérique, (numerique, ...)'.format(
            ', '.join([n[0] for n in operateurs])
        )
        print(help)
     
        if len(sys.argv) > 3 :
            for o in operateurs:
                if sys.argv[1] in o:
                    try:
                        nums = tuple(float(n) for n in sys.argv[2:])
                    except ValueError :
                        res = (
                            'Impossible d\'effectuer une opération'
                            ' avec des valeurs non numériques.'
                        )
                    else :
                        #res = operation(operateurs[o], *nums)
                        res = operationF(operateurs[o], *nums)
                    break
            else:
                res = 'Opérateur {} non supporté.'.format(sys.argv[1])
            print('>>>', res)


    Que j'estime pas trop mal, jusqu'à ce wiztricks vienne casser mon trip pour torcher ça avec 1 ou 2 lambdas et une boucle voir une liste en intention

    Je m'ennuyais

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Que j'estime pas trop mal, jusqu'à ce wiztricks vienne casser mon trip pour torcher ça avec 1 ou 2 lambdas et une boucle voir une liste en intention
    Avec un truc comme çà par exemple?

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sys
    import operator
    from functools import reduce
     
    op = getattr(operator, sys.argv[1])
    print ( reduce( op,
            (int(x) for x in sys.argv[2:]),
            1 if op is operator.mul else 0,
            )
        )

    mais c'est un peu minimaliste.

    - W

  9. #9
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Pas mal le reduce

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Encore plus court:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
     
    print(eval({'add': '+', 'mul': '*'}[sys.argv[1]].join(sys.argv[2:])))
    Pas certain que cela motive le PO à ouvrir un tuto pour apprendre les constructions de base.
    Mais on est aussi là pour se détendre un peu.

    - W

  11. #11
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Oui, mais là, c'est de la triche

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    Et si besoin, une solution simple en built-in bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    op=${1/mult/*}
    op=${op/add/+}
    shift
    lst=$@
    lst=${lst// /"$op"}
    echo "resultat=$((lst))"

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bistouille Voir le message
    ...une liste en intention
    Bonjour

    Listes en "intension" (qui peut se traduire par "listes par définition") et qu'on peut opposer à "extension" qui serait plus de l'ordre des exemples...

  14. #14
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Corrige tes propres fautes d"orthographes avant de t'occuper des miennes

    Les personnes dans ton genre, avec cette suffisance, ce ton agressif dissimulé, je les aime pas, et je t'ai déjà demandé par mp de m"ignorer, sur quoi tu n'as su répondre que par une vulgaire insulte.
    Bref, ignore-moi, ainsi, moi, le forum ne s'en porteront que mieux.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Corrige tes propres fautes d"orthographes avant de t'occuper des miennes
    Ah ? Lesquelles ?? Parce que tu aurais pu m'en montrer quelques unes...
    Au fait, pas de "s" à "orthographe" car il n'y en a qu'une seule d'"orthographe". Mais c'est pile poil celle que tu ne connais pas.

    Citation Envoyé par bistouille Voir le message
    Les personnes dans ton genre, avec cette suffisance, ce ton agressif dissimulé, je ne les aime pas, et je t'ai déjà demandé par mp de m"ignorer, ce à quoi tu n'as su répondre que par une vulgaire insulte.
    Bref, ignore-moi, ainsi, moi, le forum ne s'en porteront que mieux.
    Joli. Tu sais donc détecter les "tons agressifs dissimulés" ??? Je suis whaou tellement impressionné par ton discernement... Si en plus tu sais danser et jongler tu dois être vraiment un type extraordinaire. Pas étonnant alors que tu te permettes de parler au nom du forum...

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    J'ai enfin réussi à faire ce script. Je vous remercie de m'avoir aidé a faire mon premier script en bash.
    Je suis désolé pour mes fautes de frappes comme: "1=0" au lieu de "i=0".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. InputMismatchException dans une calculette simple
    Par nevoa dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 12/06/2014, 17h54
  2. le meilleur SGBD pour une application simple
    Par nousss77 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 23/09/2005, 07h45
  3. [C#] Redirection d'une frame vers une page simple
    Par st0j dans le forum ASP.NET
    Réponses: 6
    Dernier message: 17/06/2005, 15h42
  4. Conseils sur une API simple pour Windows
    Par alejandro dans le forum Choisir un environnement de développement
    Réponses: 4
    Dernier message: 28/04/2005, 18h12
  5. Réponses: 4
    Dernier message: 28/12/2003, 15h50

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