Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 01-07-2015 22:48:42

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

[Résolu]Les fonctions python ?

Bonjour tout le Monde, je fais des exercices sur http://www.codecademy.com pour m'entraîner à Python. J'ai un gros problème que j'arrive pas à résoudre (j'ai passé toute la journée à essayer de trouver sans n'y arriver sad  ).
Je vous montre tout cela en image :
4xMlHkUd

Donc vous avez vu le message d'erreur, pouvez-vous me dire ce qui ne va pas dans mon code par rapport aux Instructions ?

Dernière modification par Tyrpio (01-07-2015 23:59:40)


Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#2 01-07-2015 23:00:10

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : [Résolu]Les fonctions python ?

Salut,

Tu ne compares pas la valeur du paramètre « s » aux chaînes « Oui » et « Non ». Il te faut tester une égalité, ce qui n'est pas le cas ici : if s == "Oui"…

Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#3 01-07-2015 23:19:14

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

Merci de ta réponse mais je ne comprends pas trop (je débute tout juste depuis 4 jours ahah). Voici comment j'ai interprété ta réponse (même si j'ai faux). Je vous montre l'image :
qE6CixD9
Une soluce ? parce que je suis mais vraiment totalement bloqué, au moins pour que je comprenne mieux la situation et donc le problème.

Dernière modification par Tyrpio (01-07-2015 23:19:46)


Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#4 01-07-2015 23:45:54

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : [Résolu]Les fonctions python ?

2 choses (je ne suis pas du tout spécialiste non plus wink) :

- Tu n'as pas de variables nommées « oui » ou « non », donc oui.lower() et équivalents ne peuvent rien donner
- Les instructions sont de retourner « Fermeture... », « Fermeture annulée », etc. Or, là, tu les « print », mais tu retournes « s » et non pas le texte demandé.

Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#5 01-07-2015 23:58:52

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

Vraiment mais vraiment MERCI !
J'ai réussi smile smile smile
Voici la "soluce" en image :
nYGYoz7K

Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#6 02-07-2015 00:10:55

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : [Résolu]Les fonctions python ?

Ça fonctionne mais il y a plus simple et efficace smile

Ici, en imaginant qu'un utilisateur tape « OUi » ou « ouI », la fonction retournera « Je ne vous comprends pas » alors qu'on pourrait s'attendre à ce qu'elle renvoie « Fermeture ».


En réalité ce qui compte c'est de savoir si c'est « Oui » ou « Non », peut importe la façon dont ces chaînes sont écrites. Une façon plus efficace que la tienne consiste donc à transformer « s » en minuscules (ou en majuscules, au choix) puis à comparer cette nouvelle valeur de « s » aux chaînes « oui » et « non » (ou « OUI » et « NON » si tu as choisi de transformer « s » en majuscules).


Ça produit un code plus court, qui économise des variables (pas besoin de créer les variables oui et non), et plus efficace dans la mesure où il permet de faire face à bien plus de cas de figures que ton code :


def fermer(s):
    s = s.lower()
    if s=="oui":
        print "Fermeture..."
        return "Fermeture..."
    elif s=="non":
        print "Fermeture annulee !"
        return "Fermeture annulee !"
    else:
        print "Je ne vous comprends pas."
        return "Je ne vous comprends pas."
 


Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#7 02-07-2015 00:38:03

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

Lunatic a écrit :

Ça fonctionne mais il y a plus simple et efficace smile



C'est vrai, merci smile


Lunatic a écrit :

En réalité ce qui compte c'est de savoir si c'est « Oui » ou « Non », peut importe la façon dont ces chaînes sont écrites. Une façon plus efficace que la tienne consiste donc à transformer « s » en minuscules (ou en majuscules, au choix) puis à comparer cette nouvelle valeur de « s » aux chaînes « oui » et « non » (ou « OUI » et « NON » si tu as choisi de transformer « s » en majuscules).



Ok mais dans les instructions on nous demande à la fois de vérifier si c'est Oui, oui ou OUI et pareil pour non.
A moins que pour rajouter s.upper(), on tape ce code :


def fermer(s):
    s = s.lower() or s.upper()
    if s=="oui":
 


Je ne sais pas vraiment, à vérifier.

Lunatic a écrit :

Ça produit un code plus court, qui économise des variables (pas besoin de créer les variables oui et non), et plus efficace dans la mesure où il permet de faire face à bien plus de cas de figures que ton code :


