0

I'm new to programming and trying to create a branching story program in python. as far as I can tell everything should be working, but for some reason it doesn't register the input response, just repeats the original. (it doesn't rewrite the variable 'listo' like it should). Instead of moving on to the next line in the story(=rewriting 'listo' to the appropriate list and operating on it), it goes back to the first line of the story with it's 3 options. here's the relevant code:

#different story lines with their respective options
s1= 'You awaken from a sudden noise in your tent. An axe is coming straight towards your head.'
s2= 'You be dead.'
s3= 'The creature wielding the axe is thrown off balance by the momentum of his swing'
s4='You manage to parry the weapon away from you, where it sinks through your bed. The creature wielding it falls on top of you, carried by it’s momentum. You grapple with it on the ground trying to gain an advantage.'
s5='You run out of your tent. The entire camp is in a state of chaos. People and more of the creatures are skirmishing all around and a large amount of the camp is on fire. All of the pack animals are running around like headless chickens.'
s6='You take advantage of the creature’s misstep, lift up your small desk and bring it down hard on the creature’s head. It crumples and drops to the ground.'
s7='As you try to gain purchase on it’s throat the creature grabs your hand in its mouth and bites down hard. You feel white hot pain in your arm and black out.'
s8='You push the creature off of you and roll away.'
s9='You grapple in the dirt for something useful and manage to grab a hard oblong object. You stab it into the creature’s face and hear it squeal in agony as you push it off of you and get up. '
s10 = 'goodbye'
#different choices
o1='Roll out of the way'
o2='Try to block it'
o3='Stare at it and hope it goes away.'
o4='Exit program'
o5='Restart story'
o6='Run away'
o7='attack'
o8='Try to strangle it'
o9='Try to get it off of you'
o10='Try to find a weapon'
oo=''

#setting defaults so it wont give me issues:
a2 = []
a3 = []
a4 = []
a5 = []
a6 = []
a00 =[]
#the master lists. [story line, choices[references]]
a1 = [s1,o1,o2,o3,a2,a3,a4]
a2.append([s3,o6,o7,oo,a5,a6])
a3.append([s4,o8,o9,o10,a00,a00,a00])
a4.append([s2,o4,o5,oo,a00,a1,a00])
a5.append([s5,o4,o5,oo,a00,a1,a00])
a6.append([s6,o4,o5,oo,a00,a1,a00])
a00.append([s10,oo,oo,oo,a00,a00,a00])

correct_answers = ['a','b','c']

l = 0
#the program:
listo = a1
print(listo[4])
while True:
    l +=1
    print('\nloop '+ str(l)+ '\n')
    x = input('\n'+str(listo[0])+'\nwhat do you do?: \na.'+str(listo[1])+'\nb.'+str(listo[2])+'\nc.'+str(listo[3])+'\n\nyour choice:')
    print(type(x))
    if x not in correct_answers:
        print('Wrong answer wiseguy, type a lowercase a,b or c.')
        print(x)
        exit()
    if x == 'a':
        print('\ngot this far yall')
        listo = listo[4]
        print('\nreassigned value')
        print(listo)
    elif x == 'b':
        listo = listo[5]
    elif x == 'c':
        listo = listo[6]


any help would be much appreciated, thanks!

Edit: post has been altered, see comments.

1 Answers1

0

You are facing this error because the input() function always returns a string value. However, you are checking x against integers. Try using this instead:

x = int(input(...))

Here, you convert the input given by the user into an integer.

You can also change your code to be shorter like so:

x = int(input(...))
listo = listo[4][x - 1]
Bhavye Mathur
  • 1,024
  • 1
  • 7
  • 25
  • thanks, I tried this but I keep getting the error "TypeError: int object is not subscriptable". I tried playing around with it and changing where I convert it from string to int, but I can't get it to work... what is still going wrong? – EnderBromson Sep 15 '20 at 12:07
  • That must be happening because once you set `listo` to `listo[4][x - 1]`, you are setting it to an integer. Do you mean to change the value of the `x - 1` element of the 4th element of `listo`? – Bhavye Mathur Sep 15 '20 at 12:48
  • I mean to be changing 'listo' to be a different list. and the place in the list it is pointing to listo[4][x-1] is where I have the name of the new list stored. I still don't understand how to fix it. – EnderBromson Sep 15 '20 at 17:50
  • Would it be possible for you to share the entire code? ie include the values of the lists and variables. That might help me understand this better. – Bhavye Mathur Sep 16 '20 at 09:22
  • I added the current version of the whole thing now. I changed up a lot of things trying to workaround the problem but now I'm running into other issues. for some reason the if loop in line 50 is sifting out the correct answers too. (this one: if x != 'a' or 'b' or 'c': ) – EnderBromson Sep 16 '20 at 14:41
  • I solved that last part, but now I'm getting "list index is out of range". – EnderBromson Sep 16 '20 at 14:52
  • nvm, I got it to work. thanks! (the lists that I had added to were actually lists inside lists, so i just needed to index them correctly). – EnderBromson Sep 16 '20 at 15:22
  • Alright, that's great! – Bhavye Mathur Sep 16 '20 at 19:37