#python #class #for-loop
Вопрос:
Я новичок в программировании, так что это может показаться глупым вопросом, но не могли бы вы помочь мне с этим кодом….. Я пытаюсь напечатать только первые десять чисел после числа «self.num», но каким-то образом это просто входит в бесконечный цикл, который я должен завершить
class TopTen:
def __init__(self, num):
self.num = num
def __iter__(self):
return self
def __next__(self):
if self.num <= self.num 10:
val= self.num
self.num = 1
return val
else:
raise StopIteration
values = TopTen(5)
for i in values:
print(i)
Комментарии:
1.
if self.num <= self.num 10:
разве вы не думаете, что это всегда так?
Ответ №1:
Вы можете реализовать это следующим образом:
class TopTen:
def __init__(self, num):
self.num = num
self.maxNum = num 10
def __iter__(self):
return self
def next(self):
if self.num < self.maxNum:
val = self.num
self.num = 1
return val
else:
raise StopIteration
for i in TopTen(5):
print(i)
# Prints
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13
# 14
Причина , по которой у вас бесконечный цикл , заключается в том, что if self.num <= self.num 10:
всегда будет оцениваться True
, как вы увеличиваете self.num на 1 каждый раз, вызывая next()
, поэтому self.num 10
всегда будет выше, чем self.num
.
Комментарии:
1. Ааа…. Хорошо… Большое спасибо за вашу помощь… Действительно ценю это
Ответ №2:
Условие теста if self.num <= self.num 10:
в вашем классе всегда будет истинным, вот причина бесконечного цикла: