Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2870 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Petite question sur import [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petite question sur import [résolu]

n°316064
amsterdam
Posté le 23-02-2003 à 22:46:43  profilanswer
 

Salut.
j'ai creé des petits prog de conversion genre base2>base10.
Je voudrais maintenant à partir de mon prog de départ envoyer
 aux modules externes le résultat de l'entrée utilisateur et récupérer le résultat
de la conversion pour pouvoir l'afficher.
 
Si qqun peut me mettre sue la voie.
Merci d'avance. :)


Message édité par amsterdam le 24-02-2003 à 14:40:38
mood
Publicité
Posté le 23-02-2003 à 22:46:43  profilanswer
 

n°316066
Taz
bisounours-codeur
Posté le 23-02-2003 à 22:53:25  profilanswer
 

ben tu fais ton module.py et ailleurs tu fais "import module" et vlan

n°316071
amsterdam
Posté le 23-02-2003 à 23:20:34  profilanswer
 

D'accord mais ensuite pour mes paramètres.
Je stocke mon entrée utilisateur dans disons var01.
Que doi-je donner comme info à mon sous prog.
Faut il modifier un sous prog quand on veut qu'il soit importable par un autre prog.


Message édité par amsterdam le 23-02-2003 à 23:21:24
n°316091
amsterdam
Posté le 24-02-2003 à 00:08:45  profilanswer
 

Je réussi à importer mon module, par contre l'interpréteur me dit:
NameError: global name 'total' is not defined
 
Je précise que le module importé fonctionne bien tout seul. :)

n°316100
amsterdam
Posté le 24-02-2003 à 00:46:54  profilanswer
 

Maintenant il me rend bien une valeur mais c'est du genre:
0x809fefc
Donc c'est po encore tout à fait cà. :d

n°316109
amsterdam
Posté le 24-02-2003 à 01:18:57  profilanswer
 

C'est bon j'ai trouvé !!!!!!!!!!!  [:yaisse2v]
Jsuis content koa. :d

n°316112
amsterdam
Posté le 24-02-2003 à 01:50:44  profilanswer
 

Un nouveau blem.
j'arrive à importer mon module de conversion base16>base10.
Mais quand il arrive à la ligne:
cpt_rang = len(total) #qui est dans le module importé
Il me sort:
TypeError: len() of unsized object
Késako?


Message édité par amsterdam le 24-02-2003 à 01:53:28
n°316215
lorill
Posté le 24-02-2003 à 10:27:57  profilanswer
 

je comprends rien a ton probleme  :pt1cable:  
t'as pas un peu plus de source a montrer, ou d'explications a donner ?

n°316224
lorill
Posté le 24-02-2003 à 10:41:18  profilanswer
 

en fait j'ai l'impression que t'as un truc tordu, du genre tout le code du module dans un seul bloc, sans fonctions, et que tu l'executes a l'import.
 
du coup ton probleme revient a faire passer les variables d'un module a un autre. c'est facile a faire, mais si j'ai bien devinné, oublie ca tout de suite et fais des fonctions prenant les paramètres qui vont bien

n°316271
amsterdam
Posté le 24-02-2003 à 11:16:51  profilanswer
 

Voilà le module qui importe:

import base1610
 
resultat = base1610.base16_base10(24)
 
print resultat

 
 
Voilà le module importé:
 


def base16_base10(total):
 #print ''
 #print '      Conversion base16>base10 '
 #print ''
 #total=raw_input(' Entrez un nombre en base 16  ex:98  :  ')
 
 resultat = 0
 cpt_rang = 1
 cpt_total = len(total)
 
 
 while cpt_total > 0:
  chiffre = total[-1]
  resultat = int(chiffre) * cpt_rang + resultat
  total = total[:-1]
  cpt_total = cpt_total -1
  cpt_rang = cpt_rang * 16
 
 
 #print ''
 #print "   Le résultat est: %s " % (resultat)
 #print ''
 return resultat
 
 
#base16_base10()

mood
Publicité
Posté le 24-02-2003 à 11:16:51  profilanswer
 

n°316278
amsterdam
Posté le 24-02-2003 à 11:20:36  profilanswer
 

Si je fais la meme chose mais avec un module importé plus simple genre:
var1=var1+var2  ca marche.

n°316281
lorill
Posté le 24-02-2003 à 11:22:15  profilanswer
 

euh la c'est comme si tu tapais len(24)... ca peut pas marcher, vu que len compte le nombre d'elements/caracteres, d'une chaine, tuple, liste, ...  
 
