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 :

fonction : calcul le quotient avec soustraction


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Par défaut fonction : calcul le quotient avec soustraction
    Bonjour,

    Je vais écrire une fonction qui calcule le quotient de la division entière de a par b. J'ai fait avec la divison comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    def quotient(a,b):
        if a%b != 0:
            return a//b
    print(quotient(9,5))
    Mais je ne peux utiliser que l'opération de soustraction. Pourriez-vous m'aider comment je dois faire ? Peut on utiliser la condition if ? Merci

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    C'est plus un problème de maths :
    retirer b à a tant que a >= b ?

  3. #3
    Membre très actif

    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
    Billets dans le blog
    1
    Par défaut
    En n'utilisant que des soustractions, affectations et comparaisons, on pourrait aboutir à un truc comme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def quotient(a, b) :
        aa = a
        while a >= b :
            a -= b
        aa -= a
        aaa = aa
        bb = b - 1
        while aa > 0 :
            aa -= b
            aaa -= bb
        return aaa
     
    print(quotient(17, 3))
    Sûrement améliorable au niveau de la seconde boucle, la première représentant le modulo.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bistouille Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def quotient(a, b) :
        aa = a
        while a >= b :
            a -= b
        aa -= a
        aaa = aa
        bb = b - 1
        while aa > 0 :
            aa -= b
            aaa -= bb
        return aaa

    Sûrement améliorable au niveau de la seconde boucle, la première représentant le modulo.
    Et aussi au niveau des noms des variables. Ou plutôt non. En fait améliorable au niveau de tout. Déjà par exemple pourquoi diable calculer le modulo ????? T'as qu'à calculer aussi le nombre "pi" si tu tiens tant à faire faire des cycles inutiles à ta fonction !!!!!
    Ah oui, c'est vrai, quelqu'un qui ne croit pas que la récursivité entraine des contraintes de complexité (et qui m'abreuve de sarcasmes par MP suite à ce post tout en évitant soigneusement d'y répondre en public) n'a probablement aucune honte à coder comme un porc.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def quotient(dividende, diviseur) :
    	res=dividende
    	calc=dividende
    	while calc >= diviseur:
    		calc-=diviseur
    		res-=1
    	return dividende - res
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Je ne comprends rien au code de bistouille et je n'ai même pas envie de chercher à comprendre. J'aurais plutôt vu qqchose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def quotient(a, b) :
        quotient = 0
        while a >=b:
            a = a - b
            quotient = quotient + 1
        reste = a
        return reste, quotient
     
    print(quotient(17, 3))
    print(quotient(68, 3))
    print(quotient(72, 3))
    que l'on peut simplifier un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def quotient(a, b) :
        quotient = 0
        while a >=b:
            a = a - b
            quotient += 1
        return a, quotient
     
    print(quotient(17, 3))
    print(quotient(68, 3))
    print(quotient(72, 3))

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Je ne comprends rien au code de bistouille et je n'ai même pas envie de chercher à comprendre.
    C'est naturel. Qui donc aurait envie de chercher à comprendre son paté ???
    Citation Envoyé par marco056 Voir le message
    J'aurais plutôt vu qqchose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def quotient(a, b) :
        quotient = 0
        while a >=b:
            a = a - b
            quotient = quotient + 1
        reste = a
        return reste, quotient
    C'était aussi mon idée de départ. Toutefois si tu lis bien le premier post, tu verras que tu n'as droit qu'aux soustractions. D'où la pirouette d'initialiser le résultat au dividende de départ puis de soustraire en final ce résultat au même dividende.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'était aussi mon idée de départ. Toutefois si tu lis bien le premier post, tu verras que tu n'as droit qu'aux soustractions. D'où la pirouette d'initialiser le résultat au dividende de départ puis de soustraire en final ce résultat au même dividende.
    Nos messages se sont croisés : j'ai modifié le mien en cours de route et je n'avais pas vu ta solution.
    C'est un peu tordu, je trouve. Cela ne revient-il pas à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quotient = quotient -(-1)
    ?

  8. #8
    Membre averti
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2018
    Messages : 27
    Par défaut
    Merci à vous tous.

    J'ai une question sur le code de marco056.

    Je n'ai jamais utiliser le nom de la fonction comme un compteur. Est-il courant de faire comme ca ?



    Citation Envoyé par marco056 Voir le message
    Je ne comprends rien au code de bistouille et je n'ai même pas envie de chercher à comprendre. J'aurais plutôt vu qqchose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def quotient(a, b) :
        quotient = 0
        while a >=b:
            a = a - b
            quotient = quotient + 1
        reste = a
        return reste, quotient
     
    print(quotient(17, 3))
    print(quotient(68, 3))
    print(quotient(72, 3))
    que l'on peut simplifier un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def quotient(a, b) :
        quotient = 0
        while a >=b:
            a = a - b
            quotient += 1
        return a, quotient
     
    print(quotient(17, 3))
    print(quotient(68, 3))
    print(quotient(72, 3))

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Non, il pourrait très bien s'appeler toto que ça serait pareil. En fait il l'a appelé quotient parce que c'est le quotient justement (ou du moins ça finit par le devenir). Il n'y a pas trop d'ambiguïté avec le nom de la fonction vu qu'une fonction s'appelle avec des parenthèses et ses éventuels arguments.

    On peut assimiler à une sorte de coutume informatique le fait de nommer les variables avec ce qu'elles sont censées contenir.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par lucie34 Voir le message
    Merci à vous tous.

    J'ai une question sur le code de marco056.

    Je n'ai jamais utiliser le nom de la fonction comme un compteur. Est-il courant de faire comme ca ?

    OUPS ! Bien vu.
    Non, il vaut mieux éviter ce genre de chose : désolé.
    Change le nom du compteur ou celui de la fonction.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par marco056 Voir le message
    C'est un peu tordu, je trouve.
    C'est pas moi qui ai imposé les contraintes de départ
    Et malheureusement je ne vois pas plus simple pour les respecter. Je sais que ce code fonctionnera dans toutes les situations d'une division euclidienne possible car quoi qu'il arrive le résultat ne peut pas être supérieur au dividende (donc "res" ne sera jamais négatif) mais je ne vois pas mieux.

    Citation Envoyé par marco056 Voir le message
    Cela ne revient-il pas à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quotient = quotient -(-1)
    ?
    Mathématiquement oui effectivement. Mais comme ça se simplifie en addition je pense que les contraintes initiales ne sont plus respectées. Après bien entendu tout dépend de la décision du donneur d'ordre...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Mathématiquement une soustraction est une addition.
    Donc la consigne je pense c'est surtout de faire l'exo avec + et - mais pas avec la division, la multiplication ni le modulo.

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

Discussions similaires

  1. calcul de somme avec fonction récursif
    Par KEVIN.DLL dans le forum Débuter
    Réponses: 2
    Dernier message: 19/10/2018, 13h26
  2. Réponses: 1
    Dernier message: 20/05/2013, 13h46
  3. Calculer des dates avec fonction Gel de temps
    Par maxdata dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2012, 13h01
  4. Calcule de distance avec la fonction distanceTo()
    Par etude_geo dans le forum IGN API Géoportail
    Réponses: 7
    Dernier message: 20/06/2012, 14h11
  5. Fonction de domaine - Calcul de cumul avec filtre "date et heure".
    Par Fabrice7627 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/08/2007, 05h16

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