I have a long line of code that prints a bunch of symbols for graphics, and I just started getting an index out of range error. it is inside a function, and this the code that matters:
at top, after imports(fr termcolor cprint, colored , time, os, random)
rannum = random.randrange(1,20,1)
the function:
def obstacle():
rocknum = random.randrange(0,12,1)
rock = ["on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan"]
rock[rocknum]= "on_cyan"
ongroundls = [" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "] #runframe 1 list
pos = rannum
#print(rannum)
if rannum == random.randrange(0,20,1):
#print(rannum, pos)
ongroundls[rannum] = "4"
rock[rocknum] = "on_yellow"
else:
rock[rocknum] = "on_cyan"
#print(colored(ongroundls[0],"grey","on_cyan") colored(ongroundls[1],"grey","on_cyan") colored(ongroundls[2],"grey","on_cyan") colored(ongroundls[3],"grey","on_cyan") colored(ongroundls[4],"grey","on_cyan") colored(ongroundls[5],"grey","on_cyan") colored(ongroundls[6],"grey","on_cyan") colored(ongroundls[7],"grey","on_cyan") colored(ongroundls[8],"grey","on_cyan") colored(ongroundls[9],"grey","on_cyan") colored(ongroundls[10],"grey","on_cyan") colored(ongroundls[11],"grey","on_cyan") colored(ongroundls[12],"grey","on_cyan") colored(ongroundls[13],"grey","on_cyan") colored(ongroundls[14],"grey","on_cyan") colored(ongroundls[15],"grey","on_cyan") colored(ongroundls[16],"grey","on_cyan") colored(ongroundls[17],"grey","on_cyan") colored(ongroundls[18],"grey","on_cyan") colored(ongroundls[19],"grey",rock[0]) colored(ongroundls[20],"grey",rock[1]) colored(ongroundls[21],"grey",rock[2]) colored(ongroundls[22],"grey",rock[3]) colored(ongroundls[23],"grey",rock[4]) colored(ongroundls[24],"grey",rock[5]) colored(ongroundls[25],"grey",rock[6]) colored(ongroundls[26],"grey",rock[7]) colored(ongroundls[27],"grey",rock[8]) colored(ongroundls[28],"grey",rock[9]) colored(ongroundls[29],"grey",rock[10]) colored(ongroundls[30],"grey",rock[11]) colored(ongroundls[31],"grey",rock[12]))
while pos > 19:
ongroundls[pos] = "#"
pos - 1
if pos == random.randrange(0, 32, 1):
pos == random
print(colored(ongroundls[0],"grey","on_cyan") colored(ongroundls[1],"grey","on_cyan") colored(ongroundls[2],"grey","on_cyan") colored(ongroundls[3],"grey","on_cyan") colored(ongroundls[4],"grey","on_cyan") colored(ongroundls[5],"grey","on_cyan") colored(ongroundls[6],"grey","on_cyan") colored(ongroundls[7],"grey","on_cyan") colored(ongroundls[8],"grey","on_cyan") colored(ongroundls[9],"grey","on_cyan") colored(ongroundls[10],"grey","on_cyan") colored(ongroundls[11],"grey","on_cyan") colored(ongroundls[12],"grey","on_cyan") colored(ongroundls[13],"grey","on_cyan") colored(ongroundls[14],"grey","on_cyan") colored(ongroundls[15],"grey","on_cyan") colored(ongroundls[16],"grey","on_cyan") colored(ongroundls[17],"grey","on_cyan") colored(ongroundls[18],"grey","on_cyan") colored(ongroundls[19],"grey",rock[0]) colored(ongroundls[20],"grey",rock[1]) colored(ongroundls[21],"grey",rock[2]) colored(ongroundls[22],"grey",rock[3]) colored(ongroundls[23],"grey",rock[4]) colored(ongroundls[24],"grey",rock[5]) colored(ongroundls[25],"grey",rock[6]) colored(ongroundls[26],"grey",rock[7]) colored(ongroundls[27],"grey",rock[8]) colored(ongroundls[28],"grey",rock[9]) colored(ongroundls[29],"grey",rock[10]) colored(ongroundls[30],"grey",rock[11]) colored(ongroundls[31],"grey",rock[12]))
in while loop (buffer is just a small delay and a os.system('cls')
obstacle()
buffer()
rannum = random.randrange(1,20,1)
it was working fine, then I made some minor changes and i cannot seem to fix it. i have tried changing the randrange, and some things are commented out in an attempt to fix it. , so the numbers are not what they were when the problem started. What could I do to fix it?
CodePudding user response:
Your problem is the final line. You hard-coded rock[12]
at the end of the print
, but rock
only has 12 elements, so the last valid index is 11
.
As I noted in the comments, even if you fix this, the code is borked; your while
loop will either never run, or never exit, because you never change pos
within the loop (pos - 1
computes a new value, but never stores it; pos -= 1
is perhaps the intent).