NameError:未定义类

2024-09-29 06:33:25 发布

您现在位置:Python中文网/ 问答频道 /正文

运行以下代码:

import math
    val=int(input("Vill du använda πr2(1) eller (πd2)/4(2)"))

if val == "1":
  class cirkel():
    def __init__(self,radie):
      self.A=radie
    def area(self):
      return ((self.A*self.A)*math.pi)

radie1=int(input("Vad är din radie?\n"))
circle=cirkel(radie1)
print("Arean av cirkeln är",circle.area())

if val == "2":
  class cirkel():
    def __init__(self,diameter):
      self.A=diameter
    def area(self):
      return  (((self.A*self.A)*math.pi)/4)

diameter1=int(input("vad är din diameter?\n"))
circle=cirkel(diameter1)
print("Arean av cirkeln är", circle.area())

导致此错误的原因:

Traceback (most recent call last): File "main.py", line 11, in circle=cirkel(radie1) NameError: name 'cirkel' is not defined

我如何解决这个问题


Tags: selfinputifinitdefareamathval
3条回答

您的“val”具有int类型,但您将其与两个if语句中的字符串文本进行比较,这意味着该条件永远不会为true,从而导致“cirkel”未定义。 您应该将“val”与int文本(val==1而不是val==1)进行比较,或者将其转换为字符串

您需要将代码移动一点:

import math
val=int(input("Vill du använda πr2(1) eller (πd2)/4(2)"))

if val == "1":
  class cirkel():
    def __init__(self,radie):
      self.A=radie
    def area(self):
      return ((self.A*self.A)*math.pi)

  radie1=int(input("Vad är din radie?\n"))
  circle=cirkel(radie1)
  print("Arean av cirkeln är",circle.area())

if val == "2":
  class cirkel():
    def __init__(self,diameter):
      self.A=diameter
    def area(self):
      return  (((self.A*self.A)*math.pi)/4)

  diameter1=int(input("vad är din diameter?\n"))
  circle=cirkel(diameter1)
  print("Arean av cirkeln är", circle.area())

原因是,在代码中,如果val为2,则类cirkel直到该位之后才定义:

radie1=int(input("Vad är din radie?\n"))
circle=cirkel(radie1)
print("Arean av cirkeln är",circle.area())

因此,当您尝试设置circle=circle()时,尚未定义该类

我会说,总的来说,这不是一个好的设计。您应该考虑定义两个单独的类,然后根据Vall的值来决定使用哪一个类,例如:

class CircleRad:
    ...

class CircleDiam:
    ...

if val == 1:
    circle = CircleRad()
    ...
elif val == 2:
    circle = CircleDiam()
    ...

(另请注意,根据PEP8惯例,类的名称应以大写字母开头。)

首先-Python中的类不需要括号,因此class cirkel():应该转换为class cirkel:

次要-主要问题是if条件-if val == '1':应更改为if val == 1:,因为它是整数比较,而不是字符串

相关问题 更多 >