Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
vingt deux plus dix
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

Lutcho74
14-09-2009 20:28:34

lu',

Et ben...
Merci beaucoup pour cette dernière réponse qui je crois va m'être d'un grand recoure :)...
Très souvent tes connaissances me dépasse aussi bien en maths qu'en programmation ;) !
Bon j'ai pas testé pour l'instant par manque de temps mais si tout va bien je vais voir tous ça mercredi.

Bye

yoshi
14-09-2009 12:16:20

Salut,

Bon, après vérification tu ne peux pas forcer une liste complète à être encodée en unicode :

Traceback (most recent call last):
  File "C:\Python26\accents.py", line 10, in <module>
    L= unicode(L,'utf-8')
TypeError: coercing to Unicode: need string or buffer, list found

Par contre, si L = unicode(L,'utf-8') est interdit, avec L=["chèvre", "problème"] (par ex)
tu peux tout à fait écrire :

>>> L=["chèvre", "infâme"]
>>> L[0] = unicode(L[0],'utf-8')
>>> L[1] = unicode(L[1],'utf-8')
>>>

Pourquoi ça marche ? Tu traite ta liste élément par élément et chaque élément est un string (chaîne)...
Donc 1ere remarque (parce que ton "c'est ermbêtant..." est rien moins que clair),  si tu veux conserver une liste, c'est tout à fait possible d'encoder la liste, mais élément par élément, après chargement de l'ensemble des éléments de la liste, ou au coup par coup...

