AttributeError: 'dict' object has no attribute '____'

AttributeError: 'dict' object has no attribute '____'

我已经弄乱这段代码几个小时了,它仍然给我错误。我想做一个 'automark' 测试,在其中介绍好答案和坏答案,然后计算最终分数。

代码:

class puntuacion:
    def __init__(self, aciertos, errores):
        self.aciertos = int(input("Introduce el numero de aciertos"))
        if self.aciertos > 40:
            print("Numero maximo de aciertos: 40")
            exit()
        self.errores = int(input("Introduce el numero de errores: "))

    def calculo(self):
        totalac = self.aciertos * 0.25
        print(totalac)
        while self.errores > 3:
            totalerr += -0.25
            self.errores - 3
        print'Nota final: ', totalac-totalerr
calculo({})

错误:

  C:\Users\Admin>python C:\Users\Admin\Documents\python\test2.py
Traceback (most recent call last):
  File "C:\Users\Admin\Documents\python\test2.py", line 1, in <module>
    class puntuacion:
  File "C:\Users\Admin\Documents\python\test2.py", line 17, in puntuacion
    calculo({})
  File "C:\Users\Admin\Documents\python\test2.py", line 10, in calculo
    totalac = self.aciertos * 0.25
AttributeError: 'dict' object has no attribute 'aciertos'

不能直接调用实例方法:必须先实例化class:

p = puntuacion(something, something_else)
p.calculo()

calculo() 方法不接受任何参数:第一个参数 self 是隐式的,对应于 class 实例。你不及格。


您还应该从 __init__ 中删除 input() 函数;你已经将 aciertoserrores 作为参数传递了,通常你不想在 class 的初始化中做 "complicated" 的事情(比如用户交互):

...
def __init__(self, aciertos, errores):
    self.aciertos = aciertos
    self.errores = errores
...

然后:

aciertos = int(input("Introduce el numero de aciertos"))
if aciertos > 40:
    sys.exit("Numero maximo de aciertos: 40")
errores = int(input("Introduce el numero de errores: "))

p = puntuacion(aciertos, errores)
p.calculo()