4

Here's my python 3 code. I would like to randomly select one of the cell variables (c1 through c9) and change its value to the be the same as the cpuletter variable.

import random

#Cell variables
c1 = "1"
c2 = "2"
c3 = "3"
c4 = "4"
c5 = "5"
c6 = "6"
c7 = "7"
c8 = "8"
c9 = "9"
cells = [c1, c2, c3, c4, c5, c6, c7, c8, c9]

cpuletter = "X"

random.choice(cells) = cpuletter

I'm getting a "Can't assign to function call" error on the "random.choice(cells)." I assume I'm just using it incorrectly? I know you can use the random choice for changing a variable like below:

import random
options = ["option1", "option2"]
choice = random.choice(options)
montainz09
  • 325
  • 1
  • 3
  • 6

2 Answers2

7

Problem:

random.choice(cells) returns a random value from your list, for example "3", and you are trying to assign something to it, like:

"3" = "X"

which is wrong.

Instead of this, you can modify the list, for example:

cells[5] = "X"

Solution:

You can use random.randrange().

import random
cells = [str(i) for i in range(1,10)] # your list
cpuletter = 'X'

print(cells)
random_index = random.randrange(len(cells)) # returns an integer between [0,9]
cells[random_index] = cpuletter
print(cells)

Output:

['1', '2', '3', '4', '5', '6', '7', '8', '9']
['1', '2', '3', '4', '5', '6', '7', 'X', '9']
Sait
  • 19,045
  • 18
  • 72
  • 99
-1

Random.choice(cells) returns a random element from cells, so if it returned element #0 and element #0 was the value "1", your original statement would essentially be saying "1" = "X" - obviously you can't assign the string literal to be something else, it's not a variable.

You'd instead want to get a random element #, and assign cells[rand_elt_num]. You could get the random element number by something simply like:

rand_elt_num = random.randint(0, len(cells)-1 )  #get index to a random element
cells[rand_elt_num] = "X"    # assign that random element

I think this is the same as what the other answer says, they just used random.randrange() instead.

Demis
  • 5,278
  • 4
  • 23
  • 34
  • Both values in [`random.randint()`](https://docs.python.org/2/library/random.html#random.randint) is inclusive. So, you need to do `random.randint(0, len(cells)-1)` instead of `random.randint(0, len(cells))` if you really insist on using `random.randint()`. – Sait Aug 29 '15 at 22:01