Junior
Junior

Reputation: 71

Python 3.1.1 - Assign random values to a function

I need a way to assign random values to a function, call the function and print the value to the screen.

When I run the code as it is, the enemy's attack and user's defense does not get recalculated. What can I do to have Python recalculate these variables every time the function is called?

import random

enemyName = "Crimson Dragon"

def dragonAtk():
    return random.randint(5,10)

def userDef():
    return random.randrange(8)

userHp = 100
userName = input("What is your name? ")
enemyAttackname = "Fire Blast"

def enemyAttacks():
    global battleDmg
    global userHp
    global enemyAtk
    global userDef

    enemyAtk = dragonAtk()
    userDef = userDef()

    print (">>> " + enemyName + " attacks " + userName + " with "  + enemyAttackname + "!")
    if enemyAtk < userDef:
        print (">>> " + userName + " successfully defended the enemy's attack!")
    elif enemyAtk == userDef:
        print (">>> " + userName + " successfully parried the enemy's attack!")
    else:
        battleDmg = enemyAtk - userDef
        userHp -= battleDmg
        print (">>> " + userName + " takes " + str(battleDmg) + " DMG! "\
        + userName + " has " + str(userHp) + " HP remaining!")

enemyAttacks()
input()
enemyAttacks()
input()

This is my result

What is your name? Murk
>>> Crimson Dragon attacks Murk with Fire Blast!
>>> Murk takes 6 DMG! Murk has 94 HP remaining!

Traceback (most recent call last):
  File "C:\Users\Junior\Desktop\python projects\test", line 37, in <module>
    enemyAttacks()
  File "C:\Users\Junior\Desktop\python projects\test", line 22, in enemyAttacks
    userDef = userDef()
TypeError: 'int' object is not callable
>>> 

So, I see it ran once through enemyAttacks(), but the second time gave me an error. Not sure what to make of it. Any thoughts?

Upvotes: 1

Views: 149

Answers (1)

TerryA
TerryA

Reputation: 59974

Here:

userDef = userDef()

You have overridden your function. Thus, when you call the function again, you are trying to call the function, but you have an integer instead (hence the error).

Rename your variable to another name so you don't override your function.

Upvotes: 2

Related Questions