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 » [Python] Importation de données
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

[Python] Importation de données

Posté le 01/09/2019 14:25

Bonjour, nouveau projet à l'utilité douteuse, créer un système d'importation de données propre pour le Micro Python de la 90+e.

L'idée et connaissances nécessaires :
Les deux commandes nécessaires à connaitre sont ord() (transforme un caractère en un entier) et chr() (l'inverse).
Ces deux commandes ne fonctionnent qu'avec des valeurs comprises (en considérant qu'elles sont entières) de 0 à 255.
De ces 256 caractères, 128 sont inutilisés.
Les 128 premiers (de l'indice 0 à 127) semblent correspondre à la norme ascii.
Code de test
Code de test
for i in range(128): #vous pouvez remplacer 128 par 256, mais les résultats ne seront pas tous affichés et les 128 derniers sont non visibles.
print(chr(i))


Les contraintes :
La commande open() est inutilisable (présumée bridée par Casio).
La seule façon d'importer des données est d'importer un autre fichier .py respectant la norme.
La mémoire de la calculatrice est limitée.
Certains caractères ne peuvent pas être utilisés dans une chaîne sans perdre de l'espace (exemple : ", \ et les retours à la ligne nécessiteraient un échappement (\) ce qui serait contreproductif (deux octets en mémoire pour un octet lu).

Plan de projet :
Créer deux programmes, tous deux en Python, un pour ordinateur ("encodage" des données) et un pour la calculatrice, pouvant "décoder" ces données en renvoyer des nombres entiers par itération.
Le faire avec le moins de perte d'espace possible en utiliser la fonction import.

Je poste le plan avant de commencer le code pour vérifier que je n'ai rien manqué d'important (et que tout est bien clair)
Merci d'avance.

Plus d'information sur l'ASCII.
https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange


Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 01/09/2019 14:45 | #


Intéressant. Quel format de données récupérerait-on en sortie du décodeur ? Une liste d'entiers, uniquement ?
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 01/09/2019 14:53 | #


Cela dépendra en réalité, j'aimerais que le résultat final soit relativement simple d'utilisation.
La liste d'entier sera une première étape, j'aimerais à long terme parvenir à stocker des informations plus concrètes (variables, listes, voir même chaînes et écrans).

Ajouté le 02/09/2019 à 15:03 :
J'ai un peu travaillé dessus aujourd'hui, voici ce que j'en ai tiré :

1. L'idée est bonne (c'est déjà ça )
2. 94 caractères différents peuvent être utilisés (
Liste
Liste
(espace)
!
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
(guillemet inversé)
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
)
3. La lecture de données avance bien sur la calculatrice, le programme demandera le nombre de sorties différentes (par exemple pour une salle avec des murs ou rien, cela fait 2 possibilités) et retournera une liste d'entiers (pour le moment).
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 02/09/2019 16:10 | #


Question de principe pour aider à améliorer ton post principal.

Pourquoi tu ne fais pas juste un fichier avec des variables contenant ce que tu veux ?
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 02/09/2019 16:45 | #


Lephenixnoir a écrit :
Question de principe pour aider à améliorer ton post principal.

Pourquoi tu ne fais pas juste un fichier avec des variables contenant ce que tu veux ?

Merci
Je vais devoir réfléchir un peu car je me rend compte que je ne sais pas l'expliquer clairement
Mais voici un exemple pour éclairer temporairement son utilité :

// level.py, un bon nombre de variables stockées de façon classique
x = 5
y = 6
difficulty = 20
level_id = 0
level = "xx x xxx x xxx xxx x  xx x xxx x xxx xxx x  xx x xxx x xxx xxx x  xx x xxx x xxx xxx x  xx x xxx x xxx xxx x  xx x xxx x xxx xxx x  "

// level.py, un bon nombre de variables stockées avec ce projet (les caractères sont ici choisis au hasard, le programme étant en développement)
infos = "sjqk"
level = "qisdjkqmolshdjkqisdjtuis"

Le gain d'espace est énorme !

A noter que dans mon exemple, j'ai volontairement choisi d'utiliser plus de caractères que nécessaire pour le stockage du niveau
(La version finale devrait pouvoir stocker plus de données binaires en 21 caractères)
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 02/09/2019 16:48 | #


Voilà, le gain est vachement cool. En contrepartie, tu perds le typage.

Peut-être au fond que ce que tu as là c'est un système de compression pour certains types de données (des listes d'entiers, pour l'instant), pour gagner de la place sur le stockage. Et là ça marche indépendamment de si le code est dans un autre fichier que tu importes ou dans le même fichier
Captainluigi Hors ligne Membre Points: 802 Défis: 1 Message

Citer : Posté le 02/09/2019 17:17 | #


