IceIsNice
Ноя. 16, 2016 14:55:31
Суть проблемы такова, оператор 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:01:12
Уберите для начала все лишние скобки, у вас они где только можно рассованы, глаз устаёт
и напишите минимальный пример, который можно воспроизвести, мы же не знаем, что вы там передаете в функцию
IceIsNice
Ноя. 16, 2016 15:03:45
Убрал.
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
FishHook
Ноя. 16, 2016 15:10:44
напишите минимальный пример, который можно воспроизвести, мы же не знаем, что вы там передаете в функцию
FishHook
Ноя. 16, 2016 15:13:41
Да, ваш алгоритм, он забавный
break прерывает цикл (вдруг вы не знали)
у вас ветка if прерывает цикл, и ветка else тоже прерывает
каким образом цикл всегда выполняется только один раз
IceIsNice
Ноя. 16, 2016 15:27:40
Break убрал, да знал что он завершает поэтому и запихал туда.
мне и надо что бы он выполнялся всего раз, он должен вернуть одно значение если условие if выполнится, а вот если не выполнится то нужно вернуть другое значение. В этом и заключается проблема, если стоит else то всегда возвращается значение из блока else.
Просто я не знаю как оператор else прицепить к оператору if
FishHook
Ноя. 16, 2016 15:32:12
IceIsNice
мне и надо что бы он выполнялся всего раз
А ЗАЧЕМ ВАМ ТОГДА ЦИКЛ?
Цикл, который всегда выполняется только один раз. Вы понимаете, что это чушь?
IceIsNice
Ноя. 16, 2016 15:42:14
в общем вся картина, есть 2 файла excel с данными и надо из двух собрать третий файл.
Данные требуются не все, а часть из 1 файла и часть из второго.
Из 1 файла я тупо копирую что нужно, из второго надо найти значения.
Например, если в ячейку В5 надо найди данные из файла2, на основании значения А5, то в вышеописанную функцию передается значение А5 и там в цикле идет сравнение и если сравнение верно тогда возвращается нужное значение, иначе надо вернуть другое значение.
Этот цикл делает просто перебор строк и поиск нужной.
IceIsNice
Ноя. 16, 2016 15:50:22
FishHook
А ЗАЧЕМ ВАМ ТОГДА ЦИКЛ?
Цикл, который всегда выполняется только один раз. Вы понимаете, что это чушь?
Вопрос не в том, зачем мне цикл, мне надо просто вернуть из него одно из двух значений:
1. Значение, если условие в операторе if истинно.
2. Значение, если условие в операторе if ложно.
FishHook
Ноя. 16, 2016 15:50:40
IceIsNice
Этот цикл делает просто перебор строк и поиск нужной.
да как он может что-то перебирать, есть он выполняется один раз и вы его принудительно завершаете в любом случае?
Вы, кажется, взяли себе задачу не по силам, потренируйтесь на чем-нибудь по-проще, без экселя, файлов и прочей отвлекающей фигни. Короче, вам надо задачи порешать для начала.