Translations of this page:

009 __main__

step009

managing functions

__name__ and __main__

There is still something to do before adding more complex combat mechanics: making sure that the Goblin Dice Duel works when merged with the code from the previous site. This means managing all the new functions as well as the old existing functions.

In many python programs, you will find a lot of functions defined and nearly nothing else. The only code not hiding inside a function (or later, inside a class) will look like this:

if __name__ == "__main__":
    main() 

This code is not indented and does not belong to any function or class. such code is executed as soon as python opens the .py file that include such code. It's code that only belong to this python file (or python module).

By testing the (always existing, internal) variable __name__ for equality with "__main__" you can find out if a python module was started directly (True) or imported by another python module (False). If the module was started directly you usually want to execute the module's most important function; In the example above a function with the named main() is called. In the Goblin Dice Duel example below, i named the core function game().

putting everything in functions

As you can see in this updated Goblin Dice Duel code below, only 2 (!) code lines are on module level:

  • the import random
  • the if __name__ == "__main__": test

Everything else is stuffed inside functions.

source code

click reload on your browser if you see no source code here or visit Github.com

code discussion

pass statement

What does the pass command in the last line do ? Well…exactly nothing. Because of python's syntax, you can not simply end a line with a colon and then stop coding. You need at least a pass command to indicate that “here happens nothing”. It is usually typed for function or branches of functions that you have no time to code at the moment but will eventually code later. If the python interpreter runs into a pass command he does nothing at all.

Also see the online documentation for pass.

online

You really should by now use a python editor but you can still try it out online (just click the graphic) :
click me

output

As you can see in the output below the actual version of Goblin Dice Duel lists the new stats attack and defense for both players but does nothing with them (beside comparing in a table). It is time for some advanced combat mechanics…

 --- Goblin Dice Duel ---


          Stiny | vs. | Grunty 
 ---------------+-----+-----------
 hitpoints:  22 |  <  |  43
 attack:      6 |  >  |   5
 defense:     9 |  >  |   3


round    hitpoints

 0 Stinky: 22 Grunty: 43
 1 Stinky: 22 Grunty: 42
 2 Stinky: 20 Grunty: 38
 3 Stinky: 17 Grunty: 36
 4 Stinky: 13 Grunty: 31
 5 Stinky: 11 Grunty: 29
 6 Stinky:  5 Grunty: 25
 7 Stinky:  2 Grunty: 24
 8 Stinky:  1 Grunty: 24
 9 Stinky: -1 Grunty: 18
Game Over
Grunty wins
thank you for playing Goblin Dice Duel. bye-bye!
step009

en/python/goblins/step009.txt · Last modified: 2014/01/09 11:07 (external edit)