J'ai une fonction qui doit imprimer les carrés dans l'intervalle donné:Pourquoi mon programme renvoie-t-il None in for loop?
class Squares:
def __init__(self, min, max):
self.min = min
self.max = max
def __iter__(self):
return self
def __next__(self):
a_list = []
for i in range((self.max)+1):
a_list += [i**2]
if self.min <= self.max:
if self.min in a_list:
result = self.min
self.min += 1
return result
else:
self.min += 1
else:
raise StopIteration
import math
for i in Squares(5, 50):
print(i)
Il faut imprimer 9, 16, 25, 49, mais la sortie était:
None
None
None
None
9
None
None
None
None
None
None
16
None
None
None
None
None
None
None
None
25
None
None
None
None
None
None
None
None
None
None
36
None
None
None
None
None
None
None
None
None
None
None
None
49
None
Pourquoi?
Vous ne renvoyez rien du bloc interne 'else:'? –
si le numéro n'est pas dans la liste, alors ne pas besoin de revenir, ai-je raison? –
L'itérateur doit renvoyer une valeur suivante. Si ce n'est pas le cas, vous obtenez ce que vous voyez actuellement. Donc soit changer votre code pour a) générer une liste qui ne contient que des carrés ou b) sauter des valeurs qui ne sont pas des carrés. –