easy_c0mpany80
easy_c0mpany80

Reputation: 337

Problems with basic while loop in Python

Im working on a basic text game to improve my python skills. I have a section where there are a series of if statements and I wanted to use a while loop in case people used choices outside the given 3 and then it will loop back to the start and ask them again.

For some reason it prints 'doesn't compute please try again' even when a correct choice of 1-3 is given and I can't figure out why. I have been following a lesson on how to do this and what I have done seems to be the same as that structure so not sure what Im doing wrong....

def enter(self):
    print "You move down into the east tunnel"
    print "You walk down the tunnel for what seems like a long time, there are flickering torches along the wall that give off small amounts of light but its still"
    print "very difficult to see anything ahead"
    print "You hear a growling and shuffling noise ahead.....as you peer into the gloom you see a large troll!"
    print "what will you do?"

print """1 - draw your sword and fight him.
         2 - try to run past him.
         3 - use one of your objects.
         """

troll_choice = raw_input("> ")

while troll_choice != "1" or troll_choice != "2" or troll_choice != "3":
    print "doesnt compute please try again"

    troll_choice = raw_input("> ")

if troll_choice == "1":
    print "you will fight the troll"
elif troll_choice == "2":
    print "The troll looks slow and stupid but not as slow as you think! As you try to rush past him he brings his giant club down on top of your head"
    print "killing you instantly"
    return 'death'

elif troll_choice == "3":
    print "which of your items will you use?"
    items_choice = raw_input("> ")
    if items_choice == "matches":
            print "You fool, matches are useless against a creature of this size, he slays you swiftly"
            return 'death'

    elif items_choice == "gold coin":
            print "you flick the gold coin at the Troll, the troll looks puzzled and watches the shiny coin arch through the air, no is your chance to attack!"
            print "the Troll's defences are down, you draw your sword and lunge towards its soft underbelly and drive your sword home killing it instantly"
            print "you wipe the blood from your sword and head on down the tunnel"

            return 'room_b'

    elif items_choice == "flashbang dust" or items_choice == "flashbang":
            print "You pull out the puch of flashbang dust and throw it hard on the floor at the trolls feet while shielding your eyes..."
            print "the blast and white light from the explosion blinds the troll, it roars and covers its eyes..."
            print "you decide to use this time to get past the troll and sprint down the tunnel leaving him behind"

            return 'room_b'

    elif items_choice == "silver dagger" or items_choice == "iron cross":
            print "Why would these be of any use against a troll??"
            print "he quickly slays you!"

            return 'death'

Upvotes: 1

Views: 178

Answers (2)

DevilMayCry
DevilMayCry

Reputation: 23

I am sorry that I can not run your program successfully,maybe something wrong.

And I just give a simple solution.

def loop():
while 1:
    print "please input 1,2 or 3"
    num = int(raw_input("> "))
    if num < 1 or num > 3:
        print "please try again"
        continue
    return

loop()

You can use change it as you want.

Upvotes: 0

Anand S Kumar
Anand S Kumar

Reputation: 90859

while loop continues a loop till the condition becomes false , the condition you have given -

while troll_choice != "1" or troll_choice != "2" or troll_choice != "3":

Will never become false, because troll_choice cannot be 1 as well as 2 as well as 3 at the same time. So it will keep looking indefinitely.

You want to use and in the condition instead of or , to break the loop when troll_choice becomes either of the three.

But a better way is to use in opertor -

while troll_choice not in ["1" , "2" , "3"]:

Upvotes: 2

Related Questions