Deuxième remarque. Si tu ne veux pas des listes (de toutes façons, lire un fichier, c'est ranger son contenu dans une LISTE), tu peux extraire chaque élément de la liste et le ranger dans une chaîne, ensuite tu peux même concaténer ces chaînes en une seule...
Je reprends ma liste tirée d'un fichier qui contenait deux mots (avec un retour à la ligne) :

>>> L=["chèvre\n", "infâme\n"]
>>> a,b = L[0].strip('\n'),L[1].strip('\n')
>>> a,b=unicode(a,'utf-8'),unicode(b,'utf-8')
>>> c=a+' '+b
>>> print c
chèvre infâme
>>>

Donc tu as la réponse à :
- Je veux utiliser des listes
- Je ne veux pas utiliser des listes.

@+

yoshi
13-09-2009 21:07:59

Re,

Et après je revois ça demain...
Au chargement d'un fichier, tu charges ligne par ligne, et chaque ligne est une LISTE, il ne peut pas en être autrement...

Si ça t'embête tant que ça, tu peuxtoujours transformer une liste en chaine par chaine=str(L[0)]...

Mais avant, je te signale donc que lorsque j'écris L=fichier.readlines(), L est bien une liste et L[0] est le 1er élément de la liste...
Cependant, ensuite quand j'écris a=L[0].strip('\n'), a est une chaine et pas une liste...

Pour t'en convaincre, tape dans la console :
>>> L=["arthur\n"]
>>> type(L)
<type 'list'>
>>>

Maintenant continue en écrivant :
>>> a=L[0].strip('\n')
>>> type(a)
<type 'str'>
>>>

Je te laisse méditer...
Tu va pouvoir apprendre des choses à ton prof...

@+

Lutcho74
13-09-2009 20:45:05

Re,

Erf...

Ca sort impec si on laisse le texte dans une variable mais à partir du moment ou on le met dans une liste :

Ceci est un texte accentué : en principe, les accents vont être sabrés et tu obtiendras une bouillie infâme

Ceci aussi est un texte accentué  et point de bouille infâme
[u'\ufeff\xe9']

C'est très embêtant que je soit ''obligé'' de mettre mon texte dans une liste ! :(

@+

PS : j'arrive pas à comprendre ce que ça change le fait que ce soit ou non dans une liste ...

yoshi
13-09-2009 20:37:54

Re,

ok ! Je vois, tu ne peux pas traiter un texte enregistré comme un simple :
print u"accentué"

Je viens de faire un essai.
J'ai enregistré un texte d'une ligne en UTF-8 via le Bloc-notes.
Puis je le charge à la suite du bout de code donné (flemme)...

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print "Ceci est un texte accentué : en principe, les accents vont être sabrés et tu obtiendras une bouillie infâme"
print
print u"Ceci aussi est un texte accentué  et point de bouille infâme"

nom="bouillie.txt"
fichier=open(nom,'r')
L=fichier.readlines()
fichier.close()
a=L[0].strip("\n")
a= unicode(a,'UTF-8')
print a

Et ça sort propre...

@+

Lutcho74
13-09-2009 20:21:35

re,


bon voilà le résultat pour le 1. :

Ceci est un texte accentué : en principe, les accents vont être sabrés et tu obtiendras une bouillie infâme

Ceci aussi est un texte accentué  et point de bouille infâme

Et pour le 2. et bien tu a ''bien vue'' mon texte n'était pas enregistré en UTF-8 mais en AINSI maintenant qu'il y est ça me met : \xc3\xa9  à la place de 'é'   ^^''

@+

PS : mais je ne comprend pas que va apporter le 1. ??? pourrait eu m'expliquer stp?

yoshi
13-09-2009 20:14:09

Salut,
1. Fais un essai avec ceci, et regarde la différence (enregistre sous accents.py, par ex)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

print "Ceci est un texte accentué : en principe, les accents vont être sabrés et tu obtiendras une bouillie infâme"
print
print u"Ceci aussi est un texte accentué  et point de bouille infâme"

le u pour spécifier unicode...

2. Tes textes sont-ils bien enregistrés en UTF-8 ? Il y ya une option pour ce faire, par ex avec le blopc-notes. En bas de fenêtre d'enregistrement, il y a la ligne codage : spécifier UTF-8 ici.

@+

Lutcho74
13-09-2009 19:59:37

Re,

Bon pour le bout de code voilu : (mais par contre c'est très brouillon..)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


nom="questions.txt"            # nom du dossier Python et du fichier
fichier=open(nom,'r')                       # Ouverture du fichier enregistré
Lignes=[]
Lignes=fichier.readlines()                  # Stockage des lignes dans une liste                                              
fichier.close()
n=len(Lignes)

lignes=[]
for i in range(n):
    ligne=Lignes[i]  
    ligne=ligne.strip("\n")
    lignes.append(ligne)

print lignes
   
   
a=input()

En faite ça se produit dès que je fais F5 avec le code ou quand je fais double clique sur le code au lieu de faire edit for IDLE

Et oui je sais c'est un problème d'encodage, j'en ai parlé avec un prof d'électro au lycée et il m'a conseiller de faire un tableau de conversion, problème : ça me met un autre /xe quelque chose.

@+

yoshi
13-09-2009 19:55:09

Bonsoir,

Tu devrais nous mettre un petit bout de code pour qu'on comprenne ce qui se passe...
Est-ce que ça produit après utilisation de py2exe ?
Sinon, quand ?

De toutes façons, c'est un problème d'encodage des caractères.

@+

Lutcho74
13-09-2009 19:50:07

Salut,
Ca faisait longtemps ;)
Hélasse je reviens avec un problème...

Voilà, ayant essayé d'approfondir l'idée du chargement du texte dans une variable j'ai donc testé avec des accents(dans le fichier texte)...

Le problème :
Quand je met le texte(soit l'accent) dans une variable ça me met un ù(avec l'accent dans l'autre sens) dans une fenêtre MS-DOS

Et lorsque je met les mots avec accents dans une liste et que je dit au prog. de me donné la liste entière il m'affiche : \xe9 à la place de : 'é' (et dans le cas présent pas besoin d'être dans une fenêtre MS-DOS...même avec l'interpréteur python ça me le met.

Y aurait il une solution SVP...


Lutcho

yoshi
22-06-2009 16:48:31

Re,

Le but de mon message était informatif à l'intention de tous : des fois que certains soient intéressés.

Je me suis servi de py2exe (pour autre chose) : ce n'est effectivement pas très beau, mais l'intérêt devrait être que la solution timer qui m'avait été donnée et qui marchait en console (et pas avec IDE) doit marcher là aussi et couer le sifflet au bout de 15 s (c'est mon nouveau timing : il faut ça).

Ce n'était pas une relance à ton intention, je sais que tu dois bosser, il y avait juste un petit coucou à intention au passage...

@+

Lutcho74
21-06-2009 15:45:01

Lu yoshi,

yoshi a écrit :

Bonjour Lutcho74,
Je te vois passer régulièrement, mais sans t'arrêter...

Oui je regarde vite fait les nouveaux sujets/messages...
pour ce qui est de "faire" le questionnaire avec le texte je n'ai pas vraiment le temps car brevet dans 2 semaines environs et faut que je révise puis en plus avant de faire le questionnaire qui charge les questions,réponses via un fichier *.txt je m'était lancé dans un questionnaire avec Tkinter, on m'a déjà fais le code mais je n'y comprend pas grand chose et il est pas super super, donc je me mes sur des tutos de temps en temps...

@+


P.S: Pour ton E-mail merci mais j'ai un bouquin d'annales de maths et un deuxième avec toutes les matières qui a au brevet et tout ça corrigé ;) donc merci mais c'est bon.

yoshi
21-06-2009 13:58:38

Bonjour Lutcho74,

