2011-02-12 3 views
-2

J'ai un code python qui échoue:essai: déclaration échoue

import sys 
print ("MathCheats Times-Ed by jtl999") 
numbermodechoice = raw_input ("Are you using a number with a decimal? yes/no ") 
if numbermodechoice == "yes": 
    try: 
    numberx1 = float(raw_input('Enter first number: ')) 
except ValueError: 
    print ("Oops you typed it wrong") 
try: 
    numberx1 = float(raw_input('Enter first number: ')) 
except ValueError: 
    print ("Oops you typed it wrong") 
    numberx2 = (float)(raw_input('Enter second number: ')) 
elif numbermodechoice == "no": 
    print ("Rember only numbers are allowed") 
    numberx1 = (int)(raw_input('Enter first number: ')) 
    numberx2 = (int)(raw_input('Enter second number: ')) 
else: 
    print ("Oops you typed it wrong") 
    exit() 
print ("The answer was") 
print numberx1*numberx2 
ostype = sys.platform 
if ostype == 'win32': 
    raw_input ("Press enter to exit") 
elif ostype == 'win64': 
    raw_input ("Press enter to exit") 

(code complet here)

Je veux envelopper les opérations de flotteur avec instructions try donc si un ValueError arrive, il est pris . Voici la sortie:

 
File "./Timesed.py", line 23 
    try: 
    ^
IndentationError: expected an indented block 

Quel est le problème et comment puis-je résoudre ce problème?

+1

@Senthil: Il ne permet pas si vous corrigez le code qui a des problèmes en elle. –

+0

@ S.Lott Parce que ce nouvel utilisateur essaie probablement d'apprendre Python, et fait probablement beaucoup d'erreurs. –

+0

Vous devez fournir l'indentation exacte pour chaque ligne. Remplacez tous les caractères de tabulation par 8 espaces et reproduisez le fichier exact. vous pouvez lancer python -tt sur le script [si vous sauvegardez le texte dans un script] et il vous dira si vous avez indenté correctement –

Répondre

2

Python est sensible aux espaces, en ce qui concerne l'espace blanc de début.

votre code devrait probablement être dentelé

import sys 
from sys import exit 
print ("MathCheats Times-Ed by jtl999") 
numbermodechoice = raw_input ("Are you using a number with a decimal? yes/no ") 
if numbermodechoice == "yes": 
    try: 
     numberx1 = float(raw_input('Enter first number: ')) 
     numberx2 = float(raw_input('Enter second number: ')) 
    except ValueError: 
     print ("Oops you typed it wrong") 
     exit() 
elif numbermodechoice == "no": 
    print ("Remember only numbers are allowed") 
    try: 
     numberx1 = (int)(raw_input('Enter first number: ')) 
     numberx2 = (int)(raw_input('Enter second number: ')) 
    except ValueError: 
     print ("Oops you typed it wrong")   
     exit() 
else: 
    print ("Oops you typed it wrong") 
    exit() 
print ("The answer was") 
print numberx1*numberx2 
ostype = sys.platform 
if ostype == 'win32': 
    raw_input ("Press enter to exit") 
elif ostype == 'win64': 
    raw_input ("Press enter to exit") 
+0

Merci Ça a marché !!!!!!!! – jtl999

0

Vous aviez une mauvaise syntaxe. Il devrait être except ValueError: et non except: ValueError. Corrigez-le pour vous dans la question aussi.

+4

Je pense que vous ne devriez pas modifier la question de cette façon. Vous devriez laisser le mauvais code là-dedans, afin que les gens ne soient pas déroutés par votre réponse. Rappelez-vous, lors de l'édition, vous devriez améliorer la mise en forme, améliorer la formulation ... mais ne changez pas le sens! Ne réparez pas un code cassé si la question demande pourquoi le code est cassé! –

+0

@Denilson, point prendre et j'ai compris le problème avec l'édition de la question comme je l'ai fait. Merci pour votre note. –

0

Vous devez mettre en retrait la deuxième instruction print.

L'indentation est importante en Python. C'est comme ça que vous délimitez des blocs dans cette langue.

0

La conversion en flottant utilise une syntaxe incorrecte. Cette syntaxe est valide pour C/C++/Java, mais pas en Python. Il devrait être:

numberx1 = float(raw_input('Enter first number: ')) 

qui sera interprété comme float("2.3"), qui est un constructeur pour le type float étant appelé avec un paramètre de chaîne. Et, oui, la syntaxe est exactement la même pour l'appel de la fonction, donc vous pourriez même penser que le constructeur est une fonction qui renvoie un objet.

+0

Code toujours en panne – jtl999

+0

Bien que ce ne soit pas une utilisation normale de la syntaxe python, c'est toujours un code valide (l'entrée/la conversion). Tout ici est de première classe, donc il devrait toujours être le même, même si nous enveloppons les noms de fonctions dans les parens. C'est juste un style terrible de le faire de cette façon. Je voulais juste faire cette distinction. –

+0

Cpde est toujours cassé – jtl999

1

En python, l'indentation de votre code est très importante. L'erreur que vous nous avez indiquée pointe ici:

if numbermodechoice == "yes": 
    try: 
    numberx1 = float(raw_input('Enter first number: ')) 
except ValueError: 
    print ("Oops you typed it wrong") 

Tout le code qui fait partie d'un bloc doit être indenté. En démarrant un bloc try, la ligne suivante fait partie de ce bloc et doit être indentée. Pour le réparer, indentez-le!

if numbermodechoice == "yes": 
    try: 
     numberx1 = float(raw_input('Enter first number: ')) 
    except ValueError: 
     print ("Oops you typed it wrong") 
+0

Ok downvoter ... Je vous appelle ... –

0
import sys 

class YesOrNo(object): 
    NO_VALUES = set(['n', 'no', 'f', 'fa', 'fal', 'fals', 'false', '0']) 
    YES_VALUES = set(['y', 'ye', 'yes', 't', 'tr', 'tru', 'true', '1']) 

    def __init__(self, val): 
     super(YesOrNo,self).__init__() 
     self.val = str(val).strip().lower() 

     if self.val in self.__class__.YES_VALUES: 
      self.val = True 
     elif val in self.__class__.NO_VALUES: 
      self.val = False 
     else: 
      raise ValueError('unrecognized YesOrNo value "{0}"'.format(self.val)) 

    def __int__(self): 
     return int(self.val) 

def typeGetter(dataType): 
    try: 
     inp = raw_input 
    except NameError: 
     inp = input 

    def getType(msg): 
     while True: 
      try: 
       return dataType(inp(msg)) 
      except ValueError: 
       pass 
    return getType 

getStr  = typeGetter(str) 
getInt  = typeGetter(int) 
getFloat = typeGetter(float) 
getYesOrNo = typeGetter(YesOrNo) 

def main(): 
    print("MathCheats Times-Ed by jtl999") 

    isFloat = getYesOrNo("Are you using a number with a decimal? (yes/no) ") 
    get = (getInt, getFloat)[int(isFloat)] 

    firstNum = get('Enter first number: ') 
    secondNum = get('Enter second number: ') 

    print("The answer is {0}".format(firstNum*secondNum)) 

if __name__=="__main__": 
    main() 
    if sys.platform in ('win32','win64'): 
     getStr('Press enter to exit') 
+0

L'OP a du mal à obtenir son indentation correctement. Il pense qu'il a besoin de lancer, comme (flotter) (quelque chose). Veuillez considérer si votre réponse pourrait être bien supérieure. –

Questions connexes