-6

When the user chooses option 4 on hall(), it should run blue(), but when I try to run it I get an error saying that blue() is not defined. How do I fix this?

import time
import sys

name = input ("Name: ")

print ("Hello", (name), ", and welcome to my game that i made to learn python.")
print ("How to play the game, just type the number its not that hard.")
time.sleep(5)

def intro():
    print ("You are in a room, to the south there is a torch on the wall and to the north there is a door.")
    time.sleep(5)
    print ("Your options are: ")
    time.sleep(3)
    print ("1. Do nothing")
    print ("2. Go south and pick up the torch")
    print ("3. Go north, open and go through the door")
    print ("4. You decide to build an orphanage in the room, makes sense.")

    choice = input(">>> ")

    if choice == "1":
        print("You decide to curl into a ball and go to sleep, you never wake up again. --GAME OVER--")
        print("I guess you could try again if you must.")
        time.sleep(5)
        intro()
    elif choice == "2":
        print("You walk southwards towards the wall, grab the torch off the wall and hold it in your hands.")
        print("You walk over towards the door and open it")
        time.sleep(5)
    elif choice == "3":
        print("You walk over towards the door and open it, on the other side there is a dark corridor, you step forward and the door closes behind you. You get surrounded in darkness and die. --GAME OVER--")
        print("I guess you could try again if you must.")
        time.sleep(5)
        intro()
    elif choice == "4":
        print("You can't build an orphanage in a room with nothing there idiot, you wasted your whole life attempting. --GAME OVER--")
        print("I guess you could try again if you must.")
        time.sleep(5)
        intro()
    else:
        print("Type the correct number idiot")
        intro()

intro()

def hall():
    print ("As you open the door a strong gust of cold air comes through making the torch flicker")
    time.sleep(3)
    print ("You continue up the corridor with the torch illuminating your surroundings, you feel like your being watched")
    time.sleep(3)
    print ("You keep walking for what seems like hours and you finally come across a part where the corridor splits off into 3 different ones")
    print ("What do you do?")
    print ("1. Go north.")
    print ("2. Go east.")
    print ("3. Go back the way you came.")
    print ("4. Go west.")
    time.sleep(5)

hall()

choice = input(">>> ")

if choice == "1":
        print("You head north but as soon as you do the ground under you crumbles and you fall. And die. --GAME OVER--")
        print("I guess you could try again if you must.")
        time.sleep(5)
        hall()
elif choice == "2":
        print("You go down the east corridor and get a glimpse of a dark red light before it disappears.")
        print("You continue to walk")
        time.sleep(5)
        red()
elif choice == "3":
        print("Well done, you just went back to the place you wanted to get out from, your legs are tired and your torch has gone out. idiot. --GAME OVER--")
        print("I guess you could try again if you must.")
        time.sleep(5)
        hall()
elif choice == "4":
        print("You go down the west corridor and get a glimpse of a dark blue light before it disappears.")
        print("You continue to walk")
        time.sleep(5)
        blue()
else:
    print("Type the correct number idiot")
    time.sleep(5)
    hall()

def red1():
    print ("As you continue to walk down the corridor the air around you seems to head up more and more.")
    time.sleep(3)
    print ("You come around a little podium and on it is a piece of paper with the numbers 264 894 written on it")
    time.sleep(3)
    print ("You go to pick it up but it crumbles into dust and under the dust are the words blue carved into the podium")
    time.sleep(3)
    print ("you continue walking")
    time.sleep(3)
    print ("After a while you come across a shiny iron door with a keypad by the side on the keypad it spells the words red on it.")
    time.sleep(3)
    print ("You attempt to enter the correct code.")

red1()

code1 = input(">>> ")

if code1 == "362 682":
    print ("The door slides open without making a noise, you step into the door and continue walking")
else:
    print ("Incorrect code. Hint:RED")
    print ("restarting...")
    time.sleep(10)
    intro()

def blue1():
    print ("As you continue to walk down the corridor the air around you seems to get colder and colder more and more.")
    time.sleep(3)
    print ("You come around a little podium and on it is a piece of paper with the numbers 362 682 written on it")
    time.sleep(3)
    print ("You go to pick it up but it crumbles into dust and under the dust are the words red carved into the podium")
    time.sleep(3)
    print ("you continue walking")
    time.sleep(3)
    print ("After a while you come across a rusty iron door with a keypad by the side on the keypad it spells the words red on it.")
    time.sleep(3)
    print ("You attempt to enter the correct code.")

blue1()

code2 = input(">>> ")

if code2 == "264 894":
    print ("The door slides open without making a noise, you step into the door and continue walking")
else:
    print ("Incorrect code. Hint:BLUE")
    print ("restarting...")
    time.sleep(10)
    intro()
  • there is no call for blue in hall function? – yeg Nov 07 '15 at 23:37
  • I can’t reproduce this. Note that your program flow is really bad. If you call e.g. `intro()` somewhere down at `red1`, then this will *not* rewind your program to the top, so everything that happened between the intro and that point before will not be executed. So directly after the intro, it would continue with blue. Calling a function is not a GOTO statement. You should really design this in a better way (also, avoid recursion, see also [this answer](http://stackoverflow.com/a/23294659/216074)) – poke Nov 07 '15 at 23:39
  • 1
    Okay, with your modified code, the error is pretty clear: You’re calling the function way before it was created. Python interprets the code from top to bottom, so calling functions above that will be declared later will not work. You should put your main game logic into a separate function that you call at the very end of your code (e.g. using an if-main block). – poke Nov 07 '15 at 23:41
  • Please read about [minimal examples](http://stackoverflow.com/help/mcve), which this is not. – Tom Zych Nov 08 '15 at 00:13

2 Answers2

1

nice story btw). anyway to the problem. you call function blue() that is not defined in your code - there is no such function ). if you meant to call blue1() you will get an error and that's because you first need to declare the function before using it for example:

 1.this will not work:
blue()
def blue(): ...

2. this will work:
def blue(): ...
blue()

any way for good practice its good to maintain a simple code structure, all functions above and the main is the last one that calls other function.

yeg
  • 95
  • 7
0

The reason you're getting an error is because there indeed is no function called blue() defined. It's blue1() in your code. I strongly suggest investing in a linter.

MattDMo
  • 100,794
  • 21
  • 241
  • 231