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

**URL:** <https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251>\
**Category:** Programmation\
**Tags:** python\
**Created:** [Septembre 24, 2019, 3:59 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251 "2019-09-24T15:59:17Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Septembre 24, 2019, 3:59 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/1 "2019-09-24T15:59:17Z")

</div>

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

```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.

```python
#!/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

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 24, 2019, 4:26 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/2 "2019-09-24T16:26:22Z")

</div>

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

> [@littlejohn75](#):
>
> 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.

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

---

<div class="post-metadata">

**Author:** ![Albert](https://www.debian-fr.org/user_avatar/www.debian-fr.org/albert/32/8474_2.png) [@Albert](https://www.debian-fr.org/u/Albert)\
**Post date:** [Septembre 24, 2019, 4:30 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/3 "2019-09-24T16:30:44Z")

</div>

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

`True is True is not False ?`

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Septembre 24, 2019, 4:34 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/4 "2019-09-24T16:34:23Z")

</div>

> [@Albert](#):
>
> 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 «&nbsp;True&nbsp;» à l’écran.

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Septembre 25, 2019, 8:48 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/5 "2019-09-25T08:48:06Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Septembre 30, 2019, 12:09 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/6 "2019-09-30T12:09:15Z")

</div>

> [@PengouinPdt](#):
>
> True
> 
> ```auto
> $ python3 
> 
> ```

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

```python
#!/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

```bash
python3 -i P_eq_Mg.py

```

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

```python
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

```python
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

```python
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 😄

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

---

<div class="post-metadata">

**Author:** ![pam547](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/f17d59/32.png) [@pam547](https://www.debian-fr.org/u/pam547)\
**Post date:** [Septembre 30, 2019, 1:09 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/7 "2019-09-30T13:09:59Z")

</div>

> [@littlejohn75](#):
>
> D’après vous que va-t-il se passer ?

- un autre message d’erreur

> [@littlejohn75](#):
>
> Poursuivons avec
> 
> ```auto
> print(slogan)
> 
> ```
> 
> Qu(est-ce qui s’affiche ?

- un slogan un peu saboté

Une heure pour quoi faire ?

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 1, 2019, 3:41 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/8 "2019-10-01T15:41:41Z")

</div>

> [@littlejohn75](#):
>
> J’avais dit sans tricher, et dans mon esprit c’était à l’intuition

Qui t’as dit que ce n’était pas le cas ?  
Parce qu’après, j’en fais la démonstration !  
Mauvaise pioche, «&nbsp;retry again&nbsp;» ☹

---

<div class="post-metadata">

**Author:** ![pam547](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/f17d59/32.png) [@pam547](https://www.debian-fr.org/u/pam547)\
**Post date:** [Octobre 1, 2019, 8:39 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/9 "2019-10-01T20:39:42Z")

</div>

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

```

😊  
Attention au clash. [Une révision s’impose](https://docs.python.org/3/tutorial/classes.html#private-variables).

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Octobre 1, 2019, 9:08 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/10 "2019-10-01T21:08:39Z")

</div>

> [@pam547](#):
>
> exept

except

---

<div class="post-metadata">

**Author:** ![pam547](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/f17d59/32.png) [@pam547](https://www.debian-fr.org/u/pam547)\
**Post date:** [Octobre 1, 2019, 9:27 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/11 "2019-10-01T21:27:33Z")

</div>

> [@mattotop](#):
>
> > exept
> 
> except

SyntaxError: invalid syntax  
break

---

<div class="post-metadata">

**Author:** ![littlejohn75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/littlejohn75/32/3840_2.png) [@littlejohn75](https://www.debian-fr.org/u/littlejohn75)\
**Post date:** [Octobre 5, 2019, 10:02 UTC](https://www.debian-fr.org/t/python-cest-super-nest-il-pas/80251/12 "2019-10-05T22:02:45Z")

</div>

> [@pam547](#):
>
> > ```auto
> > print(slogan)
> > 
> > ```
> > 
> > Qu(est-ce qui s’affiche ?
> 
> - un slogan un peu saboté

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

```python
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).

```python
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`

```python
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
