prob d'indentation :( [resolu]

prob d'indentation :( [resolu] - Python - Programmation

Marsh Posté le 20-02-2003 à 12:04:15    

Salut.
Voilà mon problème, j'ai fait un petit prog en python qui ne se comporte pas comme il devrait.
En changeant l'indentation je peux corriger une partie mais dans ce cas çà commence
 à merder plus loin.
 
Le code en question:
 
 

def depart():
    'debut de prog'
print 'Choix possibles'
print 'Conversion base2>base10 tapez: 1'
print 'Conversion base10>base2 tapez: 2'
print 'Quitter                 tapez: 0'
choix=raw_input('Entrez votre choix: ')
if choix == "1":
    base2_base10()      
                         
 
    def base2_base10():
        total=raw_input('Veuillez entrer un nombre en base 2:')
 
        cpt_rang = 1
        resultat = 0
        cpt_total = len(total)
 
 
        while cpt_total > 0: #tant que il reste un caractere dans la variable
            chiffre = total[-1:]
            resultat = int(chiffre) * cpt_rang + resultat
            total = total[:-1]
            cpt_total = cpt_total -1
            cpt_rang = (cpt_rang * 2)
 
        print resultat
        choix=raw_input('Pour recommencer tapez 1 sinon tapez 2 ')
if choix == "1":
    base2_base10()
else:depart()
 
 
 
 
 
 


 
J'ai fait des recherches mais n'ai rien trouvé de clair sur l'indentation.


Message édité par amsterdam le 20-02-2003 à 16:19:45
Reply

Marsh Posté le 20-02-2003 à 12:04:15   

Reply

Marsh Posté le 20-02-2003 à 12:05:47    

Et lorill qui est en vacances ...


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 20-02-2003 à 12:09:56    

Zut moi qui pensait lui faire plasir. :d
Mais qu'il se rassure il n'a pas fini avec moi, vu le boulet que je suis. :d

Reply

Marsh Posté le 20-02-2003 à 12:12:03    

Amsterdam, c'est la femelle du hamster ?


---------------
Je code en série et en parallèle
Reply

Marsh Posté le 20-02-2003 à 12:14:33    

tiens un nantais...
  :hello:  

Reply

Marsh Posté le 20-02-2003 à 12:15:03    

Heu nan c'est une ville.
Joueur rejoue....
 
Salut walli. :hello:


Message édité par amsterdam le 20-02-2003 à 12:16:00
Reply

Marsh Posté le 20-02-2003 à 12:29:07    

tu sais qu'en python l'indentation défini les bloc (comme les {} ou les begin-end) ???

Reply

Marsh Posté le 20-02-2003 à 12:37:44    

j'ai trouvé: tes tabulations sont crades, y a plein d'espace parasites, donc la synthaxe est incorrecte. change d'editeur de texte ou configure le pour avoir des tabulations dures (hard tabs). je ne peux que te conseiller t'utiliser idle

Reply

Marsh Posté le 20-02-2003 à 12:44:06    

J'ai utilisé IDLE pour l'écrire mais je sais pas trop comment faire.
 
Sinon dans IDLE est il possible d'augmenter la taille de la police, parce que là c'est vraiment petit.
 
PS: je sais que c'est un problème d'indentation, d'ou mon titre.


Message édité par amsterdam le 20-02-2003 à 12:45:22
Reply

Marsh Posté le 20-02-2003 à 12:49:52    

ben moi j'ai pris ton code, j'ai supprimé l'indentation aux lignes ou il y avait des problèmes, puis je les ai refaites et plus de problème

Reply

Marsh Posté le 20-02-2003 à 12:49:52   

Reply

Marsh Posté le 20-02-2003 à 14:09:13    

Désolé mais chez moi ca ne marche pas.
Petite question que puis-je mettre au même niveau qu'un def ?
Les print
le if
le choix=

Reply

Marsh Posté le 20-02-2003 à 14:38:17    

def base2_base10():
    ''
total=raw_input('Veuillez entrer un nombre en base 2:')
cpt_rang = 1
resultat = 0
cpt_total = len(total)
while  cpt_total > 0: #tant que il reste un caractere dans la variable
  chiffre = total[-1:]
  resultat = int(chiffre) * cpt_rang + resultat
  total = total[:-1]
  cpt_total = cpt_total -1
  cpt_rang = (cpt_rang * 2)
print resultat
choix=raw_input('1 ou 2 ')
if choix=="1":
    base2_base10()

 
 
Quand j'écrit çà et que je tape 1 au deuxième choix le prog s'arrête sans retourner au début de la fonction.
Par contre au début j'ai bien l'invite du début de la fonction.


Message édité par amsterdam le 20-02-2003 à 14:41:26
Reply

Marsh Posté le 20-02-2003 à 14:50:59    

