Mein Code:Python-Fehler: "global name 'counter1' ist nicht definiert"
class Persistence:
num = 0
counter1 = 0
counter2 = 0
def __init__(self, num):
self.num = num
#num = input("Enter a non-negative number:: ")
if num < 0:
raise NameError("Negative")
#test else:
#print "ok!"
num_list = []
def digitize(self, num):
num_list = []
n = str(num)
for digit in n:
num_list.append(int(digit))
return num_list
def sum_digits(self, num):
the_list = self.digitize(num)
the_sum = 0
for digit in the_list:
the_sum = the_sum + digit
return the_sum
def times_digits(self, num):
the_list = self.digitize(num)
the_product = 0
for digit in the_list:
the_product = the_product * digit
return the_product
def additive(self, num):
global counter1
sum1 = self.sum_digits(num)
list1 = []
list1 = self.digitize(sum1)
if list1.__len__() > 1:
global counter1
counter1 = counter1 + 1
self.additive(sum1)
return sum1, counter1
def multiplicative(self, num):
global counter2
prod1 = self.times_digits(num)
list1 = []
list1 = self.digitize(prod1)
if list1.__len__() > 1:
global counter1
counter2 = counter2 + 1
self.multiplicative(prod1)
return prod1, counter2
c = Persistence(5)
print c.additive(5)
print c.multiplicative(5)
nicht sicher, warum ich immer diese Fehlermeldung? Es scheint mir, dass ich den globalen Variablenzähler1 definiert habe. Ich bekomme auch diesen Fehler für Zähler2, und die einzige Möglichkeit, den Fehler zu beheben, ist, indem Sie counter1 = 0 (oder eine andere Zahl) eine einzelne Zeile oberhalb der Return-Anweisung für die additive() -Methode einfügen. Hilfe würde sehr geschätzt werden !!
Bitte geben Sie die vollständige Traceback in Ihrer Frage. – zondo
Anstatt sie global zu machen, verwenden Sie 'Persistence.counter1', um auf sie zuzugreifen oder sie zu einem Instanzattribut zu machen. – L3viathan
Sie haben es zu einem Klassenattribut anstelle einer globalen Variablen gemacht. Verwenden Sie '' Persistence.counter1' oder 'self.counter1' gemäß L3viathans Kommentar. Vermeiden Sie generell globale Variablen. – Evert