Мой код:Python ошибка: "глобальное имя 'счетчик1' не определен"
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)
Не знаю, почему я получаю эту ошибку? Мне кажется, что я определил глобальную переменную counter1. Я также получаю эту ошибку для counter2, и единственный способ, которым я смог разрешить ошибку, - вставить counter1 = 0 (или любое другое число) одну строку над оператором return для метода additive(). Помощь была бы очень признательна!
Просьба предоставить полный ответ в вашем вопросе. – zondo
Вместо того чтобы сделать их глобальными, используйте 'Persistence.counter1' для доступа к нему или сделайте его атрибутом экземпляра. – L3viathan
Вы сделали это атрибутом класса вместо глобальной переменной. Согласно комментарию L3viathan, используйте 'Persistence.counter1' или' self.counter1'. Как правило, во избежание глобальных переменных. – Evert