Форум сайта python.su
Суть проблемы такова, оператор else зацепляется к оператору while, а нужно что бы цеплялся к if.
Отступы делал, цикл падает в ошибку. Без else все работает. Среда PyCharm.
def srch(cell,n):
while (rn_out_sheet[('F'+str(n))].value !=None):
if (rn_out_sheet[('F'+str(n))].value) == cell:
cell = rn_out_sheet[('H'+str(n))].value
break
else:
cell = 'Нет в работе'
n += 1
return cell
Офлайн
Уберите для начала все лишние скобки, у вас они где только можно рассованы, глаз устаёт
и напишите минимальный пример, который можно воспроизвести, мы же не знаем, что вы там передаете в функцию
Отредактировано FishHook (Ноя. 16, 2016 15:02:19)
Офлайн
Убрал.
def srch(cell,n):
while rn_out_sheet['F'+str(n)].value !=None:
if rn_out_sheet['F'+str(n)].value == cell:
cell = rn_out_sheet['H'+str(n)].value
break
else:
cell = 'Нет в работе'
break
n += 1
return cell
Офлайн
напишите минимальный пример, который можно воспроизвести, мы же не знаем, что вы там передаете в функцию
Офлайн
Да, ваш алгоритм, он забавный
break прерывает цикл (вдруг вы не знали)
у вас ветка if прерывает цикл, и ветка else тоже прерывает
каким образом цикл всегда выполняется только один раз
Офлайн
Break убрал, да знал что он завершает поэтому и запихал туда.
мне и надо что бы он выполнялся всего раз, он должен вернуть одно значение если условие if выполнится, а вот если не выполнится то нужно вернуть другое значение. В этом и заключается проблема, если стоит else то всегда возвращается значение из блока else.
Просто я не знаю как оператор else прицепить к оператору if
Отредактировано IceIsNice (Ноя. 16, 2016 15:30:12)
Офлайн
IceIsNiceА ЗАЧЕМ ВАМ ТОГДА ЦИКЛ?
мне и надо что бы он выполнялся всего раз
Офлайн
в общем вся картина, есть 2 файла excel с данными и надо из двух собрать третий файл.
Данные требуются не все, а часть из 1 файла и часть из второго.
Из 1 файла я тупо копирую что нужно, из второго надо найти значения.
Например, если в ячейку В5 надо найди данные из файла2, на основании значения А5, то в вышеописанную функцию передается значение А5 и там в цикле идет сравнение и если сравнение верно тогда возвращается нужное значение, иначе надо вернуть другое значение.
Этот цикл делает просто перебор строк и поиск нужной.
Офлайн
FishHookВопрос не в том, зачем мне цикл, мне надо просто вернуть из него одно из двух значений:
А ЗАЧЕМ ВАМ ТОГДА ЦИКЛ?
Цикл, который всегда выполняется только один раз. Вы понимаете, что это чушь?
Отредактировано IceIsNice (Ноя. 16, 2016 15:50:49)
Офлайн
IceIsNiceда как он может что-то перебирать, есть он выполняется один раз и вы его принудительно завершаете в любом случае?
Этот цикл делает просто перебор строк и поиск нужной.
Офлайн