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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut TypeError: unsupported operand type(s) for //: 'str' and 'int'"
    Bonjour!
    Je suis un petit débutant en programmation.
    Je veux écrire une fonction prime_numbers qui reçoit comme paramètre un nombre entier nb et qui renvoie la liste des nb premiers nombres premiers.

    Si le paramètre n’est pas du type attendu, ou ne correspond pas à un nombre entier positif, la fonction renvoie None.

    code proposé:
    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
    def prime_numbers(n):
        nombres = [2,n-1,n+1,n+3]
        if n==0:
            return[]
        def premier(n): 
            i=2
            while i<=n and n%i!=0 :
                i=i+1
            if  i==n:
                return (True)
            else:
                return (False)
        for i in range(1, n // 2):
            if premier(i * 2 + 1) == False:
                nombres.append(2 * i + 1)
     
            return nombres
    Mais l'exécution renvoie ce message d’erreur:
    Votre programme a été interrompu par une exception:
    ""Ligne 2: TypeError: unsupported operand type(s) for //: 'str' and 'int"
    je sais que la ligne nombres = [2,n-1,n+1,n+3] ne semble pas correcte. Mais je ne m'y retrouve pas...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2015
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Ton programme semble bien confus. Pour obtenir simplement un nombre premier entre 1 et n, tu peux utiliser la bibliothèque Sympy et la fonction isprime(nombre_entier) qui retourne True ou False. Ensuite tu fais, une boucle pour avoir la liste des nb nombres premiers.
    Evidemment que tu peux aussi écrire une fonction premier comme tu as essayer de le faire.

  3. #3
    Membre averti
    Homme Profil pro
    BTS SNIR (système numérique option info & réseau)
    Inscrit en
    mai 2017
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SNIR (système numérique option info & réseau)

    Informations forums :
    Inscription : mai 2017
    Messages : 302
    Points : 365
    Points
    365
    Par défaut
    ça doit être ici for i in range(1, n // 2):, faite print(type(n)), à tout les coup n est une chaîne de caractère et non un nombre,


    sinon quelques remarques:
    en général on ne défini pas une fonction dans une autre, ou alors c'est ce qu'on sais ce qu'on fait , en général c'est quand on a besoin que notre fonction doit être dans le scope de l'autre.
    sinon il y a moyen de beaucoup plus optimiser votre code, de plus que vous sembler prendre un chemin bizarre,

    pour tester si un nombre est premier on peut regarder pour i allant de 2 à racine de n s'il n est divisible par i ou bien utiliser la bonne vielle méthode de la récursivité.

    Citation Envoyé par pzorba75 Voir le message
    tu peux utiliser la bibliothèque Sympy et la fonction isprime(nombre_entier)
    je pense qu'il s'agit là d'un but pédagogique justement, conseiller Sympy à quelqu'un qui débute n'est pas la meilleure idée

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    7 596
    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 : 7 596
    Points : 21 642
    Points
    21 642
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par JOHN LOU Voir le message
    Je suis un petit débutant en programmation.
    Oui enfin tu t'es décrit comme "admin bdd" ce qui est signe d'une certaine habitude du monde de l'informatique (sans oublier les fonctions qu'on peut écrire en pl/sql)...

    Donc comme le dit flapili il est certain que tu appelles prime_numbers() avec une chaine.
    Si par exemple ton code commence avec un truc ressemblant à ceci
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nb=input("Entrez un nombre :")
    primes_number(nb)
    alors c'est ça car la fonction input() retourne une string =>primes_number(int(nb)) !!!

    Citation Envoyé par JOHN LOU Voir le message
    nombres = [2,n-1,n+1,n+3]
    T'es sûr ??? je veux dire que si "nombres" est sensé ne contenir que des nombres premiers et que j'appelle la fonction avec "9", alors "nombres" contiendra [2, 8, 10, 12] ce qui est loin d'être ressemblant à des nombres premiers. Ou alors on ne parle pas des "mêmes" nombres premiers...

    Citation Envoyé par JOHN LOU Voir le message
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if  i==n:
        return (True)
    else:
        return (False)

    return i == n !!!

    Citation Envoyé par flapili Voir le message
    en général on ne défini pas une fonction dans une autre, ou alors c'est ce qu'on sais ce qu'on fait , en général c'est quand on a besoin que notre fonction doit être dans le scope de l'autre.
    Non là je suis plutôt d'accord avec ce qu'il a fait. Il écrit une fonction chargée de fiare un travail et il a besoin, pour cela, d'une sous-fonction qui n'a pas besoin d'être vue de tous => il la définit en sous-fonction.
    Simplement j'aurais définit la sous-fonction avant de commencer à travailler dans la fonction.
    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

Discussions similaires

  1. [V8] Unsupported operand type(s) for *: 'account.tax' and 'float'
    Par Martin.M dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 17/11/2014, 10h48
  2. Réponses: 6
    Dernier message: 15/05/2013, 14h06
  3. Réponses: 2
    Dernier message: 25/03/2009, 22h40
  4. [MySQL] Fatal error: Unsupported operand types in..
    Par Sekigawa dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/03/2008, 11h58
  5. [PEAR][DB] Unsupported operand types in Renderer.php
    Par brissou dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/05/2007, 14h50

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