Petite question sur import [résolu]

Petite question sur import [résolu] - Python - Programmation

Marsh Posté le 23-02-2003 à 22:46:43    

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
Reply

Marsh Posté le 23-02-2003 à 22:46:43   

Reply

Marsh Posté le 23-02-2003 à 22:53:25    

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

Reply

Marsh Posté le 23-02-2003 à 23:20:34    

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
Reply

Marsh Posté le 24-02-2003 à 00:08:45    

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. :)

Reply

Marsh Posté le 24-02-2003 à 00:46:54    

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

Reply

Marsh Posté le 24-02-2003 à 01:18:57    

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

Reply

Marsh Posté le 24-02-2003 à 01:50:44    

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
Reply

Marsh Posté le 24-02-2003 à 10:27:57    

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

Reply

Marsh Posté le 24-02-2003 à 10:41:18    

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

Reply

Marsh Posté le 24-02-2003 à 11:16:51    

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()

Reply

Marsh Posté le 24-02-2003 à 11:16:51   

Reply

Marsh Posté le 24-02-2003 à 11:20:36    

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

Reply

Marsh Posté le 24-02-2003 à 11:22:15    

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 ?

Reply

Marsh Posté le 24-02-2003 à 11:24:38    

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.

Reply

Marsh Posté le 24-02-2003 à 11:27:18    

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.

Reply

Marsh Posté le 24-02-2003 à 11:27:43    

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.

Reply

Marsh Posté le 24-02-2003 à 11:28:57    

ouais, mets
 

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


 
et tu verras tout de suite  [:sinclaire]

Reply

Marsh Posté le 24-02-2003 à 11:29:09    

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

Reply

Marsh Posté le 24-02-2003 à 11:35:25    

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.

Reply

Marsh Posté le 24-02-2003 à 12:21:04    

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
Reply

Marsh Posté le 24-02-2003 à 12:30:05    

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.

Reply

Marsh Posté le 24-02-2003 à 12:52:15    

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
Reply

Marsh Posté le 24-02-2003 à 12:56:28    

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

Reply

Marsh Posté le 24-02-2003 à 13:09:02    

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. :(

Reply

Marsh Posté le 24-02-2003 à 13:13:08    

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 ?

Reply

Marsh Posté le 24-02-2003 à 13:15:57    

En tapant:
python base1610.py

Reply

Marsh Posté le 24-02-2003 à 13:19:33    

: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

Reply

Marsh Posté le 24-02-2003 à 13:25:34    

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.

Reply

Marsh Posté le 24-02-2003 à 13:27:18    

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

Reply

Marsh Posté le 24-02-2003 à 13:27:51    

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

Reply

Marsh Posté le 24-02-2003 à 13:29:03    

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

Reply

Marsh Posté le 24-02-2003 à 13:33:14    

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
Reply

Marsh Posté le 24-02-2003 à 13:34:23    

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

Reply

Marsh Posté le 24-02-2003 à 13:44:54    

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

Reply

Marsh Posté le 24-02-2003 à 13:53:16    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed