class App:
def filter(*input):
result = []
print(type(input))
for arrayOfColors in input:
print(type(arrayOfColors))
goodColors = getGoodColors(arrayOfColors)
result.add(goodColors)
return result
def getGoodColors(arrayOfColors):
setOfNotGoodColors = ["gray", "yellow", "purple"]
goodColors = []
for color in arrayOfColors:
if color not in setOfNotGoodColors:
goodColors.add(color)
return goodColors
app = App()
app.filter(["blue", "red"], ["gray","blue"])
Результат компиляции:
<class '__main__.App'>
Traceback (most recent call last):
File "<string>", line 20, in <module>
File "<string>", line 7, in filter
File "<string>", line 14, in getGoodColors
TypeError: 'App' object is not iterable
Как избавиться от этой ошибки? Мне нужно написать больше не кодовых символов, пожалуйста, помогите.
input
— это имя встроенной функции Python. Не используйте его в качестве имени переменной.
Добро пожаловать в Stack Overflow! Пожалуйста, прочитайте о Как отлаживать небольшие программы . Вы также можете использовать Python-Tutor, который помогает визуализировать выполнение кода шаг за шагом.
Используйте def filter(self, *input):
обратите внимание на отсутствующий self
. Но здесь больше неправильно.
тоже list.append
нет list.add()
filter
что вы используете точки для фильтра python - programiz.com/python-programming/methods/built-in/filterдобавление собственного параметра и метода изменения вместо добавления помогает скомпилировать файл :)
Вы можете увидеть проблему, если добавите print(input)
прямо под def filter(*input):
; вот увидишь
(<__main__.App object at 0x00000211E39C0A48>, ['blue', 'red'], ['gray', 'blue'])
Это результат self
в каждом классе. Вы можете избежать этого в своем цикле for
с помощью кусочка [1:]
. Кроме того, у питона list
нет атрибута add
; они называются append
:
class App:
def filter(*input):
result = []
for arrayOfColors in input[1:]:
goodColors = getGoodColors(arrayOfColors)
result.append(goodColors)
return result
def getGoodColors(arrayOfColors):
setOfNotGoodColors = ["gray", "yellow", "purple"]
goodColors = []
for color in arrayOfColors:
if color not in setOfNotGoodColors:
goodColors.append(color)
return goodColors
app = App()
app.filter(["blue", "red"], ["gray","blue"])
Обратите внимание, что это плохая практика называть ваши переменные именами, которые используются встроенными модулями, поэтому переменную input
лучше назвать my_input
.
Внутри класса Python каждый метод должен иметь параметр self
, например:
class App:
def filter(self, *input):
с параметром self вы можете получить доступ к свойствам этого экземпляра.
другая проблема: чтобы добавить значение в список python, вам нужно использовать функцию append
, например:
goodColors.append(color)
Ваш окончательный код должен выглядеть примерно так:
class App:
def filter(self, *input):
result = []
print(type(input))
for arrayOfColors in input:
print(type(arrayOfColors))
goodColors = getGoodColors(arrayOfColors)
result.append(goodColors)
return result
def getGoodColors(arrayOfColors):
setOfNotGoodColors = ["gray", "yellow", "purple"]
goodColors = []
for color in arrayOfColors:
if color not in setOfNotGoodColors:
goodColors.append(color)
return goodColors
app = App()
app.filter(["blue", "red"], ["gray","blue"])
Примечание. Вы не должны использовать введенное имя в качестве параметра, потому что это имя встроенной функции, но код работает, даже если вы его используете, поэтому я не стал его исправлять.
Я не понимаю, чего вы пытаетесь добиться. Пожалуйста, укажите входные данные и ожидаемый результат.