How do I reset the value of variables in a loop? (Python 3.1.1) -


when run code , battle part of game, random values assigned characters attack, defense, damage , health. however, after first turn, keep getting same values , can't reset.

for example, user's attack random number 4 11. program "rolls" 5 , assigns variable useratk

useratk = random.randint(4,11) 

i assumed everytime loop ran, generate new value. not, , every time print variable same value first assigned. missing something?

below code

import random  # variables # # # variable user's character name username = input("brave warrior, name? ")  # variable used in input function pause game enternext = ("press enter continue...")  # variable used format user input prompt # battle text prompt = ">>>>>  "  # variable used add new line string newline = "\n"  # variable used display message when hero dies herodeadmsg = username + " has fallen!"  # these variables represent dragon's stats (hp, atk & def) dragonhp = 100 dragonatk = random.randint(5,10) dragondef = random.randrange(8)  # these variables represent user's stats (hp, atk & def) userhp = 90 useratk = random.randint(4,11) userdef = random.randrange(8)  # these variables calculate battle damage , hp dragondmg = (useratk - dragondef) dragonhp -= dragondmg userdmg = (dragonatk - userdef) userhp -= userdmg  # variable prints options in battle menu battlemenu = """attack (a) - magic (m) - item (i) - run (r)"""   # variable determines goes first cointoss = random.randint(0, 1)  # these variables print actions in each turn dragonattack = \     prompt + "crimson dragon attacks " + str(dragonatk) + " atk!"\     + newline + prompt + "you defend " + str(userdef) + " def!"\     + newline + prompt  userattack = \     prompt + "you attacked " + str(useratk) + " atk!"\     + newline + prompt + "crimson dragon defends " + str(dragondef) + " def!"\     + newline + prompt  usermagic = \     prompt + username + " tried use magic!"\     + newline + prompt + username + " has no magic!"\     + newline + prompt  useritem = \     prompt + username + " tried use item!"\     + newline + prompt + username + " has no items!"\     + newline + prompt  userretreat = \     prompt + username + " tries retreat!"\     + newline + prompt + "the enemy won't let escape!"\     + newline + prompt   # these variables show health during battle  printdragonhp = "crismon dragon has " + str(dragonhp) + " hp remaining!" printuserhp = username + " has " + str(userhp) + " hp remaining!"  # variable simulates results of coin toss cointoss = random.randint(0, 1)   # # # condtitions # # # these conditions determines attacks first if cointoss == 0:     currentturn = "dragon" elif cointoss == 1:     currentturn = "user" else:     print("the coin toss failed!")      # # # battle mechanics # #  while currentturn: # mechanics crimson dragon's turn if currentturn == "dragon":      # prints crimson dragon's attack , ends turn     print(newline + prompt + "crimson dragon moves!"\           + newline + prompt + newline + dragonattack\           + newline + prompt + username + " takes " + str(userdmg) + " dmg!"\           + newline + prompt + printuserhp)     currentturn = "user"     input(prompt)      # need implent way reset atk , def  # mechanics user's turn     if currentturn == "user":      # prints battle menu , asks user's choice     print(newline + prompt + battlemenu\           + newline + prompt)     userchoice = input(prompt)      # prints user's attack , ends turn     if userchoice == "a":         print(userattack)         if userhp < 1:             print(herodeadmsg)             break          input (prompt)         currentturn = "dragon"     # prints user's magic , ends turn     elif userchoice == "m":         print(usermagic)         input (prompt)         currentturn = "dragon"     # prints user's item , ends turn        elif userchoice == "i":         print(useritem)         input (prompt)         currentturn = "dragon"     # prints user's retreat , ends turn         elif userchoice == "r":         print(userretreat)         input (prompt)         currentturn = "dragon"     # prints error message invalid entries     else:         print(newline + prompt + "that not valid menu item."\               + newline + prompt + "please try again.") 

random.randint(4,11) chooses integer in range [4, 11] , returns number. so, when useratk = random.randint(4,11), you're getting number , storing useratk, , every time access useratk you'll same number back.

if hoping useratk magic kind of thing acts different number in range [4, 11] each time access it… well, that's not impossible (see here quick & dirty stab @ it)… lead more confusion benefit.

for example, have code tries print out str(useratk)… but if value different each time access it, gets printed out different what's used calculate damage! imagine if playing tabletop d&d, , dungeon master rolled die tell roll, , forgot result , rolled again figure out whether hit. might say, "you rolled 20. missed." that's no good.

what might useful make useratk function:

def useratk():     return random.randint(4, 11) 

and of similar variables. then, everywhere accessing number, you'll instead call function:

def dragondmg():     return useratk() - dragondef() 

then somewhere, you're going want store results of calling functions in local variables within each loop.

but key that, it, have have variables re-calculate each time through loop.


Comments

Popular posts from this blog

java - JavaFX 2 slider labelFormatter not being used -

Detect support for Shoutcast ICY MP3 without navigator.userAgent in Firefox? -

web - SVG not rendering properly in Firefox -