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 :

Exo sur les triangles


Sujet :

Python

  1. #21
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Le temps disponible n'est pas du temps libre, au contraire de ce que vous laissez sous entendre... et je l'avais bien compris dans votre remarque précédente, sans vouloir trop relever.

    Cependant si vous le croyez au point de passer les concours, libre à vous de vérifier mes dires
    Mes excuses Fred
    C'était une boutade à la base, et j'en ait remis une louche bien inutile

  2. #22
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il est vrai que la fonction eval est en même temps pratique et dangereuse.

    Par exemple, on croit qu'elle ne sait qu'évaluer des expressions du genre "2+3*7", mais en fait, elle est capable d'importer n'importe quel module et d'exécuter à peu près n'importe quoi (désolé, mais je ne dirai pas comment ici).

    Cependant, on ne peut pas toujours y échapper. Par exemple quand on crée une calculatrice et qu'on invite les utilisateurs à rentrer des expressions.

    Alors, on peut faire un minimum en créant une fonction eval2(expression), qui commencera par faire 3 choses (avec des expressions régulières):
    - interdire un nom de variable ou de fonction de type système: "__xxx__"
    - interdire la fonction eval elle-même
    - interdire la fonction exec

    On peut aussi s'assurer du contenu des dictionnaires associés de la fonction eval (globals et locals)

    Ce n'est pas une sécurité parfaite, mais on se prémunie déjà pas mal des astuces courantes.

    Et si quelqu'un a des astuces qui pourraient passer malgré ça, ça m’intéresse! (me les donner par mp).

  3. #23
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 310
    Par défaut
    Dans le module ast il y a literal_eval() pour cela

    https://docs.python.org/3/library/as...t.literal_eval

  4. #24
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Merci pour l'idée, VinsS. J'avais déjà essayé literal_eval() du module ast, mais il est malheureusement beaucoup trop limité pour une calculatrice.

    Il sait effectivement calculer une expression simple comme "2+3", mais pas une expression contenant des fonctions comme par exemple "sin(0.5)" du module math, ou n'importe quelle autre fonction. Et comme il ne supporte pas l'apport d'un dictionnaire de variables comme le fait eval, on ne peut pas les utiliser non plus.

    C'est bien dommage: il faudrait une version intermédiaire entre les 2 solutions.

  5. #25
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 891
    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 891
    Par défaut
    Bonjour Tyrtamos,

    En ce qui me concerne, je travaillerai avec Sympy

  6. #26
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Bonjour fred1599.

    Merci, je vais essayer!

Discussions similaires

  1. exo python : probleme sur les operateurs ?
    Par m1338 dans le forum Général Python
    Réponses: 4
    Dernier message: 05/03/2019, 13h48
  2. probleme Exo sur les ABR
    Par benjy13 dans le forum Autres SGBD
    Réponses: 0
    Dernier message: 17/06/2009, 19h21
  3. exo sur les pointeurs
    Par goldensun dans le forum Débuter
    Réponses: 9
    Dernier message: 07/11/2008, 02h23
  4. des exos sur les boocles
    Par zeyd dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/11/2005, 18h03
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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