π
<-

Script qui refuse de s’exécuter sur la Numworks N0100 (bis)

Script qui refuse de s’exécuter sur la Numworks N0100 (bis)

Unread postby cent20 » 13 Oct 2019, 15:25

Bonjour,

Cette fois ci mon script est tout petit, à peine 800 octets et mon problème n'est donc pas un problème de mémoire.

Le script est ici : https://workshop.numworks.com/python/cent20/longueurcourbe et par sécurité je le colle ci-dessous, juste au cas où je renomme un jour celui du workshop ce qui brise le lien ...

Code: Select all
from math import sqrt


def fonc():
    global f
    print("Saisir une fonction :")
    f = str(input("f(x) = "))


def interval():
    global a, b
    print("Saisir un intervalle [a,b] :")
    a = float(input("a = "))
    b = float(input("b = "))


def coupe():
    global n
    print("Combien de segment :")
    n = int(input("n = "))


def long():
    fonc()
    interval()
    coupe()
    lc, p = 0, (b-a)/n
    for i in range(n):
        x1, x2 = a + i*p, a + (i+1)*p
        x = x1
        y1 = eval(f)
        x = x2
        y2 = eval(f)
        d = sqrt((x1-x2)**2+(y1-y2)**2)
        lc = lcn + d
    print("La longueur de la courbe de f")
    print("définie par f(x) =",f)
    print("sur [{},{}]".format(a, b))
    print("est :",lc)


Il tourne sans problème sur Spyder, sur Thonny mais sur la numworks rien à faire elle ne veut pas le faire tourner...

Bon je vais me rabattre sur celui de sesamath (ci-dessous), mais c'est fatiguant ces implémentations non standard !

Code: Select all
from math import sqrt
def f(x):
    return x**2 #Modifier la fonction ici
def distance(x1,y1,x2,y2):
    return sqrt((x1-x2)**2 + (y1-y2)**2)
def longueurCourbe(f,a,b,n):
    longueur = 0
    x1,y1 = a,f(a)
    h = (b-a)/n
    for i in range(n):
        x2 = x1 + h
        y2 = f(x2)
        longueur = longueur + distance(x1,y1,x2,y2)
        x1,y1 = x2,y2
    return longueur
Last edited by cent20 on 13 Oct 2019, 15:35, edited 3 times in total.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby cent20 » 13 Oct 2019, 15:29

spyderOK.JPG


thonnyOK.JPG


numworksKO.JPG
You do not have the required permissions to view the files attached to this post.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby critor » 13 Oct 2019, 18:22

Bonjour.

Apparemment la fonction eval() évalue dans l'environnement global, et non pas dans l'environnement local associé à l'exécution de la fonction long().
La variable x étant définie dans la fonction long(), elle n'existe pas dans l'environnement global, d'où l'erreur.

Pour contourner ce problème, il te suffit de rajouter une simple ligne au début de la fonction long() :
Code: Select all
def long():
  global x
  ...

Et ça marche : :)
Image
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby critor » 13 Oct 2019, 18:30

Comme compléments, eval() utilise apparemment :
  • l'environnement global dans ma ligne de commande
  • l'environnement local sur NumWorks
  • l'environnement local sur Casio Graph 90/35+E II
  • l'environnement local sur TI-83 Premium CE
C'est sûrement une des différences entre le Python complet et les implémentations légères MicroPython/CircuitPython.

Merci à toi, tu me fais apprendre des choses, j'ignorais cette différence-ci. :)
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby cent20 » 13 Oct 2019, 19:29

Merci beaucoup pour ces explications très claires. J’avais oublié que c’était micro python et pas Python. En plus je pense que ça va résoudre mon problème d’origine car le script proposé ici était une version dégradée d’un autre script...
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Script qui refuse de s’exécuter sur la Numworks N0100 (bis)

Unread postby cent20 » 13 Oct 2019, 20:57

Mon problème d'origine persiste, il n'était pas l'objet du post d'origine...

Code: Select all
def fonction(f,a):
    global x
    x = a
    return eval(f)


L'utilisateur saisie alors f(x**2,3) dans la console et il doit obtenir en retour 9 mais cela plante car

Code: Select all
NameError: name 'x' is not defined


J'ai essayé de bricolé, sans succès :

