我一直在乱用这段代码几个小时,它仍然给我错误。我想为测试做一个'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'
答案 0 :(得分:0)
您无法直接调用实例方法:您必须首先实例化该类:
p = puntuacion(something, something_else)
p.calculo()
calculo()
方法不带任何参数:第一个参数self
是隐式的,并且对应于类实例。你没有通过它。
您还应该从input()
删除__init__
个功能;您已经通过aciertos
和errores
作为参数,通常您不想做&#34;复杂的&#34;在类的初始化中的东西(比如用户交互):
...
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()