2017-03-21 4 views
0

Je voulais faire une simple calculatrice de racine carrée.Python Calculatrice de racine carrée Erreur

num = input('Enter a number and hit enter: ') 

if len(num) > 0 and num.isdigit(): 
    new = (num**0.5) 
    print(new) 
else: 
    print('You did not enter a valid number.') 

Il ne semble pas comme si je l'ai fait quelque chose de mal, cependant, lorsque je tente d'exécuter le programme et après je entrer un numéro, je suis confronté avec le message d'erreur suivant:

Traceback (most recent call last): 
File "/Users/username/Documents/Coding/squareroot.py", line 4, in <module> 
new = (num**0.5) 
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float' 

Process finished with exit code 1 
+1

Vous vérifiez attentivement si l'entrée * pourrait * être converti en un numéro, puis * ne se soucient pas vraiment de le faire *! – jonrsharpe

+0

Aussi, des nombres comme '1.5' ou' 1E10' ne seront pas valides - pourquoi? La méthode pythonique consiste à essayer de convertir l'entrée en float et d'imprimer le message d'erreur seulement lorsqu'une exception se produit. –

+0

Copie possible de [TypeError: type (s) d'opérande non pris en charge pour -: 'str' et 'int'] (http://stackoverflow.com/questions/2376464/typeerror-unsupported-operand-types-for-str-and -int) –

Répondre

3

Vous pouvez utiliser cette solution. Ici, essayer et attraper est capable de gérer toutes sortes d'entrées. Donc, votre programme n'échouera jamais. Et puisque l'entrée est en cours de conversion pour flotter. Vous ne serez confronté à aucune erreur liée au type.

try: 
    num = float(input('Enter a positive number and hit enter: ')) 
    if num >= 0: 
     new = (num**0.5) 
    print(new) 

except: 
    print('You did not enter a valid number.') 
0

La fonction d'entrée vous renvoie la valeur de chaîne. donc vous devez l'analyser correctement

num = raw_input('Enter a number and hit enter: ') 

if num.isdigit(): 
    if int(num) > 0: 
     new = (int(num)**0.5) 
     print(new) 
else: 
    print('You did not enter a valid number.') 
+0

Ensuite, sa deuxième ligne échouera. –

+0

Hmm, je l'ai essayé et cela a exclu cette erreur. Cependant, je donne maintenant un autre message d'erreur: retraçage (appel le plus récent en dernier): Fichier "/Users/username/Documents/Coding/squareroot.py", ligne 3, dans si len (num)> 0 et num.isdigit(): TypeError: l'objet de type 'int' n'a pas de len() – PythonPie

+0

@ShivkumarKondi Quelle est la différence entre ma réponse et la vôtre? – eyllanesc

0

Utilisez le module Math pour effectuer des calculs simples. se réfèrent: Math module Documentation.

import math 
num = raw_input('Enter a number and hit enter: ') 

if num.isdigit(): 
    num = float(num) 
    new = math.sqrt(num) 
    print(new) 
else: 
    print('You did not enter a valid number.')