Code: Select all
def fon(str(f), a):
    global x
    x = a
    return eval(f)


ne marche bien sur pas, tout comme les tentative pour rajouter une déclaration de type

Code: Select all
def fonction(fonc,a):
    global x
    x = a
    f = str(fonc)
    return eval(f)


N'y a t'il vraiment aucun moyen de faire saisir l'utilisateur la "fonction mathématiques" directement dans les paramètres de la "fonction python" sans passer par une saisie manuelle préalable ?

Code: Select all
    print("Saisir une fonction :")
    f = str(input("f(x) = "))


J'aurais voulu faire ceci :

Code: Select all
def long(fonction, a=1, b=2, n=2):


directement, récupérer une chaîne de caractère dans fonction et l'évaluer en f° d'un x défini à l'aide de a,b et n

Alors oui, on peut toujours faire

long("x**2",1, 2, 10) mais se souvenir qu'il faut saisir des " " est peu probable ..

Bon sinon merci pour le "global", il n'y a plus qu'à tester ça demain.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby critor » 13 Oct 2019, 21:19

Lors d'un appel de fonction, les paramètres sont d'abord évalués avant même l'exécution de sa première ligne de code, d'où l'erreur.

Si l'on souhaite passer une expression à la fonction, il faut donc la mettre entre "..." pour en bloquer l'évaluation.
Ou sinon il faut passer par un input(...).
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby cent20 » 14 Oct 2019, 16:07

Mon script marche est il est terminé.

longueurcourbe.JPG


Sur numworks : https://workshop.numworks.com/python/cent20/longueurcourbe

Ici en copié collé codé au format PEP8 :

Code: Select all
from math import sqrt


def fonc():
    global f
    print("Saisir une fonction :")
    f = str(input("f(x) = "))


def interval():
    global a, b
    print("Saisir un intervalle [a,b] :")
    a = float(input("a = "))
    b = float(input("b = "))


def coupe():
    global n
    print("Combien de segment :")
    n = int(input("n = "))


def long(h=""):
    global x
    if (h == 15) or (h == 112):
        print('long() calcule la longueur')
        print("de la courbe de la f° f")
        print("sur l'intervalle [a,b]")
        print("en la découpant en n segments")
    else:
        fonc()
        interval()
        coupe()
        lc, p = 0, (b-a)/n
        for i in range(n):
            x1, x2 = a + i*p, a + (i+1)*p
            x = x1
            y1 = eval(f)
            x = x2
            y2 = eval(f)
            d = sqrt((x1-x2)**2+(y1-y2)**2)
            lc = lc + d
        print("La longueur de la courbe de f")
        print("définie par f(x) =",f)
        print("sur [{},{}]".format(a, b))
        print("est :",lc)


Il calcule la longueur d'une courbe en la découpant en n segment.
You do not have the required permissions to view the files attached to this post.
Last edited by cent20 on 14 Oct 2019, 16:21, edited 1 time in total.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby cent20 » 14 Oct 2019, 16:10

Mon code n'est pas reconnu en python, c'est quoi cette diablerie ? Il y a des agents lexibook infiltrés ici ou quoi ?

Ohhh il vient de changer de couleur ...
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
User avatar
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 48.5%
 
Posts: 1050
Images: 67
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: nsi_xyz

Re: Script qui refuse de s’exécuter sur la Numworks N0100 (b

Unread postby coco33920 » 14 Oct 2019, 18:08

Pourquoi passer par des eval() et ne pas utiliser les lambda ?.
Par exemple passer un argument f dans ta fonction qui est juste lambda x: x**2 et comme ça tu fais f(1), f(2) etc. ?
Dev OCaml, see Baguette# and HTMLFromTeXBooks
Étudiante en mathématique et informatique

Github : https://github.com/coco33920/
User avatar
coco33920Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 76.8%
 
Posts: 60
Joined: 14 Oct 2017, 18:09
Location: Sol III, Sector 001, UFP
Gender: Female
Calculator(s):
MyCalcs profile
Class: MP/I
Twitter: coco33920_r
GitHub: coco33920

Next

Return to Programmation Python

Who is online

Users browsing this forum: ClaudeBot [spider] and 0 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1053 utilisateurs:
>1020 invités
>24 membres
>9 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)