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 :

Exercice condition python 3.7 [Python 3.X]


Sujet :

Python

  1. #1
    Membre actif
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Par défaut Exercice condition python 3.7
    bonjour à tous la communauté je n’arrive vraiment pas sur ce dm que je doit rendre demain je suis bloquer a la première étapes qui consiste a générer des nombres composés uniquement de 1,2 et 3 apart utiliser un regex je voit pas comment faire merci de m’aider svp et aussi je ne sais pas comment m’y prendre pour faire la condition pour compter les chiffres aidez-moi svp ?

    Nous définissons 123 nombres comme suit:1 est le plus petit nombre 123.Lorsqu'ils sont écrits en base 10, les seuls chiffres qui peuvent être présents sont "1", "2" et "3" et s'ils sont présents, le nombre de fois où ils se produisent est également un nombre de 123.Donc 2 est un nombre 123, car il se compose d'un chiffre "2" et 1 est un nombre 123.Par conséquent, 33 est également un numéro 123 car il se compose de deux chiffres "3" et 2 est un numéro 123.D'un autre côté, 1111 n'est pas un numéro 123, car il contient 4 chiffres "1" et 4 n'est pas un numéro 123.Dans l'ordre croissant, les 123 premiers chiffres sont:1,2,3,11,12,13,21,22,23,31,32,33,111,112,113,121,122,123,131,…Soit F (n)être le nième numéro 123.Par exemple F (4) = 11, F (10) = 31, F (40) = 1112, F (1000) = 1223321 et F (6000) = 2333333333323

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par amina3020- Voir le message
    la première étapes qui consiste a générer des nombres composés uniquement de 1,2 et 3 apart utiliser un regex je voit pas comment faire merci de m’aider svp et aussi je ne sais pas comment m’y prendre pour faire la condition pour compter les chiffres aidez-moi svp ?
    Soit N le nombre que vous savez fabriquer avec une regex, len(str(N)) vous donnera le nombre de chiffres.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Par défaut
    d’accord mais du coup le code ne marcheras pas à la fin avec l’utilisation d’un regex

  4. #4
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    d’accord mais du coup le code ne marcheras pas à la fin avec l’utilisation d’un regex
    Quel code ? Qui a vue un code ?

  5. #5
    Membre chevronné
    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
    Par défaut
    Si vous ne voyez pas comment faire et bien il va falloir comprendre mathématiquement ce qu'est un nombre en base N,

    pas exemple le nombre 123456 en base 10 s'écrira 105 x 1 + 104 x 2 + 103 x 3 + 102 x 4 + 101 x 5 + 100 x 6, 4 s'écrira 100 x 4.

    en base 3 pour écrire 4(représentation base 10) ça sera donc 31 x 1 + 30 x 1, donc 11.


    La question est donc comment faire pour que l'ordi trouve que 4 c'est 31 x 1 + 30 x 1

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par flapili Voir le message
    Si vous ne voyez pas comment faire et bien il va falloir comprendre mathématiquement ce qu'est un nombre en base N
    Disons qu'il faut déjà maîtriser çà pour imaginer comment sont codés les nombres 123.
    Ce qui fait beaucoup de pré-requis (mathématiques) avant d'imaginer coder quoi que ce soit.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    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
    Ce que vous proposez (écrire le nombre donné en paramètre en base 3, et décaler les digits de 1 valeur c-à-d transformer le 0 en 1, le 1 en 2 et le 2 en 3) a tout de meme un bémol : vous ne vérifiez pas que le nombre de chiffre présent dans le nombre est lui même un nombre 123.

    Dans l'exemple donné, F (6000) = 2333333333323 est un nombre 123 car ne contient que des 2 et des 3, que le nombre de 2 est 2 (qui est lui meme un nombre 123) et que le nombre de 3 est 11 (et 11 est un nombre 123).

    Mais si je considère le nombre 233333333332 par exemple (le même nombre qu'avant, mais sans le dernier 3), et bien ce n'est pas un nombre 123, car ce nombre contient 10 apparitions du chiffre 3, et 10 n'est pas un nombre 123.

    Notez d'ailleurs que 6000 s'écrit 22020020 en base 3, donc au mieux on obtiendrait 33131131, qui n'est donc pas le nombre 2333333333323 présenté dans l'exemple.


    Donc à mon avis la seule façon de s'en sortir c'est de coder une fonction récursive.

    Après je ne sais pas si l'exercice c'est d'implémenter une fonction F, qui donne le N-ième nombre 123, ou bien s'il faut implémenter une fonction qui étant donné un nombre, va dire s'il est 123 ou pas.

    Voici ce que je propose :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    from collections import Counter
     
    def is123number(N):
      res = False
      ref = {'1','2','3'}
      x = str(N)
      if x in ref : return True
      if not set(x).issubset(ref) : return False
      cnt = Counter(x)     
      return all( is123number(v) for v in cnt.values() )
     
     
    print(is123number(2333333333323))  ### Vrai
    print(is123number(233333333332))   ### Faux
     
     
    def proposenext123number(n):
        ### Input : N, un nombre 123
        ### Output : le prochain nombre 123 qui ne contient que des 1,2 ou 3 (mais qui n'est pas forcement un nombre 123)
        if int(n) <=3 : return [1,2,3,11][int(n)]
        x=str(n)
        k=len(x)-1
        while k>=0:
            if x[k] != '3' :
                x=x[:k]+str(int(x[k])+1)+'1'*len(x[k+1:])
                break
            k-=1
        if k==-1: ### On a donc que des '3' dans le nombre
            x = '1'*(len(x)+1)
        return x
     
    def next123number(n):
        ### Input : N, un nombre 123
        ### Output : le prochain nombre 123
        x=proposenext123number(n)
        while not is123number(x):
            x=proposenext123number(x)
        return x
     
    def F(N):
        x=1
        for i in range(N-1):
            ### print('--',i)  ### On peut afficher ici pour ce rendre compte de la progression du calcul
            x=next123number(x)
        return x
     
    print(F(2))
    print(F(4))
    print(F(6))
    print(F(7))
    print(F(40))
    print(F(1000))
    print(F(2000))
    print(F(3000))
    print(F(4000))
    print(F(5000))
    #### Jusqu'à 5246 algo rapide, après c'est super lent
    #print(F(5500))
    #print(F(6000)) ### Prends 2-3 minutes chez moi

  8. #8
    Membre actif
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Par défaut
    merci beaucoup

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

Discussions similaires

  1. [Python 3.X] [Histogramme]exercice Apprendre Python de G. Zwinnen
    Par bergenist dans le forum Général Python
    Réponses: 4
    Dernier message: 15/10/2015, 00h43
  2. Exercice Tp Python Licence
    Par lorli911 dans le forum Général Python
    Réponses: 4
    Dernier message: 01/05/2015, 18h29
  3. Exercice en python besoin de votre aide
    Par Takahitekun dans le forum Général Python
    Réponses: 6
    Dernier message: 14/01/2013, 16h10

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