Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Différence python / micropython


Blacklpk Invité

Différence python / micropython

Posté le 16/04/2022 16:36

Bonjour,

J'ai récemment acheté une Casio 90+E dans le but d'y intégrer des programmes python.

J'ai réalisé un premier script, assez basique, qui permet de calculer des flux actualisés, indice de profitabilité et valeur actuelle nette. Il marche sans soucis sur pc mais pas sur la calculatrice, où il ne sort qu'une erreur de syntaxe.

Auriez-vous une idée de pourquoi, et des différences entre python et micro python ?

Le script en question:
invest = float(input('Amount invested = '))
Number_fnt = int(input('FNT number = '))
rate = float(input('Actualization rate = '))
rate = rate/100
fnt = []
Sum_fnt = 0

for i in range(0, Number_fnt):
    fnt.append(float(input('Flow value = ')))
    fnt[i] = round(fnt[i]*pow((1+rate), -(i+1)), 2)
    Sum_fnt += round(fnt[i], 2)

for i in range(0, Number_fnt):
    print('FNT Y', i+1, '=', fnt[i])

print('Sum FNT =', Sum_fnt)
print('VAN =', round(-invest + Sum_fnt, 2))
print('IP =', round(1+((-invest + Sum_fnt)/invest)), 2)


Merci d'avance !


Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 16/04/2022 17:10 | #


Salut, j'ai transféré ton script sur ma Graph 90+E et il marche très bien. Peux-tu préciser où tu as une erreur ? L'as-tu modifié avant de le lancer ?

MicroPython est une "implémentation" de Python, tu peux voir ça comme un Python "réduit" qui marche sur tes plateformes moins puissantes que les ordinateurs. Il y a effectivement des différentes subtiles sur le langage et tous les programmes Python ne marchent pas forcément dans MicroPython, mais ces différences sont sur des fonctionnalités avancées/complexes et les programmes simples comme le tien marchent sans problème


Blacklpk Invité

Citer : Posté le 16/04/2022 22:41 | #


Merci pour ta réponse claire et rapide !

L'erreur est directe, j'ai à l'écran:
>>> from DI-VAN import *
SyntaxError: invalid syntax
>>>

Cependant, j'avais copié le fichier .py dans la mémoire de la calculatrice, en copiant le script dans un fichier déjà existant, tout fonctionne. Peut-être qu'il n'est pas possible de copier directement les fichier .py ?
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 16/04/2022 22:49 | #


Aha c'est parce que tu as appelé ton script DI-VAN avec un tiret au milieu : lorsque tu importes un script de cette façon, que ce soit sur calculatrice ou sur ordinateur, il faut que le nom du fichier soit un identifiant Python valide. Renomme-le DI_VAN par exemple et ça ira tout de suite mieux !
Blacklpk Hors ligne Membre Points: 2 Défis: 0 Message

Citer : Posté le 16/04/2022 22:57 | #


Erreur de débutant... Merci beaucoup !

Autre question qui n'a rien à voir mais pour laquelle je n'ai pas trouvé de réponse, est il possible de print sur plusieurs lignes quand le texte dépasse la largeur de l'écran ?

Je partage également un programme qui pourra être utile à d'autres, qui permet de calculer des FNT, VAN, IP, délai de récupération et TIR. Encore à peaufiner cependant.

fnt = []
flow = []
sum_fnt = 0
rate = float(input('Actualization rate = '))
Number_fnt = int(input('FNT number = '))
invest = float(input('Amount invested = '))
rate = rate/100

for i in range(0, Number_fnt):
    flow.append(float(input('Flow {} value = '.format(i+1))))
    fnt.append(round(flow[i]*pow((1+rate), -(i+1)), 2))
    sum_fnt += round(fnt[i], 2)

van = round(-invest + sum_fnt, 2)
ip = round(1+((-invest + sum_fnt)/invest), 2)


def main():
    global sum_fnt
    answer = int(input('FNT 1, VAN 2, IP 3, DR 4, TIR 5, stop 6:'))
    print(answer)
    if answer == 1:
        for i in range(0, Number_fnt):
            print('FNT Y{}='.format(i+1), fnt[i])
        print('Sum FNT =', sum_fnt)

    elif answer == 2:
        print('VAN {}%='.format(round(rate*100, 0)), van)

    elif answer == 3:
        print('IP =', ip)

    elif answer == 4:
        x, fnta = 0, 0
        date = []
        sum_fnta = -invest
        for i in range(0, Number_fnt):
            sum_fnta += fnt[i]
            print('FNT Y{}='.format(i+1), fnt[i])
            print('Cumul FNTA Y{}='.format(i+1), round(sum_fnta, 2))

            if sum_fnta > 0 and x == 0:
                date.append(i)
                date.append((-fnta/fnt[i])*12)
                x = 1

            fnta = sum_fnta

        print('DR =', date[0], 'years', date[1], 'months')

    elif answer == 5:
        fnt_f = []
        sum_fnt = 0
        van_f = 1
        rate_f = rate
        while van_f > 0:
            rate_f += rate
            for i in range(0, Number_fnt):
                fnt_f.append(round(flow[i] * pow((1 + rate_f), -(i + 1)), 2))
                sum_fnt += round(fnt_f[i], 2)

            van_f = round(-invest + sum_fnt, 2)
            print('VAN {}%='.format(round(rate*100, 0)), van_f)

        tir = (-van/(van_f-van)) * (rate_f - rate) + rate
        print('TIR=', tir)

    elif answer == 6:
        quit()

    main()


main()
Lephenixnoir En ligne Administrateur Points: 22590 Défis: 149 Message

Citer : Posté le 16/04/2022 23:04 | #


Le shell de l'application Python ne le fera pas pour toi, mais tu peux toujours utiliser ta propre fonction print() pour le faire :

LINE_LENGTH = 10
def myprint(*args):
    s = " ".join(map(str, args))
    for line in s.split("\n"):
        for i in range(0, len(line), LINE_LENGTH):
            print(line[i:i+LINE_LENGTH])

Cette version est manifestement bourrine, mais tu peux voir que ça coupe bien toutes les lignes à 10 caractères :

>>> myprint("x = a very long word +", 42)
x = a very
long word
+ 42
Blacklpk Hors ligne Membre Points: 2 Défis: 0 Message

Citer : Posté le 16/04/2022 23:19 | #


Super efficace, encore merci !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 102 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd