Выдает ошибку TypeError: warn_the_sheep_begin() missing 2 required positional arguments: 'herd'
herd =['sheep', 'sheep', 'sheep', 'sheep', 'sheep', 'wolf', 'sheep', 'sheep']
def where_wolf():
for i in range (0,len(herd)):
if herd[i]=='wolf':
return i
i = where_wolf()
def warn_the_sheep_begin(herd):
i = i+1
while herd[i]=='sheep':
herd.remove(i)
i = i+1
return herd
print(warn_the_sheep_begin())
Ответы (1 шт):
у вас функция требует входной параметр
def warn_the_sheep_begin(herd)
но вы вызываете ее без параметра
print(warn_the_sheep_begin())
когда вы это исправите, то получите ошибку в строке
def warn_the_sheep_begin(herd):
i = i+1 # <- ошибка тут
потому что вы пытаетесь изменить внешнюю переменную, а питон этого не любит, как только вы начинаете менять переменную она становится локальной, а локальная переменная i в функции warn_the_sheep_begin не определена
когда вы исправите эту ошибку, то следующая будет логической:
herd.remove(i)
i = i+1
нельзя удалять из списка элемент, а потом еще и делать шаг вперед, так вы легко будете выходить за границы, удалять не те элементы и не удалять которые нужно
затем при других данных вы словите ошибку вот здесь
i = where_wolf()
ведь если волк не найден, то функция where_wolf ничего не возвращает, т.е. будет возвращено None, а вы это никак не обрабатываете, считая что в i всегда число
далее у вас ошибка в цикле while
while herd[i]=='sheep':
herd.remove(i)
i = i+1
return herd
в чем смысл цикла, если вы его сразу прерываете через return
кроме того в функции warn_the_sheep_begin у вас опять нет общего return из-за чего функция будет возвращать None если волки идут один за другим
P.S.
это вообще ваш код или вы пытаетесь что-то наваять на чужом, но с нулевыми знаниями в питоне?
P.P.S.
как я понимаю, ваш? код должен был делать только это:
herd = ['sheep', 'sheep', 'sheep', 'sheep', 'sheep', 'wolf', 'sheep', 'sheep', 'wolf']
def warn_the_sheep_begin(herd):
start = herd.index('wolf') if 'wolf' in herd else -1
if start == -1:
return herd
finish = herd.index('wolf', start + 1) if 'wolf' in herd[start + 1:] else -1
return herd[:start + 1] + (herd[finish:] if finish != -1 else [])
print(warn_the_sheep_begin(herd))
P.P.P.S.
вот так функция даже попонятнее и побыстрее будет
def warn_the_sheep_begin(herd):
try:
start = herd.index('wolf')
except ValueError:
return herd
try:
finish = herd.index('wolf', start + 1)
except ValueError:
return herd[:start + 1]
return herd[:start + 1] + herd[finish:]