tu veux quoi exactement ?

n°316285
amsterdam
Posté le 24-02-2003 à 11:24:38  profilanswer
 

Justement je veux connaitre le nombre de caractéres dens total.
Je précise que le module importé fonctionne très bien lancé tout seul.
C'est à l'importation que je merde.

n°316293
lorill
Posté le 24-02-2003 à 11:27:18  profilanswer
 

non, ce n'est pas a l'importation...
raw_input te renvoie une chaine, 24 est un entier.
len() d'une chaine est valide, d'un entier non.
 
alors soit tu passes une chaine en param pour garder le même comportement (bof), soit tu fais un len(str(total)), pour convertir total en chaine avant et pouvoir compter le nombre de caractères.

n°316294
amsterdam
Posté le 24-02-2003 à 11:27:43  profilanswer
 

Donc il faudrait que j'envoi mon 24 sous forme chaine ?
En sachant sera une entrée utilisateur.
Je n'ai mis le 24 que pour tester l'importation.

n°316296
lorill
Posté le 24-02-2003 à 11:28:57  profilanswer
 

ouais, mets
 

Code :
  1. resultat = base1610.base16_base10("24" )


 
et tu verras tout de suite  [:sinclaire]

n°316298
amsterdam
Posté le 24-02-2003 à 11:29:09  profilanswer
 

OK j'essaie cà.
 
Ps: tu tappe trop vite pour moi. :lol:

n°316316
amsterdam
Posté le 24-02-2003 à 11:35:25  profilanswer
 

CA MAAAAARCHE!!!!!!!!
 
Sinon si je met les lignes qui sont pour l'instant en commentaire  
pour pouvoir rféutiliser mon module tout seul au cas ou.

n°316381
amsterdam
Posté le 24-02-2003 à 12:21:04  profilanswer
 

J'ai mis ceci avant ma fonction base16_base10
 
 


total=raw_input('entrez un nombre:')
base16_base10(total)
print(total)

 
 
Mais il me met name' base16_base10' is not defined.
Si je lance le module base1610 tout seul.


Message édité par amsterdam le 24-02-2003 à 12:28:13
n°316395
lorill
Posté le 24-02-2003 à 12:30:05  profilanswer
 

normal, tu utilises la fonction avant de la définir.
 
deja, ca pose un probleme de procéder comme ca, parce que si tu importes ton module, le code va etre executé et l'utilisateur devra entrer la valeur.
 
ce qu'il faut, c'est mettre ca a la fin du module
 

Code :
  1. if __name__ == "__main__":
  2.   total = raw_input('entrez un nombre:')
  3.   total = base16_base10(total)
  4.   print total


 
__name__ est une variable interne qui contient le nom du module.
lors d'un import, le nom est le nom importé. lorsque c'est le module lancé directement, le nom est __main__.
 
du coup, le code dans le if n'est executé que si le module est lancé directement, et pas en import.

n°316408
amsterdam
Posté le 24-02-2003 à 12:52:15  profilanswer
 

Merci pour ton aide lorill.
Donc j'ait fait ca que tu m'as dit.
Mais...
Si je termine ma fonction en tapant:
base16base10()
Il me sort:  'base16_base10' takes exactly 1 argument (0 given)
Par contre si je l'omet: il me calcule 2 fois.
Vu qu'il m'envoie la ligne 'veuillez......'
Et il me donne 2 résultas à la suite.


Message édité par amsterdam le 24-02-2003 à 12:56:52
n°316410
lorill
Posté le 24-02-2003 à 12:56:28  profilanswer
 

Code :
  1. def base16_base10(total):
  2.   resultat = 0
  3.   cpt_rang = 1
  4.   cpt_total = len(total)
  5.   while cpt_total > 0:
  6.     chiffre = total[-1]
  7.     resultat = int(chiffre) * cpt_rang + resultat
  8.     total = total[:-1]
  9.     cpt_total = cpt_total -1
  10.     cpt_rang = cpt_rang * 16
  11.   return resultat
  12. if __name__ == "__main__":
  13.   print ''
  14.   print '      Conversion base16>base10 '
  15.   print ''
  16.   total = raw_input(' Entrez un nombre en base 16  ex:98  :  ')
  17.   resultat = base16_base10(total)
  18.   print ''
  19.   print "   Le résultat est: %s " % (resultat)
  20.   print ''


Note: j'ai pas vérifié le code, juste mis les bons bouts au bon endroit