def fermer(s):
    s = s.lower()
    if s=="oui":
        print "Fermeture..."
        return "Fermeture..."
    elif s=="non":
        print "Fermeture annulee !"
        return "Fermeture annulee !"
    else:
        print "Je ne vous comprends pas."
        return "Je ne vous comprends pas."
 



Et j'ai une dernière question si vous savez. Comment l'interpréteur relie s à une chaîne de caractère si on ne l'a pas affecté avant ? J'aurai bien imaginé la déclarer avant comme cela :

s = string


Je ne sais vraiment pas, une petite lanterne ?

Dernière modification par Tyrpio (02-07-2015 01:10:09)


Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#8 02-07-2015 00:40:03

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

Et désolé pour la présentation de mon message, j'ai une sorte de bug sur le site, étrange.

Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#9 02-07-2015 00:58:42

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [Résolu]Les fonctions python ?

Ouais, deux erreurs dans ton message se compensaient pour le parseur à la noix du forum… du coup, ça foirait. Encore un bug… smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#10 02-07-2015 00:59:46

martinux_qc
Administrateur
Lieu : Montréal (Québec)
Distrib. : Sid
Noyau : Linux 4.7.0-1-amd64
(G)UI : XFCE 4.12
Inscription : 12-10-2008

Re : [Résolu]Les fonctions python ?

Normalement, 2 erreurs ça s'annulent non lol

"L'éducation vise à former des citoyens pas trop tatas et non pas à envoyer le plus de tatas possible à l'université."
Pierre Foglia (Journaliste à la retraite à La Presse)
Note : au Québec, le mot tata a un sens péjoratif qui sert à désigner une personne un peu idiote ou insignifiante. D'où les expressions familières : Espèce de grand, de gros tata! Être, avoir l'air tata.

Hors ligne

#11 02-07-2015 09:58:09

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Les fonctions python ?

En python, le type des variables est déterminé à l'exécution.
Remarque, que l'on ne peut pas utiliser une variable à laquelle
il n'est pas affectée de valeur. C'est cette affectation qui permet
à l'interpréteur de décider de quel type elle est.

L'utilisation d'une variable non initialisée provoque une exception.
On peut le vérifier en exécutant le code suivant :

#! /usr/bin/python3
# -*- coding: UTF-8 -*-

print(var_non_initialise)


Traceback (most recent call last):
  File "essai.py", line 4, in <module>
    print(var_non_initialise)
NameError: name 'var_non_initialise' is not defined


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#12 02-07-2015 11:28:24

Lunatic
Membre
Lieu : Lyon
Distrib. : Fedora 24
Noyau : Linux 4.6.5-300.fc24.x86_64
(G)UI : Gnome
Inscription : 03-08-2013
Site Web

Re : [Résolu]Les fonctions python ?

Tyrpio a écrit :


Ok mais dans les instructions on nous demande à la fois de vérifier si c'est Oui, oui ou OUI et pareil pour non.



En fait on demande que la « réponse » soit la même si c'est Oui, oui ou OUI, mais fondamentalement on se fiche de savoir comment est écrit le « oui ». Faut juste qu'il soit pris en compte, quelque soit la façon dont il est écrit.

C'est la raison pour laquelle la stratégie consistant à se dire « peut importe la façon dont ma chaîne est écrite, je la transforme en minuscule pour la comparer à “oui” et “non” » est plus souple/plus efficace. Tu n'as ainsi pas à comparer la valeur de s à toutes les façons possibles d'écrire « oui ».

(Le jour où tu dois vérifier le contenu d'un paramètre comme s sur un mot ou une expression susceptible de comporter bien plus que 3 caractères, tu seras heureux de ne pas avoir à comparer s à chacune des façons possibles de l'écrire wink )


Je suis aussi sur Twitter et nouvellement sur Diaspora*
Mon blog de geekeries : HAL-9000

