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 :

Impossible de sortir la valeur d'une fonction


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut Impossible de sortir la valeur d'une fonction
    Bonjour ,

    Je travaille actuellement sur une fonction et je rencontre des problèmes , mon jeux Pygame consiste à ce que mon personnage ramasse une rose et que celle-ci réaparaisse aléatoirement , néanmoins il y'a des obstacles sur la carte
    donc qu'elle puis réapparaître partout sauf sur les obstacles , voici mon code :

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
     
    def obstacle(x,y) :
     
        obstacle_arbre1.x =115
        obstacle_arbre1.y =107
     
        obstacle_arbre2.x =115
        obstacle_arbre2.y =107
     
        obstacle_boitepostale1.x =39
        obstacle_boitepostale1.y =44
     
        obstacle_boitepostale2.x =39
        obstacle_boitepostale2.y =44
     
        obstacle_maison.x =185
        obstacle_maison.y =115
     
        x = randint(0,600)
        y = randint(0,450)
     
     
        rect_obstacle_arbre1.x =40
        rect_obstacle_arbre1.y =95
     
        rect_obstacle_arbre2.x =40
        rect_obstacle_arbre2.y =265
     
        rect_obstacle_boitepostale1.x =185
        rect_obstacle_boitepostale1.y =20
     
        rect_obstacle_boitepostale2.x =185
        rect_obstacle_boitepostale2.y =430
     
        rect_obstacle_maison.x =285
        rect_obstacle_maison.y =217
     
     
        Liste_arbre1x =  [randint(0,rect_obstacle_arbre1.x-20),randint(20+ rect_obstacle_arbre1.x + obstacle_arbre1.x ,620)]
        Liste_arbre1y =  [randint(0,rect_obstacle_arbre1.y-20),randint(20+ rect_obstacle_arbre1.y + obstacle_arbre1.y,450)]
     
        Liste_arbre2x =  [randint(0,rect_obstacle_arbre2.x-20),randint(20+ rect_obstacle_arbre2.x + obstacle_arbre2.x ,620)]
        Liste_arbre2y =  [randint(0,rect_obstacle_arbre2.y-20),randint(20+ rect_obstacle_arbre2.y + obstacle_arbre2.y,450)]
     
        Liste_boitepostale1x =  [randint(0,rect_obstacle_boitepostale1.x-20),randint(20+ rect_obstacle_boitepostale1.x + obstacle_boitepostale1.x ,620)]
        Liste_boitepostale1y =  [randint(0,rect_obstacle_boitepostale1.y-20),randint(20+ rect_obstacle_boitepostale1.y + obstacle_boitepostale1.y,450)]
     
        Liste_boitepostale2x =   [randint(0,rect_obstacle_boitepostale2.x-20),randint(20+ rect_obstacle_boitepostale2.x + obstacle_boitepostale2.x ,620)]
        Liste_boitepostale2y =  [randint(0,rect_obstacle_boitepostale2.y-20),randint(20+ rect_obstacle_boitepostale2.y + obstacle_boitepostale2.y,450)]
     
        Liste_maisonx =  [randint(0,rect_obstacle_maison.x-20),randint(20+ rect_obstacle_maison.x + obstacle_maison.x ,620)]
        Liste_maisony =  [randint(0,rect_obstacle_maison.y-20),randint(20+ rect_obstacle_maison.y + obstacle_maison.y,450)]
     
     
        if rect_obstacle_arbre1.x-20 < x < 20+ rect_obstacle_arbre1.x + obstacle_arbre1.x and rect_obstacle_arbre1.y-20< y <20+ rect_obstacle_arbre1.y + obstacle_arbre1.y  : #arbre1
            x = random.choice(Liste_arbre1x)
            y = random.choice(Liste_arbre1y)
     
        elif rect_obstacle_arbre2.x-20 < x < 20+ rect_obstacle_arbre2.x + obstacle_arbre2.x and rect_obstacle_arbre2.y-20< y <20+ rect_obstacle_arbre2.y + obstacle_arbre2.y  : #arbre2
            x = random.choice(Liste_arbre2x)
            y = random.choice(Liste_arbre2y)
     
        elif rect_obstacle_boitepostale1.x-20 < x < 20+ rect_obstacle_boitepostale1.x + obstacle_boitepostale1.x and rect_obstacle_boitepostale1.y-20< y <20+ rect_obstacle_boitepostale1.y + obstacle_boitepostale1.y  : #boitepostale1
            x = random.choice(Liste_boitepostale1x)
            y = random.choice(Liste_boitepostale1y)
     
        elif rect_obstacle_boitepostale2.x-20 < x < 20+ rect_obstacle_boitepostale2.x + obstacle_boitepostale2.x and rect_obstacle_boitepostale2.y-20< y <20+ rect_obstacle_boitepostale2.y + obstacle_boitepostale2.y  : #boitepostale2
            x = random.choice(Liste_boitepostale2x)
            y = random.choice(Liste_boitepostale2y)
     
        elif rect_obstacle_maison.x-20 < x < 20+ rect_obstacle_maison.x + obstacle_maison.x and rect_obstacle_maison.y-20< y <20+ rect_obstacle_maison.y + obstacle_maison.y  : #maison
            x = random.choice(Liste_maisonx)
            y = random.choice(Liste_maisony)
     
        return x,y
     
     
     
    #[...](plus bas dans le programme) 
     
            if rect_perso.colliderect(rect_rose)==True :
                rect_rose.x= obstacle(x)
                rect_rose.y= obstacle(y)
                recup_rose.play()
                score = score+1
                affichage()
    Le message d'erreur est : name 'x' is not defined

    Je ne comprends pas d'où vient le problème , merci à toute personne qui m'aidera !

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

    Citation Envoyé par Tayzer Voir le message
    Le message d'erreur est : name 'x' is not defined
    Le message d'erreur contient un numéro de ligne et l'instruction qui a provoqué l'erreur. Si vous ne l'indiquez pas, on ne peut pas l'inventer d'autant que vous ne postez pas un code qui permette de reproduire le problème.

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

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Tayzer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def obstacle(x,y) :
        x = randint(0,600)
        y = randint(0,450)
    La fonction n'a pas besoin de ces deux paramètres vu qu'elle les écrase. Pour le reste, voir réponse de wiztricks.
    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]

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Le message d'erreur contient un numéro de ligne et l'instruction qui a provoqué l'erreur. Si vous ne l'indiquez pas, on ne peut pas l'inventer d'autant que vous ne postez pas un code qui permette de reproduire le problème.

    - W

    Bonjour , la ligne qui pose problème à Python (surlignée en rouge ) est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rect_rose.x= obstacle(x)
    où il sort : NameError: name 'x' is not defined

    je ne pense pas que l'erreur soit directement sur cette ligne c'est pour cela que je ne l'ai pas indiquée

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

    Citation Envoyé par Tayzer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rect_rose.x= obstacle(x)
    où il sort : NameError: name 'x' is not defined
    je ne pense pas que l'erreur soit directement sur cette ligne c'est pour cela que je ne l'ai pas indiquée
    Si Python le dit, c'est que c'est vrai!
    Lancez l'interpréteur Python et jouez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def f(x, y): pass
    ...
    >>> f(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'x' is not defined
    >>>
    Pour que x ait été défini, il faut lui assigner quelque chose (et là on a la surprise suivante):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> x = 1
    >>> f(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f() missing 1 required positional argument: 'y'
    >>>
    Et si vous n'avez pas encore une idée très claire sur ce que sont "variables", "portée des variables", "fonctions",... ben, vous ne pouvez rien faire d'autre que les exercices d'un tuto. pour saisir un peu mieux tout çà.

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

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Je comprends...

    Donc , est-ce un problème de structure ou simplement d'écriture ? Aiguillez moi svp ...

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

    Citation Envoyé par Tayzer Voir le message
    Donc , est-ce un problème de structure ou simplement d'écriture ? Aiguillez moi svp ...
    Vous avez défini une fonction "obstacle" qui attend 2 arguments (dont elle ne fait rien).
    Si vous ne savez pas pourquoi, désolé!
    A quoi pensiez-vous lorsque vous avez écrit çà? Je ne suis pas dans votre tête!

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

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    X et y sont 2 nombres aléatoires compris respectivement entre 0 et 650 et 0 et 480 , la fonction teste si le nombre aléatoire sorti se trouve sur une zone occupée par un obstacle , si oui , elle attribut à x ou à y une valeur telle que ces coordonnées ne soient pas sur un obstacle ainsi la fonction est censée retourner x et y , soit tels que la fonction random les a donnés (ils ne sont pas sur un obstacle) soit changé par le biet des listes

    C'est donc naturellement que je ne comprends pas pourquoi Python ne reconnaît pas x et y alors qu'ils ont été rentrés en argument et retourner en sortie ! 😅

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Tayzer Voir le message
    C'est donc naturellement que je ne comprends pas pourquoi Python ne reconnaît pas x et y alors qu'ils ont été rentrés en argument et retourner en sortie !
    Python reconnaît bien "x", il vous dit juste que cette variable là n'a pas été définie avant d'être utilisée.
    Et comme obstacle se fout pas mal des arguments qu'on lui passe, vous pourriez aussi bien écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                rect_rose.x= obstacle('turlu', 'tutu')
    et Python sera "content".

    Après si vous ne savez pas ce que sont variables, fonctions, arguments, ... il y a des tutos pour çà.

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

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Merci pour votre aide précieuse! Bonne soirée à vous !

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    ta fonction retourne 2 valeurs !
    donc faire 2 appels à ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       rect_rose.x= obstacle(x)
       rect_rose.y= obstacle(y)
    n'a pas de sens (en plus des paramètres), tu n'as pas écrit qu'une fois elle retourne x et une autre y !

Discussions similaires

  1. Impossible de retourner la valeur d'une fonction personnalisée sur Excel
    Par abdelben93 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/05/2019, 08h10
  2. Réponses: 6
    Dernier message: 30/09/2005, 16h24
  3. Réponses: 7
    Dernier message: 20/03/2005, 14h53
  4. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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