2013-04-22 2 views
0

모든 것을 시도했으며 코드가 매우 비슷해 보이지만 변수를 정의하면 이름 오류가 계속 발생합니다.Python 3 표면 영역과 구형 체적을 반환하는 클래스 작성

from math import * 

class Spheres: 
    def __init__(self, radius): 
     self.radius = r 
     self.area = 0 
     self.volume = 0 

    def getRadius(self): 
     return self.radius 

    def surfaceArea(self): 
     self.area = 4 * 3.14 * (r*r) 
     return (self.area) 

    def getVolume(self): 
     self.volume = (4/3) * 3.14 * (r * r * r) 
     return (self.volume) 


def main(): 
    r = input("Enter the radius of the sphere: ") 
    s = Spheres(r) 
    print("The volume of the sphere is: ", s.surfaceArea()) 
    print("The surface area of the sphere is: ", s.volume()) 

if __name__ == '__main__': 
    main() 

내가 오류 메시지는 다음과 같습니다 모든 연구의 self.radius 원인 self.radius로 변경 위의 기능에

Traceback (most recent call last): 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 30, in <module> main() 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 26, in main print("The volume of the sphere is: ", s.surfaceArea()) 
    File "/local/files/jfult001/CSC221/lab10/9ball.py", line 15, in surfaceArea self.area = 4 * 3.14 * (r*r) 
NameError: global name 'r' is not defined 
+0

은'NameError' 기능 :

나는 R = 플로트() 입력 ("반지름을 입력")를 작성합니다? 질문에 포함시켜 주시겠습니까? –

+0

또한 코드 들여 쓰기를 확인하십시오. 위의 들여 쓰기가 실제 코드가 들여 쓰여진 모양을 정확하게 반영합니까? –

+0

아니요 클래스의 함수는 모두 첫 번째 것과 같이 들여 쓰여지고 오류는 다음과 같습니다. – user2306249

답변

3
def surfaceArea(self): 
    self.area = 4 * 3.14 * (r*r) 
    return (self.area) 

def getVolume(self): 
    self.volume = (4/3) * 3.14 * (r * r * r) 
    return (self.volume) 

이 클래스하지 R의 해당 속성입니다 ...

__init__에도 약간의 실수가 있습니다. 다음과 같이 수업을 수정하십시오.

class Spheres: 
    def __init__(self, r): 
     self.radius = r 
     self.area = 0 
     self.volume = 0 

    def getRadius(self): 
     return self.radius 

    def surfaceArea(self): 
     r=self.radius 
     self.area = 4 * 3.14 * (r*r) 
     return (self.area) 

    def getVolume(self): 
     r=self.radius 
     self.volume = (4/3) * 3.14 * (r * r * r) 
     return (self.volume) 
+0

날 준다 : TypeError : 'str'타입이 아닌 int에 의해 시퀀스를 곱할 수 없다 – user2306249

+0

r = input ("구의 반지름 입력 :") 이렇게하십시오 : r = int (input ("구체의 반경을 입력하십시오 :")) – Dusk

+0

이제 파일을 얻습니다 : "/local/files/jfult001/CSC221/lab10/9ball.py", 27 행, 주 인쇄 ("구의 표면적은 : "), s.volume() TypeError : 'int'객체를 호출 할 수 없습니다. – user2306249

1

내가 당신에게 약 범위 말해 보자. 파이썬에서

, 변수는 , 또는 제한을 범위, 그들은이에 정의 된 코드를 예를 들어 아래의 코드를 가지고 :

def my_function(): 
    r = 1234 

print r 
rmy_function()- 지역 하고 my_function()의 외부에 존재하지 않기 때문에

이것은 당신에게 NameError을 줄 것이다. 마찬가지로

:

class MyClass(object): 

    def __init__(self, r): 
     self.radius = r 

    def access_r(self): 
     return r 

m = MyClass(1234) 
m.access_r() 

이 코드는 또한 NameErrorr 때문에 단지 __init__()의 범위에 정의되어 당신에게 제공 할 것입니다.

위의 예에서 사용자는 self.radius = r입니다. self에 액세스 할 수 있으며 모두 함수에 액세스 할 수 있습니다. r의 값은 동일한 클래스의 다른 함수 내에서 액세스하기 위해 명시 적으로 self.radius에 저장됩니다. 예를 들어, 다음과 같은 수정을 가지고 :이 코드는 원활 반환 1234, r의 값을 실행

class MyClass(object): 

    def __init__(self, r): 
     self.radius = r 

    def access_r(self): 
     return self.radius 

m = MyClass(1234) 
print m.access_r() 

.

0

'r'이 문자열로 입력 된 것처럼 보입니다.