Python c'est super n'est-il pas ?

Tags: #<Tag:0x00007f509c2c5a80>

Considérons le code minimaliste suivant (tapé à l’invite python)

Python = True
great = True
it = False
Python is great is not it

D’après vous, que se passe-t-il à la dernière ligne ? Que va afficher python

  • un message d’erreur, une exception SyntaxError par exemple ?
  • un truc du genre invalid expression
  • False
  • True
  • autre chose.

En prime, pour ceux qui trouvent la solution sans tricher, voici un petit module sympa auto-documenté aujourd.py, qui fonctionne avec python2 et python3.

#!/usr/bin/env python3
# vim: set fileencoding=utf-8

"""
mini-module très simple d'utilisation

import aujourd
from aujourd import date_enclair, unjour, demain
print("Nous sommes le", date_enclair(aujourd.hui))
print("Vivement demain",date_enclair(demain) )
print("Hier, nous étions le",date_enclair(aujourd.hier) )
print("avant hier, c'était le",date_enclair(aujourd.hier - unjour) )
"""
from __future__ import print_function

import datetime
from datetime import date, timedelta
import locale

locale.setlocale(locale.LC_TIME, locale.getdefaultlocale())

hui = date.today()
unjour = timedelta(1)
hier = hui - unjour
demain = hui + unjour

def date_enclair(d):
    """retourne la date d en clair, en tenat compte de la locale
    """
    fmt = "%A %d %B %Y"
    s = d.strftime(fmt)
    return s

if __name__ == '__main__':
    print(__doc__)
    print("Nous sommes le",date_enclair(hui) )
    print("Vivement demain",date_enclair(demain) )
    print("Hier, nous étions le",date_enclair(hier) )
    print("avant hier, c'était le",date_enclair(hier - unjour) )

C’est fini pour aujourd.hui

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

2 J'aime

Et bien je réalise soudain que je n’avais même pas lu une ligne de python jusqu’ici.

Sans tricher, jamais vu de python avant, je dirais True.

Bonjour,
J’adore ce concept, moi qui suis une bille en programmation :slight_smile:

True is True is not False ?

Voilà.
Et l’évaluation de cette assertion renvoyant bien true, j’imagine qu’en interactif, le shell python doit afficher le résultat sous la forme du chaine “True” à l’écran.

True

$ python3 
Python 3.6.8 (default, Jun 24 2019, 18:15:00) 
[GCC 4.2.1 Compatible OpenBSD Clang 7.0.1 (tags/RELEASE_701/final)] on openbsd6
Type "help", "copyright", "credits" or "license" for more information.
>>> Python = True
>>> great = True
>>> it = False
>>> Python is great is not it
True
>>> exit()

@Albert: en effet, c’est ainsi analysé : True is True is not False

J’avais dit sans tricher, et dans mon esprit c’était à l’intuition, sans utiliser l’interpréteur.
Maintenant voici un mini-module évident

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
P_eq_Mg.py  la fameuse relation entre la masse et le poids
"""

def poids(M, g=9.81):
    """
    force qui s'exerce sur une masse `M` soumise à la gravité `g`
    """
    P = M * g
    return P

if __name__ == '__main__':
    """exemple d'utilisation"""
    tonne = 1000.  # kg
    p1t = poids(tonne)
    p_kN = p1t / 1000.
    print("une tonne", tonne, "kg, pèse", p1t, "N", "soit", p_kN, "kN")

difficile de faire plus simple! lancez le sous la forme

python3 -i P_eq_Mg.py

et à l’invite de l’interpréteur, vous tapez

des = 2
mots = "bla,"
slogan = print("Paris Match : le", poids(des,mots), "le choc des photos")

D’après vous que va-t-il se passer ?

  • une exception va être levée, laquelle ?
  • un autre message d’erreur
  • un slogan un peu saboté s’affiche. quoi exactement

Poursuivons avec

print(slogan)

Qu(est-ce qui s’affiche ?

  • rien, on a une exception du genre NamespaceError
  • un slogan un peu saboté
  • True
  • False
  • None

La suite

force = poids
de = 1
caractère = "biroute"
print("Ce mec a une sacrée", force(de, caractère))
M = 4
print("La force de Python", force(g="Python", M=M))
print(force.__doc__)

Vous avez une heure :smile:

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

3 J'aime
  • un autre message d’erreur
  • un slogan un peu saboté

Une heure pour quoi faire ?

Qui t’as dit que ce n’était pas le cas ?
Parce qu’après, j’en fais la démonstration !
Mauvaise pioche, “retry again” :frowning:

try :
  supposition is true
exept VéritéError:
  continue

:blush:
Attention au clash. Une révision s’impose.

except

2 J'aime

SyntaxError: invalid syntax
break

1 J'aime

Pas vraiment, le slogan un peu saboté s’affiche au moment de l’affectation slogan = print(...)

print(slogan)
None

car la fonction print retourne None.

Maintenant, un peu plus difficile, nous allons redéfinir la fonction poids de telle sorte qu’il soit impossible de la détourner (pour écrire des âneries ou autre).

g = 9.81
# faire dir(g)
g_rmul = g.__rmul__
# g_rmul(tonne)
#  on est bien, mais quid de __doc__ ?
g_rmul.__doc__ = poids.__doc__ + ' fixée à ' + str(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: attribute '__doc__' of 'method-wrapper' objects is not writable

Qu’à cela ne tienne, redéfinissons avec le mot clé def

def poids(M):
    """force qui s'exerce sur une masse `M` soumise à la gravité `g` fixée à 9.81"""
    P = g_rmul(M)
    return P

poids("Larousse")
NotImplemented

Avec cette correction, il n’y a qu’un argument M, si M n’est pas numérique la fonction retourne un objet de classe NotImplementedType.
Si on donne deux arguments, une exception TypeError est levée.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

3 J'aime