0

私はすべてを試しましたが、コードは非常に近いようですが、変数を定義すると名前エラーが発生し続けます。

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()

私が得るエラーメッセージは次のとおりです。

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 
4

3 に答える 3

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 を変更すると、r ではなくクラスの対応する属性になりますself.radius...self.radius

また、あなたの にはいくつかの小さな間違いがあります__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)
于 2013-04-22T07:06:49.617 に答える
1

スコープについて教えてください:

Python では、変数のスコープは、変数が定義されているコードに限定されます。たとえば、次のコードを見てください。

def my_function():
    r = 1234

print r

は にローカルであり、 の外には存在しないNameErrorため、これにより が得られます。rmy_function()my_function()

同様に:

class MyClass(object):

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

    def access_r(self):
        return r

m = MyClass(1234)
m.access_r()

このコードは、 のスコープでのみ定義されているNameErrorため、 も提供します。r__init__()

ただし、上記の例ではself.radius = r. 両方の機能selfでアクセスできるのはたまたまです。の値は、同じクラス内の他の関数内からアクセスするという明確な目的のために格納されます。たとえば、次の変更を行います。rself.radius

class MyClass(object):

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

    def access_r(self):
        return self.radius

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

このコードはスムーズに実行され、 の値を返します。1234r

于 2013-04-22T07:21:39.293 に答える
0

「r」は文字列として入力されているようです。

r=float(input("Enter radius:")) と書きます

于 2013-04-22T07:49:01.277 に答える