(J'applique la règle de proximité)

Hors ligne

#13 02-07-2015 11:41:49

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

enicar a écrit :

En python, le type des variables est déterminé à l'exécution.



Merci pour vos réponses smile
Je comprends déjà mieux ahah, j'adore le Python cool
Juste une question par rapport à cette phrase. Le type des variables est déterminé à l'exécution, je ne comprends pas trop cette phrase. Ma question ce n'était pas vraiment pour les variables, à moins que les paramètres sont des variables ? Mais c'était plus pourquoi on n'affecte pas une valeur à par exemple s (le paramètre que j'ai mis mais je demande cela d'une façon plus générale) ?
Comment l'interpréteur sait ce qu'est s ? Parce que sinon ça veut dire que dés qu'il voit une lettre ou un ensemble de lettre il sait que c'est une chaîne de caractère (string). Il y a un gars qui m'a dit que l'interpréteur ne pouvais pas utiliser s parce qu'il n'était pas déclarer, affecter (il ne connais rien à Python mais il connaît l'algorithme (le langage "humain" comme il le dit et connais le Paskal, enfin s'en souviens).

Dernière modification par Tyrpio (02-07-2015 11:44:22)


Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

#14 02-07-2015 13:25:54

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Les fonctions python ?

Pascal est langage fort différent, car la vérification des
types est faite à la compilation. Pascal est un langage statiquement
typé alors que python est dynamiquement typé.

En python, le type est déterminé à l'exécution cela veut dire que pour le
code :


n = "une chaine"
 


La première phase de compilation va vérifier la grammaire. Peu importe
la façon dont tu nommes tes variables. L'expression précédente est
valide grammaticalement. Donc la phase de compilation est passée avec
succès. Mais python ne connaît pas encore le type de la variable « n ».
Quand python va évaluer la forme compilé de cette expression, il va
voir que « "une chaine" » est une string. Et donc, « n » va prendre
le type string.


Quelle distinction fais-tu entre les variables et les paramètres ?
Les paramètres des fonctions se comportent comme des variables qui
sont déterminés lors de l'appel de cette fonction.


def ajoute_un(x):
    x = x+1 # on peut manipuler le paramètre d'une fonction comme une
            # variable
    return x
 


Ici, on voit que « x » va être un nombre, cependant python ne le saura
qu'au moment où il va évaluer le code.
Si je décide de l'appeler avec un nombre dans un programme :


def ajoute_un(x):
    x = x+1
    return x

print(ajoute_un(1))
 



2
 


Par contre le programme suivant est invalide :


def ajoute_un(x):
    x = x+1
    return x

print(ajoute_un("coucou"))
 



Traceback (most recent call last):
  File "essai.py", line 8, in <module>
    print(ajoute_un("coucou"))
  File "essai.py", line 5, in ajoute_un
    x = x+1
TypeError: cannot concatenate 'str' and 'int' objects
 


Ce qui provoque une erreur de type…


Pour terminer et à titre d'information, il existe des langages
capables de déterminer le type des variables à la compilation, dans la
plupart des cas
, sans qu'il soit nécessaire de les déclarer comme en pascal.
Ce mécanisme s'appelle l'inférence de type.

Dernière modification par enicar (02-07-2015 15:59:19)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#15 02-07-2015 15:55:50

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Les fonctions python ?

Il faut que je précise encore une chose. L'interpréteur python n'évalue pas directement le code
que l'on écrit. On passe ce code à travers une moulinette qui va permettre de le rendre compréhensible
pour l'interpréteur. Cette phase s'appelle la compilation du code source (le programme « compréhensible »
par l'homme). Le code compilé peut être directement exécuté par l'interpréteur. Des fichiers de ce type
existent, notamment dans les librairies (dans /usr/lib/python-<version>/) avec l'extension « .pyc ».

La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#16 02-07-2015 16:04:08

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Les fonctions python ?

Il faut aussi que je donne un exemple d'erreur à la compilation. Pour cela, rien de plus
simple, je vais omettre le « : » dans la définition d'une fonction. En reprenant le code
des précédents exemples :


def ajoute_un(x)
    x = x+1
    return x

print(ajoute_un(1))
 



  File "essai.py", line 4
    def ajoute_un(x)
                   ^
SyntaxError: invalid syntax
 


La grammaire du langage n'a pas été respectée, et le compilateur nous rapporte le problème wink

Dernière modification par enicar (02-07-2015 16:04:35)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#17 02-07-2015 20:52:31

Tyrpio
Membre
Distrib. : Debian Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : XFCE
Inscription : 04-05-2015

Re : [Résolu]Les fonctions python ?

Un grand MERCI enicar, je comprends beaucoup mieux les fonctions maintenant smile

Quand vous ne voyez pas le service, c’est que vous êtes le produit !

Hors ligne

Pied de page des forums