Search code examples
pythonpython-import

Can I make a print statement run before a module I imported?


I am a beginner to python and coding in general and I was wondering how I can make a print statement run before a module I imported. I am making a number guessing game and in my main file where I combine all the modules, I have a general function for running all the code together. It would be best if I show my code so you guys will have a better understanding of what I am dealing with:

import random
import lvl1
import time

level1 = lvl1.Level_1_activated()

# This is the main file combining everything together to make this game playable

introduction = """
Hello and welcome to NumGuess by Sava. Here is a little bit about the game:
The game works by having 3 levels, each where you must pick a number between a range of
1-10 (level 1), 1-20 (level 2), and 1-50 (level 3).
You are given 5 attempts in the first level, 10 in the second level, and 20 in the final one.
You can also access a hint by typing ‘hint’. You win the game by picking the right number in each level.
You lose the game when you run out of tries. You can get a free bonus with 5 extra tries if you type ‘hlp’. 

"""
def start_game(time, lvl1):
    print(introduction)
    level1
    
start_game(time, lvl1)

This is just the code for the main module, I have the code for lvl1 (which is the first level of my 'game'), and I have a class which has all the functions which then take part in the while loop. I will also show that file:

import random
import time

# I will fist make variables for the time breaks. S is for short, M is for medium and L is for long

S = 0.2
M = 0.7
L = 1.1

class Level_1_activated():

    def get_name(self):

        # This function simply asks the name of the player

        name = input("Before we start, what is your name? ")

        time.sleep(S)
        print("You said your name was: " + name)

    def try_again(self):

        # This asks the player if they want to try again, and shows the progress of the level
        
        answer = (input("Do you want to try again? "))
        time.sleep(M)

        if answer == "yes":
            print("Alright!, well I am going to guess that you want to play again")
            time.sleep(M)

            print("You have used up: " + str(tries) + " Of your tries. Remember, when you use 5 tries without getting the correct number, the game ends")
            # Return statement for if the player wants to play again 
            return True

        else:
            print("Thank you for playing the game, I hope you have better luck next time")
            # This is the return statement that stops the while loop 
            return False

    def find_rand_num(self, random):

        # This is the core of the level, where the player just chooses numbers between 1 and 10
        time.sleep(S)   

        print("The computer is choosing a random number between 1 and 10... beep beep boop")
        time.sleep(L)

        # The list of numbers for the level that the player is on at the moment
        num_list = [1,10]
        number = random.choice(num_list)

        ques = (input("guess your number, since this is the first level you need to choose a number between 1 and 10  "))
        print(ques)

        if ques == str(number):
            time.sleep(S)
            print("Congratulations! You got the number correct!")

            # Yet another return statement for the while loop
            return "Found"
            
        elif input != number:

            time.sleep(M)
            print("Oops, you got the number wrong")


    # This variable is fairly self-explanatory; it is what controls how many iterations there are in the while loop 
tries = 1

while tries < 6:

    if tries < 2:
        Level_1_activated().get_name()
    
    res = Level_1_activated().find_rand_num(random)
    if res == "Found":
        break

    checker = Level_1_activated().try_again()
    if checker is False:
        break
    
    tries += 1

If you go back to this function in the main file:

def start_game(time, lvl1):
    print(introduction)
    level1

I intentionally put the print statement before the module to make it run first, and I have tried different approaches to this and still can't seem to get a grasp on what I'm doing wrong here. Thank you for taking the time to read the code and I would be very grateful if any of you have a possible solution to this.


Solution

  • there are number of thing you can do, one is encapsulate your code into functions that only run when you ask for it

    lvl1

    ... #all the previous code    
    
    def run_game(): 
        tries = 1
        while tries < 6:
            ...
            tries += 1
    

    you can also make a distinction between being executed directly vs being imported, to do that is simple, you include the following check (usually at the end of the file)

    if __name__ == "__main__":
        #if true it mean that you're executing this module directly, otherwise it was imported
        #and you include here whatever you want that happens when you execute the module directly but not when is imported, like for example running a game
        run_game()
        
    

    __name__ is a special variable and python will assigned the value "__main__" if executed directly, otherwise it will be the name of the file, like "lvl1" for example

    And in your main you can import it and do stuff like

    import lvl1
    ...
    
    def start_game():
        print(introduction)
        lvl1.run_game()