Python IF THEN chain equivalence

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • jzakiya

    Python IF THEN chain equivalence

    I'm translating a program in Python that has this IF Then chain


    IF x1 < limit: --- do a ---
    IF x2 < limit: --- do b ---
    IF x3 < limit: --- do c ---
    .-----
    ------
    IF x10 < limt: --- do j ---
    THEN
    THEN
    -----
    THEN
    THEN
    THEN

    In other words, as long as 'xi' is less than 'limit' keep going
    down the chain, and when 'xi' isn't less than 'limit' jump to end of
    chain a continue.

    Is this the equivalence in Python?

    IF x1 < limit:
    --- do a ---
    elif x2 < limit:
    --- do b ---
    ----
    ----
    elif x10 < limit:
    --- do j ---


  • Diez B. Roggisch

    #2
    Re: Python IF THEN chain equivalence

    jzakiya schrieb:
    I'm translating a program in Python that has this IF Then chain
    >
    >
    IF x1 < limit: --- do a ---
    IF x2 < limit: --- do b ---
    IF x3 < limit: --- do c ---
    .-----
    ------
    IF x10 < limt: --- do j ---
    THEN
    THEN
    -----
    THEN
    THEN
    THEN
    >
    In other words, as long as 'xi' is less than 'limit' keep going
    down the chain, and when 'xi' isn't less than 'limit' jump to end of
    chain a continue.
    >
    Is this the equivalence in Python?
    >
    IF x1 < limit:
    --- do a ---
    elif x2 < limit:
    --- do b ---
    ----
    ----
    elif x10 < limit:
    --- do j ---
    Of course not. After "do a", it would stop.

    You need to use

    if x1 < limit:
    do a
    if x2 < limit:
    do b
    ...


    Alternatively, and depending on the nature of "do X", you can do

    for x, todo in ((x1, do_a), (x2, do_b), ...):
    if x < limit:
    todo()
    else:
    break

    This implies though that the "dos" are pure functions without (variable)
    arguments.

    Diez

    Comment

    • Alan Baljeu

      #3
      Re: Python IF THEN chain equivalence

      I think you should rethink your post. The first case you posted makes no sense in any language I know. Also, a whole lot of nested IF's is a bad idea in any language. In Python, you will end up with code indented 40+ characters if you keep going.



      ----- Original Message ----
      From: jzakiya <jzakiya@mail.c om>
      To: python-list@python.org
      Sent: Thursday, November 13, 2008 5:06:53 PM
      Subject: Python IF THEN chain equivalence

      I'm translating a program in Python that has this IF Then chain


      IF x1 < limit: --- do a ---
      IF x2 < limit: --- do b ---
      IF x3 < limit: --- do c ---
      .-----
      ------
      IF x10 < limt: --- do j ---
      THEN
      THEN
      -----
      THEN
      THEN
      THEN

      In other words, as long as 'xi' is less than 'limit' keep going
      down the chain, and when 'xi' isn't less than 'limit' jump to end of
      chain a continue.

      Is this the equivalence in Python?

      IF x1 < limit:
      --- do a ---
      elif x2 < limit:
      --- do b ---
      ----
      ----
      elif x10 < limit:
      --- do j ---


      --




      _______________ _______________ _______________ _______________ ______
      Ask a question on any topic and get answers from real people. Go to Yahoo! Answers and share what you know at http://ca.answers.yahoo.com

      Comment

      • jzakiya

        #4
        Re: Python IF THEN chain equivalence

        On Nov 13, 5:21 pm, Alan Baljeu <alanbal...@yah oo.comwrote:
        I think you should rethink your post. The first case you posted makes no sense in any language I know.  Also, a whole lot of nested IF's is a bad idea in any language.  In Python, you will end up with code indented 40+ characters if you keep going.
        >
        ----- Original Message ----
        From: jzakiya <jzak...@mail.c om>
        To: python-l...@python.org
        Sent: Thursday, November 13, 2008 5:06:53 PM
        Subject: Python IF THEN chain equivalence
        >
        I'm translating a program in Python that has this IF Then chain
        >
        IF  x1 < limit:   --- do a ---
            IF  x2 < limit:  --- do b ---
                IF x3 < limit:  --- do c ---
                               .-----
                                ------
                            IF  x10 < limt: --- do j ---
                            THEN
                         THEN
                      -----
                  THEN
             THEN
        THEN
        >
        In other words, as long as    'xi' is less than 'limit' keep going
        down the chain, and when 'xi' isn't less than 'limit' jump to end of
        chain a continue.
        >
        Is this the equivalence in Python?
        >
        IF  x1 < limit:
                --- do a  ---
        elif x2 < limit:
                --- do b ---
        ----
        ----
        elif x10 < limit:
               --- do j ---
        >
        --http://mail.python.org/mailman/listinfo/python-list
        >
              _______________ _______________ _______________ _______________ ______
        Ask a question on any topic and get answers from real people. Go to Yahoo! Answers and share what you know athttp://ca.answers.yaho o.com
        >
        >
        In the code the 'xi's and 'limit' are variables and the --- do letters
        ---
        phrases are simply writes to any array: an_array[xi]=0

        Actually, the code makes perfectly good sense, and is a necessity of
        the algorithm I'm implementing, and works perfectly good in Forth, and
        can be
        written quite nicely within a normal page width.

        I was just hoping I could perform the equivalent chain in Python
        without
        having to grossly indent the source code past the normal width of a
        printed page.
        But if that's the only way to do it in Python, then so be it.

        Comment

        • Grant Edwards

          #5
          Re: Python IF THEN chain equivalence

          On 2008-11-13, jzakiya <jzakiya@mail.c omwrote:
          I'm translating a program in Python that has this IF Then chain
          >
          >
          IF x1 < limit: --- do a ---
          IF x2 < limit: --- do b ---
          IF x3 < limit: --- do c ---
          .-----
          ------
          IF x10 < limt: --- do j ---
          THEN
          THEN
          -----
          THEN
          THEN
          THEN
          The placement of the THEN statements makes absolutely no sense
          in any language I've ever seen.
          In other words, as long as 'xi' is less than 'limit' keep going
          down the chain, and when 'xi' isn't less than 'limit' jump to end of
          chain a continue.
          >
          Is this the equivalence in Python?
          >
          IF x1 < limit:
          --- do a ---
          elif x2 < limit:
          --- do b ---
          ----
          ----
          elif x10 < limit:
          --- do j ---
          No. That's not the same at all.


          Here's one solution:

          while True:
          if x1 limit: break
          do a
          if x2 limit: break
          do b
          if x3 limit: break
          do c
          ...
          if x10 limit: break
          do j
          break

          --
          Grant Edwards grante Yow! Eisenhower!! Your
          at mimeograph machine upsets
          visi.com my stomach!!

          Comment

          • Grant Edwards

            #6
            Re: Python IF THEN chain equivalence

            On 2008-11-13, Grant Edwards <invalid@invali dwrote:
            On 2008-11-13, jzakiya <jzakiya@mail.c omwrote:
            >I'm translating a program in Python that has this IF Then chain
            >>
            >>
            >IF x1 < limit: --- do a ---
            > IF x2 < limit: --- do b ---
            > IF x3 < limit: --- do c ---
            > .-----
            > ------
            > IF x10 < limt: --- do j ---
            > THEN
            > THEN
            > -----
            > THEN
            > THEN
            >THEN
            >
            The placement of the THEN statements makes absolutely no sense
            in any language I've ever seen.
            >
            >In other words, as long as 'xi' is less than 'limit' keep going
            >down the chain, and when 'xi' isn't less than 'limit' jump to end of
            >chain a continue.
            >>
            >Is this the equivalence in Python?
            >>
            > IF x1 < limit:
            > --- do a ---
            > elif x2 < limit:
            > --- do b ---
            > ----
            > ----
            > elif x10 < limit:
            > --- do j ---
            >
            No. That's not the same at all.
            >
            >
            Here's one solution:
            >
            while True:
            if x1 limit: break
            do a
            if x2 limit: break
            do b
            if x3 limit: break
            do c
            ...
            if x10 limit: break
            do j
            break
            Oops. I botched the case where xN == limit. Each of the tests
            should be xN >= limit.

            --
            Grant Edwards grante Yow! ... I see TOILET
            at SEATS ...
            visi.com

            Comment

            • M.-A. Lemburg

              #7
              Re: Python IF THEN chain equivalence

              On 2008-11-13 23:31, jzakiya wrote:
              On Nov 13, 5:21 pm, Alan Baljeu <alanbal...@yah oo.comwrote:
              >I think you should rethink your post. The first case you posted makes no sense in any language I know. Also, a whole lot of nested IF's is a bad idea in any language. In Python, you will end up with code indented 40+ characters if you keep going.
              >>
              >----- Original Message ----
              >From: jzakiya <jzak...@mail.c om>
              >To: python-l...@python.org
              >Sent: Thursday, November 13, 2008 5:06:53 PM
              >Subject: Python IF THEN chain equivalence
              >>
              >I'm translating a program in Python that has this IF Then chain
              >>
              >IF x1 < limit: --- do a ---
              > IF x2 < limit: --- do b ---
              > IF x3 < limit: --- do c ---
              > .-----
              > ------
              > IF x10 < limt: --- do j ---
              > THEN
              > THEN
              > -----
              > THEN
              > THEN
              >THEN
              >>
              >In other words, as long as 'xi' is less than 'limit' keep going
              >down the chain, and when 'xi' isn't less than 'limit' jump to end of
              >chain a continue.
              >>
              >Is this the equivalence in Python?
              >>
              >IF x1 < limit:
              > --- do a ---
              >elif x2 < limit:
              > --- do b ---
              >----
              >----
              >elif x10 < limit:
              > --- do j ---
              >>
              >--http://mail.python.org/mailman/listinfo/python-list
              >>
              > _______________ _______________ _______________ _______________ ______
              >Ask a question on any topic and get answers from real people. Go to Yahoo! Answers and share what you know athttp://ca.answers.yaho o.com
              >>
              >>
              >
              In the code the 'xi's and 'limit' are variables and the --- do letters
              ---
              phrases are simply writes to any array: an_array[xi]=0
              >
              Actually, the code makes perfectly good sense, and is a necessity of
              the algorithm I'm implementing, and works perfectly good in Forth, and
              can be
              written quite nicely within a normal page width.
              >
              I was just hoping I could perform the equivalent chain in Python
              without
              having to grossly indent the source code past the normal width of a
              printed page.
              But if that's the only way to do it in Python, then so be it.
              You should probably consider using a function and then
              convert the conditions to define return points:

              def do_something(.. .args...):

              if x1 >= limit:
              return
              ...do a...
              if x2 >= limit:
              return
              ...do b...
              etc.

              That is provided I understand the flow of control in your
              example... it's kind of strange to have THEN mark the *end*
              of the then-branch in an if-then-else construct.

              --
              Marc-Andre Lemburg
              eGenix.com

              Professional Python Services directly from the Source (#1, Nov 13 2008)
              >>Python/Zope Consulting and Support ... http://www.egenix.com/
              >>mxODBC.Zope.D atabase.Adapter ... http://zope.egenix.com/
              >>mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
              _______________ _______________ _______________ _______________ ____________
              2008-11-12: Released mxODBC Connect 0.9.3 http://python.egenix.com/

              :::: Try mxODBC.Zope.DA for Windows,Linux,S olaris,MacOSX for free ! ::::


              eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
              D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
              Registered at Amtsgericht Duesseldorf: HRB 46611

              Comment

              • jzakiya

                #8
                Re: Python IF THEN chain equivalence

                On Nov 13, 5:48 pm, "M.-A. Lemburg" <m...@egenix.co mwrote:
                On 2008-11-13 23:31, jzakiya wrote:
                >
                >
                >
                On Nov 13, 5:21 pm, Alan Baljeu <alanbal...@yah oo.comwrote:
                I think you should rethink your post. The first case you posted makes no sense in any language I know.  Also, a whole lot of nested IF's is a bad idea in any language.  In Python, you will end up with code indented 40+ characters if you keep going.
                >
                ----- Original Message ----
                From: jzakiya <jzak...@mail.c om>
                To: python-l...@python.org
                Sent: Thursday, November 13, 2008 5:06:53 PM
                Subject: Python IF THEN chain equivalence
                >
                I'm translating a program in Python that has this IF Then chain
                >
                IF  x1 < limit:   --- do a ---
                    IF  x2 < limit:  --- do b ---
                        IF x3 < limit:  --- do c ---
                                       .-----
                                        ------
                                    IF  x10 < limt: --- do j ---
                                    THEN
                                 THEN
                              -----
                          THEN
                     THEN
                THEN
                >
                In other words, as long as    'xi' is less than 'limit' keep going
                down the chain, and when 'xi' isn't less than 'limit' jump to end of
                chain a continue.
                >
                Is this the equivalence in Python?
                >
                IF  x1 < limit:
                        --- do a  ---
                elif x2 < limit:
                        --- do b ---
                ----
                ----
                elif x10 < limit:
                       --- do j ---
                >
                --http://mail.python.org/mailman/listinfo/python-list
                >
                      _______________ _______________ _______________ _______________ ______
                Ask a question on any topic and get answers from real people. Go to Yahoo! Answers and share what you know athttp://ca.answers.yaho o.com
                >
                In the code the 'xi's and 'limit' are variables and the --- do letters
                ---
                phrases are simply writes to any array:   an_array[xi]=0
                >
                Actually, the code makes perfectly good sense, and is a necessity of
                the algorithm I'm implementing, and works perfectly good in Forth, and
                can be
                written quite nicely within a normal page width.
                >
                I was just hoping I could perform the equivalent chain in Python
                without
                having to grossly indent the source code past the normal width of a
                printed page.
                But if that's the only way to do it in Python, then so be it.
                >
                You should probably consider using a function and then
                convert the conditions to define return points:
                >
                def do_something(.. .args...):
                >
                    if x1 >= limit:
                        return
                    ...do a...
                    if x2 >= limit:
                        return
                    ...do b...
                    etc.
                >
                That is provided I understand the flow of control in your
                example... it's kind of strange to have THEN mark the *end*
                of the then-branch in an if-then-else construct.
                >
                --
                Marc-Andre Lemburg
                eGenix.com
                >
                Professional Python Services directly from the Source  (#1, Nov 13 2008)>>Python/Zope Consulting and Support ...        http://www.egenix.com/
                >mxODBC.Zope.Da tabase.Adapter ...            http://zope.egenix.com/
                >mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
                >
                _______________ _______________ _______________ _______________ ____________
                2008-11-12: Released mxODBC Connect 0.9.3      http://python.egenix..com/
                >
                :::: Try mxODBC.Zope.DA for Windows,Linux,S olaris,MacOSX for free ! ::::
                >
                   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
                    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
                           Registered at Amtsgericht Duesseldorf: HRB 46611
                It's interesting to see people think it's strange to have code that
                has multiple nested levels of IF THEN. Apparently you haven't seen
                any Forth, assembly, et al code. All you're doing is having the branch
                point for each conditional be the end of the chain, otherwise it falls
                through to the code after the conditional. This is done all the time
                in languages that let you actually manipulate the hardware.

                Just as a suggestion :-) a little humility would go a long way toward
                being open minded and receptive to different paradigms. I've written
                this program I'm doing now in Python in 3 other languages (including
                Python, which I'm trying to make more efficient) and I seek to be
                flexible in my software linguistic capabilities.

                I asked a very narrow question about a very specific language
                mechanism, and I know exactly what and why I'm doing what I'm doing.

                I'll try some of the suggestions and see if they make the routine
                faster in Python.

                Comment

                • M.-A. Lemburg

                  #9
                  Re: Python IF THEN chain equivalence

                  On 2008-11-14 00:19, jzakiya wrote:
                  On Nov 13, 5:48 pm, "M.-A. Lemburg" <m...@egenix.co mwrote:
                  >>>From: jzakiya <jzak...@mail.c om>
                  >>>To: python-l...@python.org
                  >>>Sent: Thursday, November 13, 2008 5:06:53 PM
                  >>>Subject: Python IF THEN chain equivalence
                  >>>I'm translating a program in Python that has this IF Then chain
                  >>>IF x1 < limit: --- do a ---
                  >>> IF x2 < limit: --- do b ---
                  >>> IF x3 < limit: --- do c ---
                  >>> .-----
                  >>> ------
                  >>> IF x10 < limt: --- do j ---
                  >>> THEN
                  >>> THEN
                  >>> -----
                  >>> THEN
                  >>> THEN
                  >>>THEN
                  >You should probably consider using a function and then
                  >convert the conditions to define return points:
                  >>
                  >def do_something(.. .args...):
                  >>
                  > if x1 >= limit:
                  > return
                  > ...do a...
                  > if x2 >= limit:
                  > return
                  > ...do b...
                  > etc.
                  >>
                  >That is provided I understand the flow of control in your
                  >example... it's kind of strange to have THEN mark the *end*
                  >of the then-branch in an if-then-else construct.
                  >
                  It's interesting to see people think it's strange to have code that
                  has multiple nested levels of IF THEN.
                  Not at all, that's fairly common in a lot of languages. It's not
                  common to mark the end of the then-part using the THEN keyword,
                  though. You'd normally expect the body of the then-part after the
                  keyword.
                  Apparently you haven't seen
                  any Forth, assembly, et al code. All you're doing is having the branch
                  point for each conditional be the end of the chain, otherwise it falls
                  through to the code after the conditional. This is done all the time
                  in languages that let you actually manipulate the hardware.
                  >
                  Just as a suggestion :-) a little humility would go a long way toward
                  being open minded and receptive to different paradigms.
                  Without giving any hint as to what the quoted snippet
                  of code is written in, how do you expect people to make
                  any sense of it ? Especially when using an RPN stack oriented
                  language in a Python forum.

                  There's a reason why we hide Python byte code running on the
                  VM stack machine from Python users ;-)

                  --
                  Marc-Andre Lemburg
                  eGenix.com

                  Professional Python Services directly from the Source (#1, Nov 14 2008)
                  >>Python/Zope Consulting and Support ... http://www.egenix.com/
                  >>mxODBC.Zope.D atabase.Adapter ... http://zope.egenix.com/
                  >>mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
                  _______________ _______________ _______________ _______________ ____________
                  2008-11-12: Released mxODBC Connect 0.9.3 http://python.egenix.com/

                  :::: Try mxODBC.Zope.DA for Windows,Linux,S olaris,MacOSX for free ! ::::


                  eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
                  D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
                  Registered at Amtsgericht Duesseldorf: HRB 46611

                  Comment

                  • bearophileHUGS@lycos.com

                    #10
                    Re: Python IF THEN chain equivalence

                    jzakiya:
                    I asked a very narrow question about a very specific language
                    mechanism, and I know exactly what and why I'm doing what I'm doing.
                    You are of course free to use Python as you want. And probably some of
                    the answers weren't fully polite.
                    But it's interesting to see why they have given such answers. While
                    your code can be fit for Forth or assembly, it may be unfit, in its
                    current form, for the usual practices of Python programming (or C#/
                    Java programming, etc). In high-level languages large trees of very
                    nested ifs are seen as error-prone, not much readable, brittle... So
                    some alternative solutions are often used (even if they may be a
                    little slower).
                    If you need speed you may use Psyco too.

                    Bye,
                    bearophile

                    Comment

                    • Mensanator

                      #11
                      Re: Python IF THEN chain equivalence

                      On Nov 13, 4:39 pm, Grant Edwards <invalid@invali dwrote:
                      On 2008-11-13, jzakiya <jzak...@mail.c omwrote:
                      >
                      I'm translating a program in Python that has this IF Then chain
                      >
                      IF  x1 < limit:   --- do a ---
                          IF  x2 < limit:  --- do b ---
                              IF x3 < limit:  --- do c ---
                                             .-----
                                              ------
                                          IF  x10 < limt: --- do j ---
                                          THEN
                                       THEN
                                    -----
                                THEN
                           THEN
                      THEN
                      >
                      The placement of the THEN statements makes absolutely no sense
                      in any language I've ever seen.
                      It looks like Visual Basic.

                      IF a THEN
                      do_a
                      IF b THEN
                      do_b
                      IF c THEN
                      do_c
                      END IF
                      END IF
                      END IF

                      Words different, but same structure.
                      >
                      In other words, as long as    'xi' is less than 'limit' keep going
                      down the chain, and when 'xi' isn't less than 'limit' jump to end of
                      chain a continue.
                      >
                      Is this the equivalence in Python?
                      >
                       IF  x1 < limit:
                              --- do a  ---
                       elif x2 < limit:
                              --- do b ---
                       ----
                       ----
                       elif x10 < limit:
                             --- do j ---
                      >
                      No.  That's not the same at all.
                      >
                      Here's one solution:
                      >
                      while True:
                        if x1 limit: break
                        do a
                        if x2 limit: break
                        do b
                        if x3 limit: break
                        do c
                        ...
                        if x10 limit: break
                        do j
                        break  
                      >
                      --
                      Grant Edwards                   grante             Yow! Eisenhower!!  Your
                                                        at               mimeograph machine upsets
                                                     visi.com            my stomach!!

                      Comment

                      • Ethan Furman

                        #12
                        Re: Python IF THEN chain equivalence

                        jzakiya wrote:
                        I'm translating a program in Python that has this IF Then chain
                        >
                        >
                        IF x1 < limit: --- do a ---
                        IF x2 < limit: --- do b ---
                        IF x3 < limit: --- do c ---
                        .-----
                        ------
                        IF x10 < limt: --- do j ---
                        THEN
                        THEN
                        -----
                        THEN
                        THEN
                        THEN
                        >
                        In other words, as long as 'xi' is less than 'limit' keep going
                        down the chain, and when 'xi' isn't less than 'limit' jump to end of
                        chain a continue.
                        if x1 < limit:
                        do a
                        if x2 < limit:
                        do b
                        if x3 < limit:
                        do c

                        Comment

                        • Grant Edwards

                          #13
                          Re: Python IF THEN chain equivalence

                          On 2008-11-14, Ethan Furman <ethan@stonelea f.uswrote:
                          jzakiya wrote:
                          >I'm translating a program in Python that has this IF Then chain
                          >>
                          >>
                          >IF x1 < limit: --- do a ---
                          > IF x2 < limit: --- do b ---
                          > IF x3 < limit: --- do c ---
                          > .-----
                          > ------
                          > IF x10 < limt: --- do j ---
                          > THEN
                          > THEN
                          > -----
                          > THEN
                          > THEN
                          >THEN
                          >>
                          >In other words, as long as 'xi' is less than 'limit' keep going
                          >down the chain, and when 'xi' isn't less than 'limit' jump to end of
                          >chain a continue.
                          >
                          if x1 < limit:
                          do a
                          if x2 < limit:
                          do b
                          if x3 < limit:
                          do c
                          .
                          .
                          .
                          etc
                          That doesn't do what the OP specified. If any of the
                          conditions fail, it should "jump" to the end and not execute
                          _any_ further "do" statements regardless of the values of
                          subsequent conditions.
                          On the plus side, it's easy to read and understand -- on the
                          minus side, it doesn't jump to the end once the tests start
                          failing.
                          If all you want is easy to read and understand, then this is
                          event simpler:


                          sys.exit(0)

                          --
                          Grant

                          Comment

                          • Ethan Furman

                            #14
                            Re: Python IF THEN chain equivalence

                            Grant Edwards wrote:
                            On 2008-11-14, Ethan Furman <ethan@stonelea f.uswrote:
                            >jzakiya wrote:
                            >>I'm translating a program in Python that has this IF Then chain
                            >>>
                            >>>
                            >>IF x1 < limit: --- do a ---
                            >> IF x2 < limit: --- do b ---
                            >> IF x3 < limit: --- do c ---
                            >> .-----
                            >> ------
                            >> IF x10 < limt: --- do j ---
                            >> THEN
                            >> THEN
                            >> -----
                            >> THEN
                            >> THEN
                            >>THEN
                            >>>
                            >>In other words, as long as 'xi' is less than 'limit' keep going
                            >>down the chain, and when 'xi' isn't less than 'limit' jump to end of
                            >>chain a continue.
                            >if x1 < limit:
                            > do a
                            >if x2 < limit:
                            > do b
                            >if x3 < limit:
                            > do c
                            > .
                            > .
                            > .
                            > etc
                            >
                            That doesn't do what the OP specified. If any of the
                            conditions fail, it should "jump" to the end and not execute
                            _any_ further "do" statements regardless of the values of
                            subsequent conditions.
                            Ack -- I was aware of the lack of jump, but missed that x7 might be less
                            than limit even if x6 is greater -- thanks.
                            >On the plus side, it's easy to read and understand -- on the
                            >minus side, it doesn't jump to the end once the tests start
                            >failing.
                            >
                            If all you want is easy to read and understand, then this is
                            event simpler:
                            >
                            >
                            sys.exit(0)
                            >
                            <sheepish grin>
                            ~ethan~

                            Comment

                            • Steven D'Aprano

                              #15
                              Re: Python IF THEN chain equivalence

                              On Fri, 14 Nov 2008 01:24:32 +0100, M.-A. Lemburg wrote:
                              >Apparently you haven't seen
                              >any Forth, assembly, et al code. All you're doing is having the branch
                              >point for each conditional be the end of the chain, otherwise it falls
                              >through to the code after the conditional. This is done all the time
                              >in languages that let you actually manipulate the hardware.
                              >>
                              >Just as a suggestion a little humility would go a long way toward
                              >being open minded and receptive to different paradigms.
                              >
                              Without giving any hint as to what the quoted snippet of code is written
                              in, how do you expect people to make any sense of it ? Especially when
                              using an RPN stack oriented language in a Python forum.
                              >
                              There's a reason why we hide Python byte code running on the VM stack
                              machine from Python users ;-)
                              It's not like Forth is precisely an obscure little language. For a time,
                              it was possibly more popular than C. Or predated C? Whatever. I know I
                              learned about Forth long before I had even heard of C.

                              Other RPN languages include Postscript, not exactly unheard of either.
                              Open Firmware is Forth-like, and as you point out yourself, Python byte
                              code also is a stack-based language.

                              In conclusion, I'm not sure which is more disappointing: that the OP
                              couldn't be bothered to mention he was using a Forth-like syntax, or that
                              so many people failed to recognize it.

                              Anyway, for what it's worth, here's my translation into Python.

                              if x1 < limit:
                              a()
                              if x2 < limit:
                              b()
                              if x3 < limit:
                              c()
                              # blah blah blah...
                              if x10 < limt:
                              j()


                              Not very nice code. I think a better way is something like this:

                              keys = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10]
                              functions = [a, b, c, d, e, f, g, h, i, j]

                              for key, function in zip(keys, functions):
                              if key < limit:
                              function()
                              else:
                              break



                              --
                              Steven

                              Comment

                              Working...