私のコードは:Pythonのエラー: "グローバル名 'カウンタ' が定義されていません"
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(または他の数字)をadd()メソッドのreturn文の上に1行挿入することです。ヘルプは大いに感謝されるだろう!
質問に完全なトレースバックを入力してください。 – zondo
グローバルにするのではなく、 'Persistence.counter1'を使ってアクセスするか、インスタンス属性にします。 – L3viathan
グローバル変数ではなくクラス属性にしました。 L3viathanのコメントによれば、 'Persistence.counter1'または' self.counter1'を使います。とにかくグローバル変数は避けてください。 – Evert