Python运行报错circle() takes 0 positional arguments but 3 were given如何解决
错误原因排查
- 核心语法错误:混淆了Python中类和函数的定义关键字,自定义类需要用
class声明,你当前代码用def把circle定义成了无参普通函数,调用时传入3个参数自然触发参数数量不匹配的报错。 - 逻辑错误:
testBelongs方法存在两处问题:1. 访问实例属性a、b、r时没有加self.前缀,运行时会触发变量未定义报错;2. 点是否在圆内的判断逻辑错误,缺少待判断点的入参,距离计算公式也不符合欧氏距离的计算规则。 - 其他问题:调用面积、周长方法后没有打印输出,运行后无法看到计算结果。
修正后完整代码
class Circle: def __init__(self, a, b, r): self.a = a # 圆心x坐标 self.b = b # 圆心y坐标 self.r = r # 圆半径 def Area(self): return 3.14 * self.r ** 2 def Perimeter(self): return 2 * 3.14 * self.r def testBelongs(self, x, y): # 计算待判断点到圆心的欧氏距离 d = ((x - self.a) ** 2 + (y - self.b) ** 2) ** 0.5 if d < self.r: print(f"点({x},{y}) lies inside circle") else: print(f"点({x},{y}) Lies outside circle") # 实例化圆:圆心(1,2),半径5 c = Circle(1, 2, 5) # 输出计算结果 print("圆周长:", c.Perimeter()) print("圆面积:", c.Area()) # 测试点(3,4)是否在圆内 c.testBelongs(3, 4)
修正说明
- 用
class关键字替换原def声明Circle类,支持实例化传参 - 修正
testBelongs方法的逻辑,新增待判断点的x、y入参,调整距离计算公式,所有实例属性访问都添加self.前缀 - 补充方法返回值的打印逻辑,以及点位置判断的提示信息可读性优化
内容的提问来源于stack exchange,提问作者Poovarasan Dayalan
相关产品推荐
相关产品推荐

