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 :

Erreur SyntaxError: positional argument follows keyword argument


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Par défaut Erreur SyntaxError: positional argument follows keyword argument
    Bonjour,

    Pouvez-vous me dire où est le problème du code suivant? glouton
    Voici l'erreur reçu :

    SyntaxError: positional argument follows keyword argument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    S = (200,100,50,20,10,5,2,1)
    def rendu_recur(somme,S,pieces_rendues=[],ind=0):
    	if somme == 0:
    	    return pieces_rendues
    	elif S[ind] <= somme:
    	    return rendu_recur(somme=somme-S[ind],S,
            pieces_rendues.append(S[ind]),ind=ind+1)
    	elif ind == len(S)-1:
    	    return-1
    	else:
                return rendu_recur(somme=somme-S[ind],
            S,pieces_rendues.append(S[ind]),ind=0)
    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 059
    Par défaut
    somme n'est pas un paramètre nommé dans votre fonction, mais vous appelez votre fonction récursive en le nommant avec somme=, ce qui n'est pas cohérent, en plus du fait que cette fonction demande un autre paramètre non nommé S par la suite.

    Je proposerai donc de supprimer ce somme= de votre code.

  3. #3
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 512
    Par défaut
    Bonjour,
    Citation Envoyé par falyc Voir le message
    SyntaxError: positional argument follows keyword argument
    Comme l'indique le message d'erreur, un argument positionnel n'a pas le droit de se trouver après un argument nommé.
    Dans cet appel de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendu_recur(somme=somme-S[ind],S,pieces_rendues.append(S[ind]),ind=ind+1)
    Le premier argument est nommé, le deuxième et le troisième sont positionnels et le dernier est nommé.
    Une solution possible est de remplacer somme=somme-S[ind] par somme-S[ind]. Ainsi, le premier argument devient positionnel.
    Une autre solution est de remplacer S,pieces_rendues.append(S[ind]) par S=S,pieces_rendues=pieces_rendues.append(S[ind]). Ainsi, tous les arguments sont nommés.
    Plus d'infos dans cette partie du tutoriel officiel de Python : https://docs.python.org/3/tutorial/c...word-arguments

    À part ça, tu vas rapidement tomber sur une autre erreur à cause de ta manière d'appeler append. append ajoute un élément à une liste, mais ne retourne pas la liste elle-même. L'expression pieces_rendues.append(S[ind]) vaut None, donc la passer en argument de fonction n'aura pas le comportement que tu recherches.

    Citation Envoyé par fred1599 Voir le message
    somme n'est pas un paramètre nommé dans votre fonction, mais vous appelez votre fonction récursive en le nommant avec somme=, ce qui n'est pas cohérent
    Dans sa définition de fonction, les paramètres peuvent être positionnels ou nommés. Le premier argument peut être nommé si tous les suivants le sont aussi.
    Pour définir des paramètres uniquement positionnels (ce qui est possible depuis Python 3.8), la partie correspondante du tutoriel officiel est là : https://docs.python.org/3/tutorial/c...nly-parameters

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

    Sinon en Python, çà pourrait s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    S = (200,100,50,20,10,5,2,1)    
    def rendu_r(somme, ix=0):
        if somme == 0:
            return []
        q, r = divmod(somme, S[ix])
        return [ S[ix] ] * q + rendu_r(r, ix+1)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2021
    Messages : 2
    Par défaut SyntaxError: positional argument follows keyword argument
    Citation Envoyé par Pyramidev Voir le message
    Bonjour,

    Comme l'indique le message d'erreur, un argument positionnel n'a pas le droit de se trouver après un argument nommé.
    Dans cet appel de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendu_recur(somme=somme-S[ind],S,pieces_rendues.append(S[ind]),ind=ind+1)
    Le premier argument est nommé, le deuxième et le troisième sont positionnels et le dernier est nommé.
    Une solution possible est de remplacer somme=somme-S[ind] par somme-S[ind]. Ainsi, le premier argument devient positionnel.
    Une autre solution est de remplacer S,pieces_rendues.append(S[ind]) par S=S,pieces_rendues=pieces_rendues.append(S[ind]). Ainsi, tous les arguments sont nommés.
    Plus d'infos dans cette partie du tutoriel officiel de Python : https://docs.python.org/3/tutorial/c...word-arguments

    À part ça, tu vas rapidement tomber sur une autre erreur à cause de ta manière d'appeler append. append ajoute un élément à une liste, mais ne retourne pas la liste elle-même. L'expression pieces_rendues.append(S[ind]) vaut None, donc la passer en argument de fonction n'aura pas le comportement que tu recherches.


    Dans sa définition de fonction, les paramètres peuvent être positionnels ou nommés. Le premier argument peut être nommé si tous les suivants le sont aussi.
    Pour définir des paramètres uniquement positionnels (ce qui est possible depuis Python 3.8), la partie correspondante du tutoriel officiel est là : https://docs.python.org/3/tutorial/c...nly-parameters






    Merci pour la reponse
    Mais je viens de faire toutes les mdifs conseillées mais le code ne fonctionne pas, meme si en enlevant somme=, je n'ai plus le message syntaxerror,
    au mieux, le resultat ne renvoit rien.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 059
    Par défaut
    Parce que le problème est algorithmique et que si vous ne savez pas résoudre sur papier, ça n'ira pas mieux sur Python.

    Sans parler des erreurs techniques comme ne pas savoir que la méthode append renvoie la valeur None.

Discussions similaires

  1. problème de code avec un tableau
    Par richard038 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2006, 17h35
  2. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  3. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  4. Problème de code besoin d un petit depannage
    Par rakengoule dans le forum MFC
    Réponses: 3
    Dernier message: 10/10/2005, 16h25
  5. Probléme de code non portable
    Par Stany dans le forum Windows
    Réponses: 2
    Dernier message: 23/08/2005, 11h02

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