'my decoration sometimes appears just outside the triangle

It seems that my decoration sometimes appears just outside the triangle... How can I fix this?

import random
n = int(input('enter n: '))
x = 1
for i in range(n):
    if i == 0:
        count = 0
    else:
        count = random.randint(0, x)
    print(' ' * (n - i), '*' * count, end = '')
    if i == 0:
        print('&', end = '')
    else:
        print('o', end = '')
    print('*' * (x - count - 1))
    x += 2

What do I get for value n = 10:

           &
          ***o
         *o***
        o******
       ******o**
      *********o*
     *************o
    *****o*********
   *************o***
  ******************o


Solution 1:[1]

def tree(n):
    from random import sample
    body = ["&"] + ["".join(sample("o" + "*" * (k:=x*2+1), k=k)) for x in range(1, n)]
    spaces = [" " * (x-2) for x in range(n, 1, -1)]
    return "\n".join("".join(tpl) for tpl in zip(spaces, body))

print(tree(10))

Output:

        &
       o**
      ****o
     o******
    *******o*
   ********o**
  *******o*****
 **************o
o****************

Solution 2:[2]

I love christmas tress! This is my take on the question :-)

import random
n = int(input('Enter tree height: '))

print(" " * (n-1) + "&")
for i in range(2, n+1):
    decoration = random.randint(1, (i-1)*2 -1)
    print(" " * (n - i) + "*" * decoration + "o" + "*" * ((i-1)*2 - decoration))


Enter tree height: 12
           &
          *o*
         **o**
        *o*****
       *o*******
      ********o**
     *******o*****
    ***********o***
   ********o********
  ****************o**
 ***o*****************
*********o*************

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Paul M.
Solution 2