loops

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

    loops

    how can I do width python a normal for loop width tree conditions like
    for example :

    for x=1;x<=100;x+x:
    print x


    thanks
  • Duncan Booth

    #2
    Re: loops

    Gandalf <goldnery@gmail .comwrote:
    how can I do width python a normal for loop width tree conditions like
    for example :
    >
    for x=1;x<=100;x+x:
    print x
    >
    What you wrote would appear to be an infinite loop so I'll assume you meant
    to assign something to x each time round the loop as well. The simple
    Python translation of what I think you meant would be:

    x = 1
    while x <= 100:
    print x
    x += x

    If you really insist on doing it with a for loop:

    def doubling(start, limit):
    x = start
    while x <= limit:
    yield x
    x += x

    ....

    for x in doubling(1, 100):
    print x

    Comment

    • Gandalf

      #3
      Re: loops

      On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
      wrote:
      Gandalf <goldn...@gmail .comwrote:
      how can I do width python a normal for loop width tree conditions like
      for example :
      >
      for x=1;x<=100;x+x:
          print x
      >
      What you wrote would appear to be an infinite loop so I'll assume you meant
      to assign something to x each time round the loop as well. The simple
      Python translation of what I think you meant would be:
      >
      x = 1
      while x <= 100:
         print x
         x += x
      >
      If you really insist on doing it with a for loop:
      >
      def doubling(start, limit):
          x = start
          while x <= limit:
              yield x
              x += x
      >
      ...
      >
      for x in doubling(1, 100):
          print x
      thanks

      Comment

      • Gandalf

        #4
        Re: loops

        On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
        wrote:
        Gandalf <goldn...@gmail .comwrote:
        how can I do width python a normal for loop width tree conditions like
        for example :
        >
        for x=1;x<=100;x+x:
            print x
        >
        What you wrote would appear to be an infinite loop so I'll assume you meant
        to assign something to x each time round the loop as well. The simple
        Python translation of what I think you meant would be:
        >
        x = 1
        while x <= 100:
           print x
           x += x
        >
        If you really insist on doing it with a for loop:
        >
        def doubling(start, limit):
            x = start
            while x <= limit:
                yield x
                x += x
        >
        ...
        >
        for x in doubling(1, 100):
            print x
        I was hopping to describe it with only one command. most of the
        languages I know use this.
        It seems weird to me their is no such thing in python. it's not that I
        can't fined a solution it's all about saving code

        Comment

        • robert

          #5
          Re: loops

          Gandalf wrote:
          On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
          wrote:
          >Gandalf <goldn...@gmail .comwrote:
          >>how can I do width python a normal for loop width tree conditions like
          >>for example :
          >>for x=1;x<=100;x+x:
          >> print x
          >What you wrote would appear to be an infinite loop so I'll assume you meant
          >to assign something to x each time round the loop as well. The simple
          >Python translation of what I think you meant would be:
          >>
          >x = 1
          >while x <= 100:
          > print x
          > x += x
          >>
          ...
          >
          I was hopping to describe it with only one command. most of the
          languages I know use this.
          It seems weird to me their is no such thing in python. it's not that I
          can't fined a solution it's all about saving code
          You'd not save code, but only lines (and clearness). You'd also
          need more (non-space) characters

          Python saves confusion and arbitrariness =you'll usually code
          faster, because you don't think so much about voluptuous
          multimulti..pos sibilites, not worth the play: one-ness of mind

          If insistent, you could sometimes save lines like this ;-)

          x=1
          while x<=100: print x; x+=x


          Robert

          Comment

          • Aaron Brady

            #6
            Re: loops

            Gandalf wrote:
            On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
            wrote:
            >Gandalf <goldn...@gmail .comwrote:
            how can I do width python a normal for loop width tree conditions like
            for example :
            >>
            for x=1;x<=100;x+x:
                print x
            >>
            >What you wrote would appear to be an infinite loop so I'll assume you meant
            >to assign something to x each time round the loop as well. The simple
            >Python translation of what I think you meant would be:
            >>
            >x = 1
            >while x <= 100:
            >   print x
            >   x += x
            >>
            >If you really insist on doing it with a for loop:
            >>
            >def doubling(start, limit):
            >    x = start
            >    while x <= limit:
            >        yield x
            >        x += x
            >>
            >...
            >>
            >for x in doubling(1, 100):
            >    print x
            >
            I was hopping to describe it with only one command. most of the
            languages I know use this.
            It seems weird to me their is no such thing in python. it's not that I
            can't fined a solution it's all about saving code
            Do you anticipate reusing it? You could make something a little more
            extendable.

            for x in iexpression( 'x', 1, 100, 'x+x' ):
            print x

            or

            for x in iexpression( lambda x: x+x, 1, 100 ):
            print x

            I'm assuming you don't want or have a closed form, in this case x= 2**
            _x.

            Comment

            • Terry Reedy

              #7
              Re: loops

              Gandalf wrote:
              On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
              wrote:
              >Gandalf <goldn...@gmail .comwrote:
              >>how can I do width python a normal for loop width tree conditions like
              >>for example :
              >>for x=1;x<=100;x+x:
              >> print x
              >What you wrote would appear to be an infinite loop so I'll assume you meant
              >to assign something to x each time round the loop as well. The simple
              >Python translation of what I think you meant would be:
              >>
              >x = 1
              >while x <= 100:
              > print x
              > x += x
              >>
              >If you really insist on doing it with a for loop:
              >>
              >def doubling(start, limit):
              > x = start
              > while x <= limit:
              > yield x
              > x += x
              >>
              >...
              >>
              >for x in doubling(1, 100):
              > print x
              >
              I was hopping to describe it with only one command. most of the
              languages I know use this.
              It seems weird to me their is no such thing in python. it's not that I
              can't fined a solution it's all about saving code
              Python: 'makes common things easy and uncommon things possible'.

              The large majority of use cases for iteration are iterating though
              sequences, actual and virtual, including integers with a constant step
              size. Python make that trivial to do and clear to read. Your example is
              trivially written as

              for i in range(11):
              print 2**i

              Python provide while loops for more fine-grain control, and a protocol
              so *reuseable* iterators can plug into for loops. Duncan showed you
              both. If you *need* a doubling loop variable once, you probably need
              one more than once, and the cost of the doubling generator is amortized
              over all such uses. Any Python proprammer should definitely know how to
              write such a thing without hardly thinking. We can squeeze a line out
              of this particular example:

              def doubling(value, limit):
              while value <= limit:
              yield value
              value += value

              Terry Jan Reedy

              Comment

              • wbowers

                #8
                Re: loops

                On Oct 18, 11:31 am, Terry Reedy <tjre...@udel.e duwrote:
                Gandalf wrote:
                On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
                wrote:
                Gandalf <goldn...@gmail .comwrote:
                >how can I do width python a normal for loop width tree conditions like
                >for example :
                >for x=1;x<=100;x+x:
                >    print x
                What you wrote would appear to be an infinite loop so I'll assume you meant
                to assign something to x each time round the loop as well. The simple
                Python translation of what I think you meant would be:
                >
                x = 1
                while x <= 100:
                   print x
                   x += x
                >
                If you really insist on doing it with a for loop:
                >
                def doubling(start, limit):
                    x = start
                    while x <= limit:
                        yield x
                        x += x
                >
                ...
                >
                for x in doubling(1, 100):
                    print x
                >
                I was hopping to describe it with only one command. most of the
                languages I know use this.
                It seems weird to me their is no such thing in python. it's not that I
                can't fined a solution it's all about saving code
                >
                Python: 'makes common things easy and uncommon things possible'.
                >
                The large majority of use cases for iteration are iterating though
                sequences, actual and virtual, including integers with a constant step
                size.  Python make that trivial to do and clear to read. Your example is
                trivially written as
                >
                for i in range(11):
                   print 2**i
                >
                Python provide while loops for more fine-grain control, and a protocol
                so *reuseable* iterators can plug into for loops. Duncan showed you
                both.  If you *need* a doubling loop variable once, you probably need
                one more than once, and the cost of the doubling generator is amortized
                over all such uses.  Any Python proprammer should definitely know how to
                write such a thing without hardly thinking.  We can squeeze a line out
                of this particular example:
                >
                def doubling(value, limit):
                   while value <= limit:
                     yield value
                     value += value
                >
                Terry Jan Reedy
                I agree that using range() for simple iterations is the way to go.
                Here are some examples of python expressions you'd use in specific
                situations:

                # instead of for (i = 0; i < 100; i++)
                for i in range(100): pass

                # instead of for (i = 10; i < 100; i++)
                for i in range(10, 100): pass

                # instead of for (i = 1; i < 100; i += 2)
                for i in range(1, 100, 2): pass

                # instead of for (i = 99; i >= 0; i--)
                for i in range(100)[::-1]: pass

                There's always a way to do it, and it's almost always really simple :-D

                Comment

                • Duncan Booth

                  #9
                  Re: loops

                  wbowers <william.bowers @gmail.comwrote :
                  I agree that using range() for simple iterations is the way to go.
                  except that as Terry said, "The large majority of use cases for iteration
                  are iterating though sequences"

                  I very rarely use range() in iterations.
                  Here are some examples of python expressions you'd use in specific
                  situations:
                  >
                  ....
                  # instead of for (i = 99; i >= 0; i--)
                  for i in range(100)[::-1]: pass
                  or:
                  for i in xrange(99, -1, -1): pass


                  Comment

                  • robert

                    #10
                    Re: loops

                    Aaron Brady wrote:
                    Gandalf wrote:
                    >
                    >On Oct 18, 12:39 pm, Duncan Booth <duncan.bo...@i nvalid.invalid>
                    >wrote:
                    >>Gandalf <goldn...@gmail .comwrote:
                    >>>how can I do width python a normal for loop width tree conditions like
                    >>>for example :
                    >>>for x=1;x<=100;x+x:
                    >>> print x
                    >>What you wrote would appear to be an infinite loop so I'll assume you meant
                    >>to assign something to x each time round the loop as well. The simple
                    >>Python translation of what I think you meant would be:
                    >>>
                    >>x = 1
                    >>while x <= 100:
                    >> print x
                    >> x += x
                    >>>
                    >>If you really insist on doing it with a for loop:
                    >>>
                    >>def doubling(start, limit):
                    >> x = start
                    >> while x <= limit:
                    >> yield x
                    >> x += x
                    >>>
                    >>...
                    >>>
                    >>for x in doubling(1, 100):
                    >> print x
                    >I was hopping to describe it with only one command. most of the
                    >languages I know use this.
                    >It seems weird to me their is no such thing in python. it's not that I
                    >can't fined a solution it's all about saving code
                    >
                    Do you anticipate reusing it? You could make something a little more
                    extendable.
                    >
                    for x in iexpression( 'x', 1, 100, 'x+x' ):
                    print x
                    >
                    or
                    >
                    for x in iexpression( lambda x: x+x, 1, 100 ):
                    print x
                    >
                    I'm assuming you don't want or have a closed form, in this case x= 2**
                    _x.
                    >

                    #and to learn even more about this, import this:
                    import this # ;-)

                    Comment

                    • Steven D'Aprano

                      #11
                      Re: loops

                      On Sat, 18 Oct 2008 03:52:51 -0700, Gandalf wrote:
                      I was hopping to describe it with only one command. most of the
                      languages I know use this.
                      It seems weird to me their is no such thing in python. it's not that I
                      can't fined a solution it's all about saving code
                      It shouldn't be about saving code. There's no shortage of code so that we
                      have to conserve it. But there is a shortage of time and effort, so
                      making your code easy to read and easy to maintain is far more important.

                      for x in (2**i for i in xrange(10)):
                      print x

                      will also print 1, 2, 4, 8, ... up to 1000.



                      --
                      Steven

                      Comment

                      • James Mills

                        #12
                        Re: loops

                        On Sun, Oct 19, 2008 at 1:30 PM, Steven D'Aprano
                        <steve@remove-this-cybersource.com .auwrote:
                        for x in (2**i for i in xrange(10)):
                        print x
                        This is by far the most concise solution I've seen so far.
                        And it should never be about conserving code.
                        Also, Python IS NOT C (to be more specific: Python
                        is not a C-class language).

                        --JamesMills

                        --
                        --
                        -- "Problems are solved by method"

                        Comment

                        • John Machin

                          #13
                          Re: loops

                          On Oct 19, 2:30 pm, Steven D'Aprano <st...@REMOVE-THIS-
                          cybersource.com .auwrote:
                          [snip]
                          making your code easy to read and easy to maintain is far more important.
                          >
                          for x in (2**i for i in xrange(10)):
                              print x
                          >
                          will also print 1, 2, 4, 8, ... up to 1000.
                          I would say up to 512; perhaps your understanding of "up to" differs
                          from mine.

                          Easy to read? I'd suggest this:

                          for i in xrange(10):
                          print 2 ** i

                          Cheers,
                          John

                          Comment

                          • James Mills

                            #14
                            Re: loops

                            On Sun, Oct 19, 2008 at 1:44 PM, James Mills
                            <prologic@short circuit.net.auw rote:
                            On Sun, Oct 19, 2008 at 1:30 PM, Steven D'Aprano
                            <steve@remove-this-cybersource.com .auwrote:
                            >for x in (2**i for i in xrange(10)):
                            > print x
                            >
                            This is by far the most concise solution I've seen so far.
                            And it should never be about conserving code.
                            Also, Python IS NOT C (to be more specific: Python
                            is not a C-class language).
                            Also, if the OP is finding himself writing such manual
                            and mundane looking loops, he/she should reconsider
                            what it is he/she is doing. You would normally want
                            to iterate (vs. loop) over a sequence of items.

                            --JamesMills

                            --
                            --
                            -- "Problems are solved by method"

                            Comment

                            • Paul Rubin

                              #15
                              Re: loops

                              "James Mills" <prologic@short circuit.net.auw rites:
                              for x in (2**i for i in xrange(10)):
                              print x
                              This is by far the most concise solution I've seen so far.
                              print '\n'.join(str(2 **i) for i in xrange(10))

                              Comment

                              Working...