Ваш код, кажется, пытается удалить список из целого числа.Поменяйте местами имена переменных в цикле следующим образом:
if not isHarshad(x):
y1.remove(r)
Я изменил ваше условие, чтобы сделать его более питонным: при сравнении с логическими значениями вам не нужно записывать его явно.Таким образом, в этом случае, если isHarshad
возвращает True, not
инвертирует его, и приведенный ниже код не выполняется, но когда он возвращает false, он инвертируется в True, и элемент удаляется.
В общем, вы могли бы действительно сократить свой код, если бы использовали понимание списка:
def ithHarshad(n):
return [i for i in range(1, n+1) if isHarshad(i)]
Этот код означает, что он создаст список значений 1 -> n
(включительно) ивключайте значение только в том случае, если результат фильтрации через isHarshad
равен True