Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Decrease for loop by one (http://www.velocityreviews.com/forums/t956865-decrease-for-loop-by-one.html)

Milter Skyler 01-24-2013 04:39 AM

Decrease for loop by one
 
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

Chris Angelico 01-24-2013 04:59 AM

Re: Decrease for loop by one
 
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

Milter Skyler 01-24-2013 05:10 AM

Re: Decrease for loop by one
 
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.

Milter Skyler 01-24-2013 05:10 AM

Re: Decrease for loop by one
 
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.


All times are GMT. The time now is 02:49 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.