Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #37534 > unrolled thread

Decrease for loop by one

Started byMilter Skyler <matt17@gmail.com>
First post2013-01-23 20:39 -0800
Last post2013-01-23 21:10 -0800
Articles 4 — 2 participants

Back to article view | Back to comp.lang.python


Contents

  Decrease for loop by one Milter Skyler <matt17@gmail.com> - 2013-01-23 20:39 -0800
    Re: Decrease for loop by one Chris Angelico <rosuav@gmail.com> - 2013-01-24 15:59 +1100
      Re: Decrease for loop by one Milter Skyler <matt17@gmail.com> - 2013-01-23 21:10 -0800
      Re: Decrease for loop by one Milter Skyler <matt17@gmail.com> - 2013-01-23 21:10 -0800

#37534 — Decrease for loop by one

FromMilter Skyler <matt17@gmail.com>
Date2013-01-23 20:39 -0800
SubjectDecrease for loop by one
Message-ID<7694aab5-7926-482e-975a-7685c7b94351@googlegroups.com>
I'm using this code with Sikuli so thats why I have click()
    for x in range(0,10):
        decimal_value = random.randint(1,12)
        if myList.count(decimal_value) < 1:
            egg = 'A%d.png' % (decimal_value)
            egg = wait(egg)
            click(egg.getCenter().offset(random.randint(-10,10), random.randint(-10,10)))
            myList.append(decimal_value)

        else:
            print x
            x-1 = x
            print x

I made an array to check if the random integer already exists and then I send it to the else statement at which point I want to decrease x by 1 so that it doesn't count as one of the loops. In other languages this works but it just comes up with the output:

3
2

9
8

10
9

[toc] | [next] | [standalone]


#37536

FromChris Angelico <rosuav@gmail.com>
Date2013-01-24 15:59 +1100
Message-ID<mailman.941.1359003563.2939.python-list@python.org>
In reply to#37534
On Thu, Jan 24, 2013 at 3:39 PM, Milter Skyler <matt17@gmail.com> wrote:
> I made an array to check if the random integer already exists and then I send it to the else statement at which point I want to decrease x by 1 so that it doesn't count as one of the loops. In other languages this works...

A Python 'for' loop doesn't behave like that; you can't just edit the
loop counter. But take a step back: what are you actually trying to
accomplish? As I see it, you're trying to pick ten unique random
values in the range 1-12 inclusive. Try this:

random.sample(range(1,13),10) # note that range() stops *before* its second arg

That'll give you a list of those integers, and it's a lot safer and
more reliable than the try-fail-retry method. Your loop can become:

    for decimal_value in random.sample(range(1,13),10):
            egg = 'A%d.png' % (decimal_value)
            egg = wait(egg)
            click(egg.getCenter().offset(random.randint(-10,10),
random.randint(-10,10)))

By the way, this line simply won't work:

x-1 = x

I think you mean:

x = x-1

But I strongly suggest you copy and paste directly rather than retype;
it's less error-prone.

Hope that helps!

ChrisA

[toc] | [prev] | [next] | [standalone]


#37539

FromMilter Skyler <matt17@gmail.com>
Date2013-01-23 21:10 -0800
Message-ID<24b5f5ee-f88f-45a1-9c12-f3381209b647@googlegroups.com>
In reply to#37536
On Wednesday, January 23, 2013 9:59:13 PM UTC-7, Chris Angelico wrote:
> On Thu, Jan 24, 2013 at 3:39 PM, Milter Skyler <> wrote:
> 
> > I made an array to check if the random integer already exists and then I send it to the else statement at which point I want to decrease x by 1 so that it doesn't count as one of the loops. In other languages this works...
> 
> 
> 
> A Python 'for' loop doesn't behave like that; you can't just edit the
> 
> loop counter. But take a step back: what are you actually trying to
> 
> accomplish? As I see it, you're trying to pick ten unique random
> 
> values in the range 1-12 inclusive. Try this:
> 
> 
> 
> random.sample(range(1,13),10) # note that range() stops *before* its second arg
> 
> 
> 
> That'll give you a list of those integers, and it's a lot safer and
> 
> more reliable than the try-fail-retry method. Your loop can become:
> 
> 
> 
>     for decimal_value in random.sample(range(1,13),10):
> 
>             egg = 'A%d.png' % (decimal_value)
> 
>             egg = wait(egg)
> 
>             click(egg.getCenter().offset(random.randint(-10,10),
> 
> random.randint(-10,10)))
> 
> 
> 
> By the way, this line simply won't work:
> 
> 
> 
> x-1 = x
> 
> 
> 
> I think you mean:
> 
> 
> 
> x = x-1
> 
> 
> 
> But I strongly suggest you copy and paste directly rather than retype;
> 
> it's less error-prone.
> 
> 
> 
> Hope that helps!
> 
> 
> 
> ChrisA

Thanks! That worked perfect, I was trying to figure that out but instead I just went down the hard route I went down.

[toc] | [prev] | [next] | [standalone]


#37540

FromMilter Skyler <matt17@gmail.com>
Date2013-01-23 21:10 -0800
Message-ID<mailman.943.1359004246.2939.python-list@python.org>
In reply to#37536
On Wednesday, January 23, 2013 9:59:13 PM UTC-7, Chris Angelico wrote:
> On Thu, Jan 24, 2013 at 3:39 PM, Milter Skyler <> wrote:
> 
> > I made an array to check if the random integer already exists and then I send it to the else statement at which point I want to decrease x by 1 so that it doesn't count as one of the loops. In other languages this works...
> 
> 
> 
> A Python 'for' loop doesn't behave like that; you can't just edit the
> 
> loop counter. But take a step back: what are you actually trying to
> 
> accomplish? As I see it, you're trying to pick ten unique random
> 
> values in the range 1-12 inclusive. Try this:
> 
> 
> 
> random.sample(range(1,13),10) # note that range() stops *before* its second arg
> 
> 
> 
> That'll give you a list of those integers, and it's a lot safer and
> 
> more reliable than the try-fail-retry method. Your loop can become:
> 
> 
> 
>     for decimal_value in random.sample(range(1,13),10):
> 
>             egg = 'A%d.png' % (decimal_value)
> 
>             egg = wait(egg)
> 
>             click(egg.getCenter().offset(random.randint(-10,10),
> 
> random.randint(-10,10)))
> 
> 
> 
> By the way, this line simply won't work:
> 
> 
> 
> x-1 = x
> 
> 
> 
> I think you mean:
> 
> 
> 
> x = x-1
> 
> 
> 
> But I strongly suggest you copy and paste directly rather than retype;
> 
> it's less error-prone.
> 
> 
> 
> Hope that helps!
> 
> 
> 
> ChrisA

Thanks! That worked perfect, I was trying to figure that out but instead I just went down the hard route I went down.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web