Forcément ça marchera pour les graph 35 +E II , et pour le micropython de zezombie par le même coup ...
Intéressant ...
Les bons artistes copient, les grands artistes volent. Picasso
Jouez à Mario sans arrêt sur votre Casio !
Cliquez pour découvrir
Cliquez pour recouvrir
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 12/09/2019 16:40 | #


Captainluigi a écrit :
Forcément ça marchera pour les graph 35 +E II , et pour le micropython de zezombie par le même coup ...
Intéressant ...

Pas sûr, il y a des différences entre l'interpréteur de ZZ et Casio, cela pourrait impacter la sortie. A suivre.

J'avance doucement dans l'ombre, la structure du programme de base est quasi-terminée, avec ma méthode actuelle (améliorable, mais bon...) une données peut faire un maximum théorique de 258 caractères (c'est déjà pas mal !).
Juste un petit post pour montrer que je continue
Protip
Ne me remerciez pas
Zezombye En ligne Rédacteur Points: 1738 Défis: 13 Message

Citer : Posté le 12/09/2019 16:51 | #


Pour des caractères ascii, le ord() et chr() devraient retourner la même chose. (tu as essayé de voir si les caractères non-ascii marchaient ?)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 12/09/2019 17:39 | #


Zezombye a écrit :
Pour des caractères ascii, le ord() et chr() devraient retourner la même chose. (tu as essayé de voir si les caractères non-ascii marchaient ?)

ord() renvoie un nombre et chr() un caractère.
Je n'ai pas essayé avec les caractères non-ascii, je vais voir on ne sait jamais

Ajouté le 18/09/2019 à 08:58 :
Zezombye a écrit :
[...] (tu as essayé de voir si les caractères non-ascii marchaient ?)

J'ai un gros temps de latence...
J'ai essayé, ça ne fonctionne pas, les caractères sont splités en plus petits caractères.
("€" donne trois espaces par exemple)
Protip
Ne me remerciez pas
Captainluigi Hors ligne Membre Points: 802 Défis: 1 Message

Citer : Posté le 18/09/2019 13:12 | #


Si je puis me permettre , j'ai une technique beaucoup plus simple , via un programme C'basic , ce programme rajoute simplement file=" et " , au fichier à ouvrir ( .csv , txt , etc ) et sauvegarde la string créé dans un fichier Python , il suffit alors de faire from X.py import file , et on a le même résultat qu'un vrai open , sans aucun logiciel d'utilisé sur le PC
Les bons artistes copient, les grands artistes volent. Picasso
Jouez à Mario sans arrêt sur votre Casio !
Cliquez pour découvrir
Cliquez pour recouvrir
Zezombye En ligne Rédacteur Points: 1738 Défis: 13 Message

Citer : Posté le 18/09/2019 13:15 | #


J'ai essayé, ça ne fonctionne pas, les caractères sont splités en plus petits caractères.
("€" donne trois espaces par exemple)


Parce que tu l'as sauvegardé en utf-8 sûrement, où € est encodé avec 3 octets, qui sont considérés comme 3 caractères séparés.

La question est : si tu fais ord() sur ces caractères, est ce que tu obtiens des bonnes valeurs ? Dans ce cas tu pourrais bien utiliser toutes les valeurs d'un octet (sans le \0, \n, " ou \ ce qui fait 252).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 18/09/2019 16:34 | #


Captainluigi a écrit :
Si je puis me permettre , j'ai une technique beaucoup plus simple , via un programme C'basic , ce programme rajoute simplement file=" et " , au fichier à ouvrir ( .csv , txt , etc ) et sauvegarde la string créé dans un fichier Python , il suffit alors de faire from X.py import file , et on a le même résultat qu'un vrai open , sans aucun logiciel d'utilisé sur le PC

Oui bon t'as pas vraiment compris le principe de compression mais en gros c'est l'idée
Le but est d'optimiser les données importées de cette façon.

Zezombye a écrit :
J'ai essayé, ça ne fonctionne pas, les caractères sont splités en plus petits caractères.
("€" donne trois espaces par exemple)


Parce que tu l'as sauvegardé en utf-8 sûrement, où € est encodé avec 3 octets, qui sont considérés comme 3 caractères séparés.

La question est : si tu fais ord() sur ces caractères, est ce que tu obtiens des bonnes valeurs ? Dans ce cas tu pourrais bien utiliser toutes les valeurs d'un octet (sans le \0, \n, " ou \ ce qui fait 252).

Non, j'avais essayé bien avant d'afficher tous les charactères de valeur 0 à 255, la moitié supérieure à 127 semble invalide (vide).
Ce ne sont pas des caractères pour l'interpréteur j'ai l'impression, je n'ai pas encore essayé d'éditer le fichier en hexa mais ce serait le dernier moyen. De plus, beaucoup de caractères sont utilisés côté système (c'est de l'ascii après tout).
Protip
Ne me remerciez pas

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 - 2021 | Il y a 70 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