简体   繁体   中英

Can't use functions in Python

I've been working on a project in python for a while now and I can't call the main function. I searched for a while but I can't get it to work. Right now the problem is that I can't call the main function. It used to be that once the program went through the main function once it wouldn't go back to the main function, but now it won't even go into the main function and I can't call it from the shell. Could someone help me? Here's my code.

#!/usr/bin/python
# I only have the above part in case the
# end user does not have python

# Wizard's Quest Copyright (c) 2016 by GrayHat4Life
# This software is open source and may be distributed freely

# Prepare the program
import sys, random

# Set up some variables & begin the story
global health
health = 10
global enemiesKilled
enemiesKilled = 0
print("You are a wizard travelling through the kingdom")
print("Your quest: to save the kingdom by placing the Gem of Karn in its rightful place, the Tower of Souls")
# Main gameplay loop
def main():
# Battle code
# Set up the battle variables
    enemyList = ["Goblin", "Witch", "Dark Mage", "Dark Knight", "Theif", "Troll", "Orc"]
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# Prepare the battles
    print("As you are walking through the Forest of Doom, a " + random.choice(enemyList) + " appears on the path in front of you!")
# This part isn't very usefull, it's only to give the
# player the illusion of free will. It's actually a kind of gambling game :s
    input("What spell do you use to attack it? ")
# The attack strengths
    attack = random.choice(numbers)
    enemyAttack = random.choice(numbers)
# Let the battle begin!
    if attack > enemyAttack:
        health = health - 1
        print("Your attack failed and you've been hit! You narrowly escape the enemy and continue your quest")
        main()
    elif enemyAttack > attack:
        enemiesKilled = enemiesKilled + 1

# This loop gives the user the ability to win. And lose. :D
while True:
    if enemiesKilled == 10:
        print("You've finally made it to the end of your quest!")
        print("You place the Gem of Karn in the soul sphere and save the kingdom!")
        sys.exit()
    elif health == 0:
        print("The damage was too much.")
        print("You bleed out in the middle of the forest, alone and friendless.")
        print("GAME OVER")
        sys.exit()

Thanks!

I don't see where you call the main() method initially.

Currently, you are entering a while True: and neither condition enemiesKilled == 10: or health == 0: are true

Your code should follow this structure if you are expecting to execute it

import somestuff

def main():
    # do something here

if __name__ == '__main__':
    # call the main function
    main()

And if you want the while True: piece, then I would recommend something like this instead to stop the infinite loop

if __name__ == '__main__':
    # call the main function
    while enemiesKilled != 10 or health != 0:
        main()

    if enemiesKilled == 10:
        print("You've finally made it to the end of your quest!")
        print("You place the Gem of Karn in the soul sphere and save the kingdom!")
    elif health == 0:
        print("The damage was too much.")
        print("You bleed out in the middle of the forest, alone and friendless.")
    print("GAME OVER")

Python does not have a main function. Define your functions first so the interpreter knows about them. It will then execute the first statement after the last 'return' and following statements after that.

Correct syntax for python:

#!/usr/bin/python

# Function definition is here
def printme( str ):
  "This prints a passed string into this function"
  print str
  return;

# Now you can call printme function
printme()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM