Decrease for loop by one

M

Milter Skyler

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
 
C

Chris Angelico

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
 
M

Milter Skyler

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.
 
M

Milter Skyler

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top