tu vois bien que t'as des espaces qui trainent
 
au meme niveau que le def tu peut mettre des varaibles globales,d 'autres fonctions et le "main"
 
je crois que le vrai problème c'est que tu n'as pas compris l'importance de l'indentation
 
 

Code :
  1. def depart():
  2.     print "Choix possibles"
  3.     print 'Conversion base2 > base10 tapez: 1'
  4.     print 'Conversion base10 > base2 tapez: 2'
  5.     print 'Quitter                   tapez: 0'
  6.     choix=raw_input('Entrez votre choix: ')
  7.     if choix == "1":
  8.         base2_base10()
  9.     # sinon ?
  10. def base2_base10():
  11.     total=raw_input('Veuillez entrer un nombre en base 2:')
  12.     cpt_rang = 1
  13.     resultat = 0
  14.     cpt_total = len(total)
  15.     while cpt_total > 0: #tant que il reste un caractere dans la variable
  16.         chiffre = total[-1:] # qui renvoie une liste et pas un int
  17.         # hiffre=total[-1]       
  18.         resultat = int(chiffre) * cpt_rang + resultat
  19.         total = total[:-1] # peut etre il serait plus elegant de faire
  20.         # del total[-1]
  21.         # ou mieux total.pop(-1) qui renvoie le dernier element et le supprime
  22.         cpt_total = cpt_total -1 # cpt_total-=1
  23.         cpt_rang = (cpt_rang * 2) # cpu_rang*=2
  24.     print resultat
  25.     choix=raw_input('Pour recommencer tapez 1 sinon tapez 2 ')
  26.     if choix == "1":
  27.         base2_base10()
  28.     else:
  29.         depart()
  30. depart()

Reply

Marsh Posté le 20-02-2003 à 15:23:24    

Ok merci c'est bon c'est le depart() qui manquait en bas. :lol:  pataper
Sinon je vais essayer les modifs que tu m'as montrées.
Enfin j'ai quand même survécu à mon premier prog en python.
A+ pour de nouveaux problèmes. :hello:
 
PS: l'indentation n'a pas fini de me faire ch... je pense. :d

Reply

Marsh Posté le 20-02-2003 à 18:48:56    

petite correction. pop() à le meme effet que pop(-1)

Reply

Marsh Posté le 20-02-2003 à 21:34:16    

Si je fait:
del total[-1]
L'interpréteur me sort:
object doesn't support item deletion.
Une idée ?

Reply

Marsh Posté le 20-02-2003 à 21:44:06    

ça doit etre par ce que ta varaible est une string (immuable) et pas une list. autant pour moi j'avais pas vu
 
d'ailleurs pourquoi garder une représentation textuelle et pas passé à un type entier?
 
en général, si on veux modifier des sequences de caracteres un nombre de fois important (ou des tuples), on passe au type list


Message édité par Taz le 20-02-2003 à 21:49:25
Reply

Marsh Posté le 20-02-2003 à 21:51:06    

Ok je vais voir pour les listes.

Reply

Marsh Posté le 20-02-2003 à 21:53:10    

ou passe en int. au lieu de supprimer un caractere, tu divises par 10

Reply

Marsh Posté le 20-02-2003 à 21:57:52    

Question idiote, pourqoi par dix ? :heink:
 
ps: c'est bon j'ai trouvé. :lol:
ps2: je fatigue moa.


Message édité par amsterdam le 20-02-2003 à 22:02:38
Reply

Marsh Posté le 20-02-2003 à 22:05:41    

amsterdam a écrit :

Question idiote, pourqoi par dix ? :heink:
 
ps: c'est bon j'ai trouvé. :lol:
ps2: je fatigue moa.


si tu fais base2 vers base10, tu divise par 10
si tu fais base10 vers base2, tu divise par 10

Reply

Marsh Posté le 20-02-2003 à 22:22:42    

Ok je commence la conversion base10>base2 maintenant que j'ai trouvé l'intruction pass.
Merci encore.:)

Reply

Marsh Posté le 20-02-2003 à 22:36:53    

pour transformer une string en une list de caractere, moi je ferais
map(None, "Hello" )

Reply

Marsh Posté le 20-02-2003 à 22:48:30    

Et pour passer une variable string en int ?

Reply

Marsh Posté le 20-02-2003 à 22:50:09    

int("123" )
float("3.1415" )
str(2)

Reply

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

Je viens de m'apercevoir que je l'avait déjà dans mon prog. :lol:

Reply

Marsh Posté le 23-02-2003 à 14:55:24    

kadreg a écrit :

Et lorill qui est en vacances ...

[:sinclaire]

Reply

Marsh Posté le 23-02-2003 à 15:04:17    

Rassures toi vu le boulet que je suis, tu auras certainement l'occasion de te refaire. :d

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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