If one IF is satisfied, skip the rest in the nest...
Denis McMahon
denismfmcmahon at gmail.com
Wed Oct 21 22:08:15 EDT 2015
On Wed, 21 Oct 2015 20:07:21 +0000, Grant Edwards wrote:
> On 2015-10-21, Denis McMahon <denismfmcmahon at gmail.com> wrote:
>> On Wed, 21 Oct 2015 10:31:04 -0700, bigred04bd3 wrote:
>>
>>> So here what I have, I have a 3 IF's within the same level. If one IF
>>> is satisfied, I would like to "skip" the other IFs and continue with
>>> my code.
>>
>> c1 = wb1_sheet1.cell(row=cell + 1, column=2).value == 0 and
>> wb1_sheet1.cell(row=cell + 1, column=3).value == 0
>>
>> c2 = wb1_sheet1.cell(row=cell + 2, column=2).value == 0 and
>> wb1_sheet1.cell(row=cell + 2, column=3).value == 0
>>
>> c3 = wb1_sheet1.cell(row=cell + 3, column=2).value == 0 and
>> wb1_sheet1.cell(row=cell + 3, column=3).value == 0
>>
>> if c1:
>> if c2:
>> if c3:
>> # c1 && c2 && c3 # 4 second open
>> else:
>> # c1 && c2 # 3 second open
>> else:
>> # only c1 # 2 second open
>
> if c1 && c2 && c3:
> pass # 4 seconds
> elif c1 && c2:
> pass # 3 seconds
> elif c1:
> pass # 2 seconds
>
> Or if you want to be particulary obtuse:
>
> seconds = {0b111:4, 0b110:3, 0b100:2}.get(c1<<2 | c2<<1 | c3<<0, None)
Not really valid, because #seconds n is simply a marker to indicate which
branch of the OP's code to execute.
>> Each condition only gets evaluated once.
>
> OK.
Yes, but in the structure I suggest, you can move the conditions back
into the if statements and they still only each get evaluated once. Viz
my alternative to the OP's code:
if wb1_sheet1.cell(row=cell + 1, column=2).value == 0 and wb1_sheet1.cell
(row=cell + 1, column=3).value == 0:
if wb1_sheet1.cell(row=cell + 2, column=2).value == 0 and
wb1_sheet1.cell(row=cell + 2, column=3).value == 0:
if wb1_sheet1.cell(row=cell + 3, column=2).value == 0 and
wb1_sheet1.cell(row=cell + 3, column=3).value == 0:
open += 3
open_seconds += 4
start = wb1_sheet1.cell(row=cell + 4, column=2).coordinate
else:
open += 3
open_seconds += 3
start = wb1_sheet1.cell(row=cell + 3, column=2).coordinate
else:
open += 3
open_seconds += 2
start = wb1_sheet1.cell(row=cell + 2, column=2).coordinate
Not trying to be obtuse here, trying to suggest a practical solution.
Of course, the benefit of reducing the number of times each lookup into
the worksheet is performed by reducing the number of times each
comparison evaluated is going to depend on the computational and memory
manipulation cost of doing so (I assume the workbook is loaded in memory,
so no IO costs), and how frequently this set of comparisons is being
performed.
--
Denis McMahon, denismfmcmahon at gmail.com
More information about the Python-list
mailing list