2016-07-11 2 views
0

Je tente de créer un petit programme qui va calculer l'aire d'une forme. Quand je mets le nom de la forme, il affiche "function at 0xetc". J'ai beaucoup de temps pour déterminer où est le problème. Je sais que ma fonction area est probablement foirée mais je ne peux pas y arriver pour la déboguer. J'ai d'abord pensé que j'avais défini des fonctions avec les mêmes noms que les formes, il les appelait depuis l'entrée mais je change les noms et j'obtiens le même message. voici le code:continuer à obtenir une erreur 'fonction @ 0xb6ff9924 (ou quelque chose de similaire)'

#geometry program 

#shapes 

def squar(x, y): 
    result = x * y 
    return result 

def rectangl(x, y): 
    result = x * y 
    return result 

def circl(r): 
    result = 3.14 * (r^2) 
    return result 

def triangl(h, b): 
    result = (h^b * b)/2 
    return result 

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ") 



#Calculating the area 

def area(s): 
    if str(s) == "square": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     squar(x, y) 
     return squar 
    elif str(s) == "rectangle": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     rectangl(x,y) 
     return rectrangl 
    elif str(s) == "circle": 
     r = int(raw_input("Radius?")) 
     circl(r) 
     return circl 
    elif str(s) == "triangle": 
     h = int(raw_input("Height?")) 
     b = int(raw_input("Base Width?")) 
     triangl(h, b) 
     return triangl 

    else: 
     print "I don't know that one" 


print area 

grâce ps. Si l'indentation semble un peu décalée d'un espace ou deux, c'est à cause du formatage ici. ils ne jettent aucune erreur quand je cours le programme.

+0

Vous retournez _function itself_. Essayez de renvoyer _result de la fonction call_ - par ex. 'return rectangl (x, y)' –

Répondre

1

Vous avez un total de 6 erreurs que vous devez corriger:

  • Dans area() classe, supprimer toutes les 4 instructions de retour que vous avez.
  • Comme les 4 méthodes que vous appelez dans la zone() valeurs de retour, vous devez afficher leurs résultats par: print method_name(arguments)
  • Enfin, vous devrez instancier correctement la classe area()

Voici comment corriger les erreurs mentionnées ci-dessus:

# Shapes 
def squar(x, y): 
    result = x * y 
    return result 

def rectangl(x, y): 
    result = x * y 
    return result 

def circl(r): 
    result = 3.14 * (r^2) 
    return result 

def triangl(h, b): 
    result = (h^b * b)/2 
    return result 

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ") 

# Calculating the area 
def area(s): 
    if str(s) == "square": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     print squar(x, y) 
    elif str(s) == "rectangle": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     print rectangl(x,y) 
    elif str(s) == "circle": 
     r = int(raw_input("Radius?")) 
     print circl(r) 
    elif str(s) == "triangle": 
     h = int(raw_input("Height?")) 
     b = int(raw_input("Base Width?")) 
     print triangl(h, b) 
    else: 
     print "I don't know that one" 

area(s) 
+1

Merci. Cela l'a réparé. –

0

votre problème principal est simple, vous n'appelez pas les fonctions. Dans votre dernière ligne print area, vous obtenez la position en mémoire où se trouve cette fonction. Vous devez l'appeler print area(s) avec la variable précédemment définie s. Ensuite, dans votre fonction area, vous faites de même, vous semblez penser que le résultat d'un appel de fonction est sauvegardé comme par magie dans une variable du même nom que la fonction, mais ce n'est pas le cas. faire la même chose que vous faites dans le vôtre forme fonctions, sauvegarder le résultat dans la variable et le retourner, par exemple

result = squar(x,y) 
return result 

ou mieux encore, retourner le résultat directement

return squar(x,y) 

en PYT hon, tout est un objet, les fonctions incluses, donc quand vous faites return squar vous retournez un objet fonction.

Une version corrigée de votre code peut être:

#geometry program 

#shapes 

def rectangl(x, y): 
    return x * y 

def circl(r): 
    return 3.14 * (r**2) 

def triangl(h, b): 
    return (h^b * b)/2 

#Calculating the area  

def area(s): 
    if s == "square" or s == "rectangle": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     return rectangl(x, y) 
    elif s == "circle": 
     r = int(raw_input("Radius?")) 
     return circl(r) 
    elif s == "triangle": 
     h = int(raw_input("Height?")) 
     b = int(raw_input("Base Width?")) 
     return triangl(h, b) 
    else: 
     print "I don't know that one" 

s = raw_input("Shapes are square, rectangle, circle or triangle. Pick a shape and I will calculate its area. ") 
print area(s)  

autre chose avec votre code est que vous n'avez pas besoin d'appeler str dans quelque chose qui est déjà une chaîne; aussi un carré est un rectangle, vous pouvez utiliser la même fonction pour les deux; et l'exponentiation en python est faite avec ** comme 2**5; il y a d'autres choses comme au lieu d'imprimer un message lancer une exception, mais je laisse cela à votre goût

0

Je pense que vous avez confondu avec le nom de la fonction et sa valeur de retour, voici ce qui a appris de How to Think Like a Computer Scientist:

" En Python, une fonction est une séquence nommée d'instructions qui appartiennent ensemble. " "L'instruction return est suivie d'une expression évaluée dont le résultat est renvoyé à l'appelant comme" fruit "de l'appel de cette fonction." La fonction elle-même est un objet, son nom est comme un nom de variable, mais son nom indique le point d'entrée d'un code. C'est pourquoi lorsque vous appelez print pour imprimer le nom de la fonction, il imprime la fonction ... @ ...., votre but réel est d'imprimer sa valeur de retour du dernier appel. Voici donc ce que je pense que vous pouvez faire:

def area(s): 
    if str(s) == "square": 
     x = int(raw_input("Height? "))   
     y = int(raw_input("Width?")) 
     squar_return_value = squar(x, y) 
     return squar_return_value 
       . 
       . 
       . 

print area(s) 

L'affectation à « squar_return_value = » créerait un des associés de nom de variable avec un objet retourné par appel de fonction « squar (x, y) », vous pouvez utiliser squar_return_value comme si vous utilisiez x, y. J'espère que cela vous aidera à comprendre la différence entre un nom de fonction et sa valeur de retour.