Re: If one IF is satisfied, skip the rest in the nest...
In <50a6789a-3965-430b-9a91-b08adcedf...@googlegroups.com> bigred04...@gmail.com writes: > So here what I have, I have a 3 IF's within the same level. If one IF is s= > atisfied, I would like to "skip" the other IFs and continue with my code. > # 4 second open > if wb1_sheet1.cell(row=cell + 1, column=2).value == 0 and > wb1_sheet1.cell(row=cell + 1, column=3).value == 0 and > wb1_sheet1.cell(row=cell + 2, column=2).value == 0 and > wb1_sheet1.cell(row=cell + 2, column=3).value == 0 and > 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).coord= > inate > break > # 3 second open > if wb1_sheet1.cell(row=cell + 1, column=2).value == 0 a= > nd wb1_sheet1.cell(row=cell + 1, column=3).value == 0 and wb1_sheet= > 1.cell(row=cell + 2, column=2).value == 0 and wb1_sheet1.cell(row= > =cell + 2, column=3).value == 0: > open += 3 > start = wb1_sheet1.cell(row=cell + 3, column=2).coord= > inate > open_seconds += 3 > continue > # 2 second open > if wb1_sheet1.cell(row=cell + 1, column=2).value == 0 a= > nd wb1_sheet1 .cell(row=cell + 1, column=3).value == = > 0: > open += 3 > start = wb1_sheet1.cell(row=cell + 2, column=2).coord= > inate > open_seconds += 2 > if any but the last IF is true, then all IFs will be true...that's my probl= > em. It looks like all three of your if statements start out with this condition: if wb1_sheet1.cell(row=cell + 1, column=2).value == 0 and wb1_sheet1.cell(row=cell + 1, column=3).value == 0 So you could reorganize your code by putting an if statement at the top that only checks this condition. Then, indented underneath, you can check for the other conditions. And be sure to use "else" and "elif" when they are appropriate. -- John Gordon A is for Amy, who fell down the stairs gor...@panix.com B is for Basil, assaulted by bears -- Edward Gorey, "The Gashlycrumb Tinies" -- https://mail.python.org/mailman/listinfo/python-list
Re: If one IF is satisfied, skip the rest in the nest...
O...MG I cannot believe I just asked this question ha. I ended up realizing I need to use an elif after I took a break from it and re read everything...Brain fart, thanks for replies. Brice -- https://mail.python.org/mailman/listinfo/python-list
Re: If one IF is satisfied, skip the rest in the nest...
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 Each condition only gets evaluated once. -- Denis McMahon, denismfmcma...@gmail.com -- https://mail.python.org/mailman/listinfo/python-list
Re: If one IF is satisfied, skip the rest in the nest...
On 2015-10-21, Denis McMahonwrote: > 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) > Each condition only gets evaluated once. OK. -- Grant Edwards grant.b.edwardsYow! You were s'posed at to laugh! gmail.com -- https://mail.python.org/mailman/listinfo/python-list
Re: If one IF is satisfied, skip the rest in the nest...
On Wed, 21 Oct 2015 20:07:21 +, Grant Edwards wrote: > On 2015-10-21, Denis McMahonwrote: >> 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, denismfmcma...@gmail.com -- https://mail.python.org/mailman/listinfo/python-list
Re: If one IF is satisfied, skip the rest in the nest...
On Wed, Oct 21, 2015 at 11:31 AM,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. I think you're looking for the elif keyword. An elif branch will only be considered if the previous branches were false. if a: do_something() elif b: do_something_else() elif c: do_something_different() -- https://mail.python.org/mailman/listinfo/python-list