Je te vois passer régulièrement, mais sans t'arrêter...

Alors, je précise à tous les lecteurs de ce topic  potentiellement intéressés que j'ai repris ton idée de Questionnaire latin et que je l'ai sérieusement étoffée :
- J'ai introduit 160 noms, appartenant au vocabulaire censé être connu en fin 3e et répartis sur les 3 premières déclinaisons, mots classés par ordre alphabétique
- Je collationne les mots intéressant et appartenant aux 4e et 5e déclinaisons : je souhaite trouver 40 mots.
- La structure du programme est telle qu'y rajouter les 4 et 5e déclinaisons m'obligera à l'allonger de 5/6 lignes, pas plus.
- Les désinences informatisées, donc légèrement différentes de celle figurant dans les manuels, sont stockées dans un fichier très facilement extensible aux 4e et 5e déclinaison.

Le tout se compose de 4 fichiers : le programme questionnaire, le fichier de mots, le fichier de traductions, le fichier des désinences adaptées à la structure des mots du fichier de noms, les 3 fichiers de données étant au format .txt.
Tout mot du fichier de noms  se présente ainsi :
nominatif_"radical"*numero, exemple : miles_milit*48...
48 indique la ligne du fichier des terminaisons (groupées par 12= 6 x 2) où commence la déclinaison correspondante...
Les _ et * me servent de séparateurs pour repérer les 3 données différentes de la liste dans laquelle, au démarrage, je charge les noms
Si je reprends l'exemple ci-dessus,  selon le cas et le nombre (sing, plur.), j'ajoute à mon "radical" la terminaison n° 48 + décalage compris entre 0 et 11...

20 questions sont posées au cours desquelles ne figurera jamais deux fois le même mot (tiré au sort parmi les 160)...
Comme l'avait fait Lutcho, je donne le nominatif singulier + sa traduction et je demande un cas et un nombre (singulier ou pluriel)
Un délai de 15 s est offert pour donner la réponse :
- Bonne réponse et délai < 15 s : 1 pt
- Bonne réponse mais hors-délai 0,5 pt
- Mauvaise réponse : 0 et comptabilisation quand même de hors délai ou non...

Evidemment, en fin de prog, je tire le bilan :
* note/20 et commentaire tout comme dans l'idée originale de Lutcho74
* nb de réponses exactes et répartition dans les délais/hors délai
* nb de réponses fausses et répartition dans les délais/hors délai

Voilà, ça fonctionne, ça n'a pas pour sujet un objet mathématique, mais ça ne fonctionnerait pas sans calculs évidemment.
J'ai même prévu deux niveaux : le 2e niveau non activé ne poserait pas la question en donnant le nominatif singulier, mais en utilisant n'importe quel cas + singulier ou pluriel...
Ca m'apparaît bien plus difficile et je poserai la question à un professeur de Latin pour savoir si c'est concevable !

Si quelqu'un est intéressé pour des révisions ou reprendre le prg à son compte pour l'améliorer, l'enrichir...etc ou à fin de révisions, qu'il se manifeste !

@+

Lutcho74
03-06-2009 17:52:14

Re,

C'est bon j'ai tout compris ! :)
Merki

@+

yoshi
03-06-2009 16:42:02

Salut gamin,


Bin, tu sais pas lire ?
L'exemple est sous ton nez : ligne.strip("\n")
to strip, c'est déshabiller, retirer... ;-)
Exemple :

>>> ligne1,ligne2="Il fait \n","chaud\n"
>>> print ligne1+ligne2
Il fait
chaud

>>>

Mais essaie ensuite :

>>> print ligne1.strip('\n')+ligne2
Il fait chaud

>>>

Et enfin :

>>>print ligne1.strip('\n')+ligne2.strip('\n,')
Il fait chaud
>>>

Tu vois que le " \n" te renvoie à la ligne : si tu le coupes dans  ligne1, ligne1 et ligne2 sont bien concaténés, mais il y a quand même une ligne vide après "Il fait chaud"

Si tu le coupes aussi dans ligne2 avant l'affichage, il n'y a plus de ligne vide après "Il fait chaud".
Mais le strip coupe soit à gauche ce que fait uniquement la méthode lstrip(),  soit à droite ce que fait aussi uniquement la méthode rstrip(), pas au milieu...
strip()  peut remplacer les deux : lstrip() et rstrip().....

>>> ligne='Abracadabra'
>>> ligne.strip("Abra")
cadabra
>>>
>>> ligne.strip("cadabra")
Abra
>>>
>>> ligne.strip("cadab")
Abracadabra

Pigé ?

@+

PS
Bons DS ! Allez, c'est la dernière ligne droite...

Pied de page des forums