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
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
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
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 ;-)
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.
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
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
>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 # ;-)
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.
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).
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.
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.
Comment