n°316417
amsterdam
Posté le 24-02-2003 à 13:09:02  profilanswer
 

Maintenant il ne me fait plus qu'un calcul si je l'importe donc ca c'est bon.
Par contre si je le lance tout seul il quitte sans rien faire.
Et si je lui met base16_base10() pour cloturer ma fonction il me met toujours:
base16_base10() takes exactly 1 argument (0 given)
 
Pourquoi tant de haine. :(

n°316423
lorill
Posté le 24-02-2003 à 13:13:08  profilanswer
 

amsterdam a écrit :


Et si je lui met base16_base10() pour cloturer ma fonction il me met toujours:
base16_base10() takes exactly 1 argument (0 given)


bon, ca c'est clair, ta fonction prends un param et tu lui en donne pas, ca peut pas marcher... ce qui m'embete moi, c'est ca :
 

amsterdam a écrit :


Par contre si je le lance tout seul il quitte sans rien faire.


parce qu'il devrait executer le code du if... tu le lance comment ton module ?

n°316426
amsterdam
Posté le 24-02-2003 à 13:15:57  profilanswer
 

En tapant:
python base1610.py

n°316429
lorill
Posté le 24-02-2003 à 13:19:33  profilanswer
 

:heink:  
 
en copiant le code du message précédent dans un fichier toto.py, j'ai ca :
 


C:\Documents and Settings\fiackv\Bureau>c:\python22\python toto.py
 
      Conversion base16>base10
 
 Entrez un nombre en base 16  ex:98  :  98
 
   Le résultat est: 152


 
Autrement dit : www.chezmoicamarche.org

n°316436
amsterdam
Posté le 24-02-2003 à 13:25:34  profilanswer
 

Sauf que chez moi je me suis apercu que si je met les ':' à la fin du if.
Il me sort: invalid syntax en me montrant les ':'
Et si je ne les mets pas il doit ne pas prendre en compte le if.

n°316437
lorill
Posté le 24-02-2003 à 13:27:18  profilanswer
 

amsterdam a écrit :

Sauf que chez moi je me suis apercu que si je met les ':' à la fin du if.
Il me sort: invalid syntax en me montrant les ':'


 :heink:  
 
montre le bout de code et le message d'erreur complet

n°316438
amsterdam
Posté le 24-02-2003 à 13:27:51  profilanswer
 

Au fait j'ai cliquer sur ton chezmoicamarche.org.
Pourquoi cette question.

n°316440
lorill
Posté le 24-02-2003 à 13:29:03  profilanswer
 

amsterdam a écrit :

Au fait j'ai cliquer sur ton chezmoicamarche.org.
Pourquoi cette question.


:??:
 
c'est juste une manière de dire que chez moi ca marche, c'est a dire qu'avec le code que j'ai mis je n'ai pas le probleme que tu décris

n°316447
amsterdam
Posté le 24-02-2003 à 13:33:14  profilanswer
 

Voici le bout de code en question:
 

if__name__== "__main__":

 
Et le message:
SyntaxError: invalid syntax
 
ps:Je te demandais ca rapport à la vérification toutes les 'cinq minutes' dans la phrase.


Message édité par amsterdam le 24-02-2003 à 13:35:38
n°316450
lorill
Posté le 24-02-2003 à 13:34:23  profilanswer
 

avec un espace entre le if et le __name__ ca irait surement mieux [:sinclaire]

n°316458
amsterdam
Posté le 24-02-2003 à 13:44:54  profilanswer
 

En effet ca marche mieux [:pataper:]
Par contre je doit merder au nivo de l'indentatio car il me dit
que resultat n'est pas défini.
Je vais voir ca

n°316473
amsterdam
Posté le 24-02-2003 à 13:53:16  profilanswer
 

Super ca marche dans les deux cas import et direct.
Merci encore pour ta patience lorill.
 
ps: pour le dernier message d'erreur c'était une erreur de frappe.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Petite question sur import [résolu]

 

Sujets relatifs
question de nbUne question de débutant !
[C/C++] Question bête...prob d'indentation :( [resolu]
[Résolu][Php] Problème explorateur de fichiers (lecteur réseau)problème incroyable.... [RESOLU]
Une p'tite question sur le Div...[Résolu][Php/Oracle] Problème de caractères bizarres après extraction
question intresseques d'un moteur 3D[Windows] Comment lancer un programme en tache de fond ? RESOLU
Plus de sujets relatifs à : Petite question sur import [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR