Python repeat random integer in while looprandom.randint(2, 12) returns same results every time it's run in PythonCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow can I safely create a nested directory in Python?Does Python have a ternary conditional operator?Accessing the index in 'for' loops?Converting integer to string in Python?Iterating over dictionaries using 'for' loopsDoes Python have a string 'contains' substring method?

Can a virus destroy the BIOS of a modern computer?

Method Does Not Exist error message

Which is the best way to check return result?

How badly should I try to prevent a user from XSSing themselves?

Detention in 1997

Are there any examples of a variable being normally distributed that is *not* due to the Central Limit Theorem?

Why do bosons tend to occupy the same state?

Why doesn't using multiple commands with a || or && conditional work?

Could the museum Saturn V's be refitted for one more flight?

How do I gain back my faith in my PhD degree?

CAST throwing error when run in stored procedure but not when run as raw query

Can my sorcerer use a spellbook only to collect spells and scribe scrolls, not cast?

Is it acceptable for a professor to tell male students to not think that they are smarter than female students?

Im going to France and my passport expires June 19th

Expand and Contract

Ambiguity in the definition of entropy

Intersection Puzzle

What is the idiomatic way to say "clothing fits"?

What killed these X2 caps?

Cursor Replacement for Newbies

What does “the session was packed” mean in this context?

Is it possible to create a QR code using text?

Avoiding the "not like other girls" trope?

Personal Teleportation: From Rags to Riches



Python repeat random integer in while loop


random.randint(2, 12) returns same results every time it's run in PythonCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow can I safely create a nested directory in Python?Does Python have a ternary conditional operator?Accessing the index in 'for' loops?Converting integer to string in Python?Iterating over dictionaries using 'for' loopsDoes Python have a string 'contains' substring method?













3















I am trying to code player and mob attacks for a text based RPG game I am making, I have randomint set up for player and mob hitchance and crit chance but I can't figure out how to get a new integer for them every time I restart the loop, it uses the same integer it got the first time it entered the loop.



### GAME VALUES ###
class roll_dice:
def __init__(self):
self.spawn = random.randint(1,100)
self.escape = random.randint(1,100)
self.playercrit = random.randint(1,100)
self.playerhitchance = random.randint(1,100)
self.mobcrit = random.randint(1,100)
self.mobhitchance = random.randint(1,100)
roll = roll_dice()


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
orcMobSpawn()
while True:
fight_orc = input(">>> ")
if fight_orc.lower() == 'a':

### PLAYER ATTACK ###
while True:
roll.playercrit
roll.playerhitchance
if roll.playercrit <= 10 and roll.playerhitchance >= 6:
print("You crit orc for",str(userPlayer.atk * 2),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk * 2
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
print("You hit orc for",str(userPlayer.atk),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
print("You missed!")
break
elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
print("You missed!")
break
elif orcMob.hp <= 0 and userPlayer.hp >= 1:
print("Your HP:",str(userPlayer.hp))
print("You win!")
break
elif userPlayer.hp <= 0:
print("You died!")
exit()

### ORC ATTACK ###
while True:
roll.mobcrit
roll.mobhitchance
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
if roll.mobcrit <= 5 and roll.mobhitchance >= 25:
print("nOrc crit for",str(orcMob.atk * 2),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk * 2
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance >= 25:
print("nOrc hit for",str(orcMob.atk),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk
print("Your HP",str(userPlayer.hp))
break
elif roll.mobcrit <= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
elif orcMob.hp >= 1:
continue









share|improve this question
























  • I think maybe repeat of this: stackoverflow.com/questions/33806022/…

    – sit_on_a_pan_otis
    Mar 7 at 22:18











  • Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

    – E2Busy
    Mar 7 at 22:22















3















I am trying to code player and mob attacks for a text based RPG game I am making, I have randomint set up for player and mob hitchance and crit chance but I can't figure out how to get a new integer for them every time I restart the loop, it uses the same integer it got the first time it entered the loop.



### GAME VALUES ###
class roll_dice:
def __init__(self):
self.spawn = random.randint(1,100)
self.escape = random.randint(1,100)
self.playercrit = random.randint(1,100)
self.playerhitchance = random.randint(1,100)
self.mobcrit = random.randint(1,100)
self.mobhitchance = random.randint(1,100)
roll = roll_dice()


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
orcMobSpawn()
while True:
fight_orc = input(">>> ")
if fight_orc.lower() == 'a':

### PLAYER ATTACK ###
while True:
roll.playercrit
roll.playerhitchance
if roll.playercrit <= 10 and roll.playerhitchance >= 6:
print("You crit orc for",str(userPlayer.atk * 2),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk * 2
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
print("You hit orc for",str(userPlayer.atk),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
print("You missed!")
break
elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
print("You missed!")
break
elif orcMob.hp <= 0 and userPlayer.hp >= 1:
print("Your HP:",str(userPlayer.hp))
print("You win!")
break
elif userPlayer.hp <= 0:
print("You died!")
exit()

### ORC ATTACK ###
while True:
roll.mobcrit
roll.mobhitchance
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
if roll.mobcrit <= 5 and roll.mobhitchance >= 25:
print("nOrc crit for",str(orcMob.atk * 2),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk * 2
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance >= 25:
print("nOrc hit for",str(orcMob.atk),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk
print("Your HP",str(userPlayer.hp))
break
elif roll.mobcrit <= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
elif orcMob.hp >= 1:
continue









share|improve this question
























  • I think maybe repeat of this: stackoverflow.com/questions/33806022/…

    – sit_on_a_pan_otis
    Mar 7 at 22:18











  • Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

    – E2Busy
    Mar 7 at 22:22













3












3








3








I am trying to code player and mob attacks for a text based RPG game I am making, I have randomint set up for player and mob hitchance and crit chance but I can't figure out how to get a new integer for them every time I restart the loop, it uses the same integer it got the first time it entered the loop.



### GAME VALUES ###
class roll_dice:
def __init__(self):
self.spawn = random.randint(1,100)
self.escape = random.randint(1,100)
self.playercrit = random.randint(1,100)
self.playerhitchance = random.randint(1,100)
self.mobcrit = random.randint(1,100)
self.mobhitchance = random.randint(1,100)
roll = roll_dice()


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
orcMobSpawn()
while True:
fight_orc = input(">>> ")
if fight_orc.lower() == 'a':

### PLAYER ATTACK ###
while True:
roll.playercrit
roll.playerhitchance
if roll.playercrit <= 10 and roll.playerhitchance >= 6:
print("You crit orc for",str(userPlayer.atk * 2),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk * 2
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
print("You hit orc for",str(userPlayer.atk),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
print("You missed!")
break
elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
print("You missed!")
break
elif orcMob.hp <= 0 and userPlayer.hp >= 1:
print("Your HP:",str(userPlayer.hp))
print("You win!")
break
elif userPlayer.hp <= 0:
print("You died!")
exit()

### ORC ATTACK ###
while True:
roll.mobcrit
roll.mobhitchance
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
if roll.mobcrit <= 5 and roll.mobhitchance >= 25:
print("nOrc crit for",str(orcMob.atk * 2),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk * 2
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance >= 25:
print("nOrc hit for",str(orcMob.atk),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk
print("Your HP",str(userPlayer.hp))
break
elif roll.mobcrit <= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
elif orcMob.hp >= 1:
continue









share|improve this question
















I am trying to code player and mob attacks for a text based RPG game I am making, I have randomint set up for player and mob hitchance and crit chance but I can't figure out how to get a new integer for them every time I restart the loop, it uses the same integer it got the first time it entered the loop.



### GAME VALUES ###
class roll_dice:
def __init__(self):
self.spawn = random.randint(1,100)
self.escape = random.randint(1,100)
self.playercrit = random.randint(1,100)
self.playerhitchance = random.randint(1,100)
self.mobcrit = random.randint(1,100)
self.mobhitchance = random.randint(1,100)
roll = roll_dice()


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
orcMobSpawn()
while True:
fight_orc = input(">>> ")
if fight_orc.lower() == 'a':

### PLAYER ATTACK ###
while True:
roll.playercrit
roll.playerhitchance
if roll.playercrit <= 10 and roll.playerhitchance >= 6:
print("You crit orc for",str(userPlayer.atk * 2),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk * 2
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
print("You hit orc for",str(userPlayer.atk),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
print("You missed!")
break
elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
print("You missed!")
break
elif orcMob.hp <= 0 and userPlayer.hp >= 1:
print("Your HP:",str(userPlayer.hp))
print("You win!")
break
elif userPlayer.hp <= 0:
print("You died!")
exit()

### ORC ATTACK ###
while True:
roll.mobcrit
roll.mobhitchance
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
if roll.mobcrit <= 5 and roll.mobhitchance >= 25:
print("nOrc crit for",str(orcMob.atk * 2),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk * 2
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance >= 25:
print("nOrc hit for",str(orcMob.atk),"damage!")
userPlayer.hp = userPlayer.hp - orcMob.atk
print("Your HP",str(userPlayer.hp))
break
elif roll.mobcrit <= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
elif roll.mobcrit >= 5 and roll.mobhitchance <= 25:
print("Orc missed!")
print("Your HP:",str(userPlayer.hp))
break
if orcMob.hp <= 0 and userPlayer.hp >= 1:
break
elif orcMob.hp >= 1:
continue






python python-3.x






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 7 at 22:51







Konyer

















asked Mar 7 at 22:14









KonyerKonyer

184




184












  • I think maybe repeat of this: stackoverflow.com/questions/33806022/…

    – sit_on_a_pan_otis
    Mar 7 at 22:18











  • Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

    – E2Busy
    Mar 7 at 22:22

















  • I think maybe repeat of this: stackoverflow.com/questions/33806022/…

    – sit_on_a_pan_otis
    Mar 7 at 22:18











  • Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

    – E2Busy
    Mar 7 at 22:22
















I think maybe repeat of this: stackoverflow.com/questions/33806022/…

– sit_on_a_pan_otis
Mar 7 at 22:18





I think maybe repeat of this: stackoverflow.com/questions/33806022/…

– sit_on_a_pan_otis
Mar 7 at 22:18













Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

– E2Busy
Mar 7 at 22:22





Not 100% sure what your asking but assuming roll.playercrit and roll.playerhitchance are variables, to get a new random number you need to generate again at that part of the code. eg. roll.playerhitchance = random.randint()

– E2Busy
Mar 7 at 22:22












2 Answers
2






active

oldest

votes


















1














The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:



### GAME VALUES ###
class roll_dice:
def __init__(self):
self.spawn = random.randint(1,100)
self.escape = random.randint(1,100)
self.playercrit = random.randint(1,100)
self.playerhitchance = random.randint(1,100)
self.mobcrit = random.randint(1,100)
self.mobhitchance = random.randint(1,100)
# roll = roll_dice() # you don't need to make an instance here


### ORC SPAWN ###
if fight_walk.lower() == 'fight':
orcMobSpawn()
while True:
fight_orc = input(">>> ")
if fight_orc.lower() == 'a':

### PLAYER ATTACK ###
while True:
roll = roll_dice() # make a new instance with each loop
roll.playercrit
roll.playerhitchance
if roll.playercrit <= 10 and roll.playerhitchance >= 6:
print("You crit orc for",str(userPlayer.atk * 2),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk * 2
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
print("You hit orc for",str(userPlayer.atk),"damage!")
orcMob.hp = orcMob.hp - userPlayer.atk
print("Orc HP:",orcMob.hp)
break
elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
print("You missed!")
break
elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
print("You missed!")
break
elif orcMob.hp <= 0 and userPlayer.hp >= 1:
print("Your HP:",str(userPlayer.hp))
print("You win!")
break
elif userPlayer.hp <= 0:
print("You died!")
exit()

### ORC ATTACK ###





share|improve this answer
































    1














    Use functions like



    import random
    for x in range(10):
    print random.randint(1,101)


    use a array around for a max 100 people and generate random digits to add in your code.



    You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them



    from random import *

    items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    shuffle(items)
    print items





    share|improve this answer

























      Your Answer






      StackExchange.ifUsing("editor", function ()
      StackExchange.using("externalEditor", function ()
      StackExchange.using("snippets", function ()
      StackExchange.snippets.init();
      );
      );
      , "code-snippets");

      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "1"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55053654%2fpython-repeat-random-integer-in-while-loop%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:



      ### GAME VALUES ###
      class roll_dice:
      def __init__(self):
      self.spawn = random.randint(1,100)
      self.escape = random.randint(1,100)
      self.playercrit = random.randint(1,100)
      self.playerhitchance = random.randint(1,100)
      self.mobcrit = random.randint(1,100)
      self.mobhitchance = random.randint(1,100)
      # roll = roll_dice() # you don't need to make an instance here


      ### ORC SPAWN ###
      if fight_walk.lower() == 'fight':
      orcMobSpawn()
      while True:
      fight_orc = input(">>> ")
      if fight_orc.lower() == 'a':

      ### PLAYER ATTACK ###
      while True:
      roll = roll_dice() # make a new instance with each loop
      roll.playercrit
      roll.playerhitchance
      if roll.playercrit <= 10 and roll.playerhitchance >= 6:
      print("You crit orc for",str(userPlayer.atk * 2),"damage!")
      orcMob.hp = orcMob.hp - userPlayer.atk * 2
      print("Orc HP:",orcMob.hp)
      break
      elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
      print("You hit orc for",str(userPlayer.atk),"damage!")
      orcMob.hp = orcMob.hp - userPlayer.atk
      print("Orc HP:",orcMob.hp)
      break
      elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
      print("You missed!")
      break
      elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
      print("You missed!")
      break
      elif orcMob.hp <= 0 and userPlayer.hp >= 1:
      print("Your HP:",str(userPlayer.hp))
      print("You win!")
      break
      elif userPlayer.hp <= 0:
      print("You died!")
      exit()

      ### ORC ATTACK ###





      share|improve this answer





























        1














        The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:



        ### GAME VALUES ###
        class roll_dice:
        def __init__(self):
        self.spawn = random.randint(1,100)
        self.escape = random.randint(1,100)
        self.playercrit = random.randint(1,100)
        self.playerhitchance = random.randint(1,100)
        self.mobcrit = random.randint(1,100)
        self.mobhitchance = random.randint(1,100)
        # roll = roll_dice() # you don't need to make an instance here


        ### ORC SPAWN ###
        if fight_walk.lower() == 'fight':
        orcMobSpawn()
        while True:
        fight_orc = input(">>> ")
        if fight_orc.lower() == 'a':

        ### PLAYER ATTACK ###
        while True:
        roll = roll_dice() # make a new instance with each loop
        roll.playercrit
        roll.playerhitchance
        if roll.playercrit <= 10 and roll.playerhitchance >= 6:
        print("You crit orc for",str(userPlayer.atk * 2),"damage!")
        orcMob.hp = orcMob.hp - userPlayer.atk * 2
        print("Orc HP:",orcMob.hp)
        break
        elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
        print("You hit orc for",str(userPlayer.atk),"damage!")
        orcMob.hp = orcMob.hp - userPlayer.atk
        print("Orc HP:",orcMob.hp)
        break
        elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
        print("You missed!")
        break
        elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
        print("You missed!")
        break
        elif orcMob.hp <= 0 and userPlayer.hp >= 1:
        print("Your HP:",str(userPlayer.hp))
        print("You win!")
        break
        elif userPlayer.hp <= 0:
        print("You died!")
        exit()

        ### ORC ATTACK ###





        share|improve this answer



























          1












          1








          1







          The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:



          ### GAME VALUES ###
          class roll_dice:
          def __init__(self):
          self.spawn = random.randint(1,100)
          self.escape = random.randint(1,100)
          self.playercrit = random.randint(1,100)
          self.playerhitchance = random.randint(1,100)
          self.mobcrit = random.randint(1,100)
          self.mobhitchance = random.randint(1,100)
          # roll = roll_dice() # you don't need to make an instance here


          ### ORC SPAWN ###
          if fight_walk.lower() == 'fight':
          orcMobSpawn()
          while True:
          fight_orc = input(">>> ")
          if fight_orc.lower() == 'a':

          ### PLAYER ATTACK ###
          while True:
          roll = roll_dice() # make a new instance with each loop
          roll.playercrit
          roll.playerhitchance
          if roll.playercrit <= 10 and roll.playerhitchance >= 6:
          print("You crit orc for",str(userPlayer.atk * 2),"damage!")
          orcMob.hp = orcMob.hp - userPlayer.atk * 2
          print("Orc HP:",orcMob.hp)
          break
          elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
          print("You hit orc for",str(userPlayer.atk),"damage!")
          orcMob.hp = orcMob.hp - userPlayer.atk
          print("Orc HP:",orcMob.hp)
          break
          elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
          print("You missed!")
          break
          elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
          print("You missed!")
          break
          elif orcMob.hp <= 0 and userPlayer.hp >= 1:
          print("Your HP:",str(userPlayer.hp))
          print("You win!")
          break
          elif userPlayer.hp <= 0:
          print("You died!")
          exit()

          ### ORC ATTACK ###





          share|improve this answer















          The problem is with your roll_dice class. You have the values defined when the class initializes, but then you never update them again. Therefore self.escape or self.spawn will always be the same value after the program starts. The easiest way to solve your problem without rewriting much would be to make another instance of roll_dice() every time you want to roll the dice. Something like:



          ### GAME VALUES ###
          class roll_dice:
          def __init__(self):
          self.spawn = random.randint(1,100)
          self.escape = random.randint(1,100)
          self.playercrit = random.randint(1,100)
          self.playerhitchance = random.randint(1,100)
          self.mobcrit = random.randint(1,100)
          self.mobhitchance = random.randint(1,100)
          # roll = roll_dice() # you don't need to make an instance here


          ### ORC SPAWN ###
          if fight_walk.lower() == 'fight':
          orcMobSpawn()
          while True:
          fight_orc = input(">>> ")
          if fight_orc.lower() == 'a':

          ### PLAYER ATTACK ###
          while True:
          roll = roll_dice() # make a new instance with each loop
          roll.playercrit
          roll.playerhitchance
          if roll.playercrit <= 10 and roll.playerhitchance >= 6:
          print("You crit orc for",str(userPlayer.atk * 2),"damage!")
          orcMob.hp = orcMob.hp - userPlayer.atk * 2
          print("Orc HP:",orcMob.hp)
          break
          elif roll.playercrit >= 11 and roll.playerhitchance >= 6:
          print("You hit orc for",str(userPlayer.atk),"damage!")
          orcMob.hp = orcMob.hp - userPlayer.atk
          print("Orc HP:",orcMob.hp)
          break
          elif roll.playercrit >= 11 and roll.playerhitchance <= 5:
          print("You missed!")
          break
          elif roll.playercrit <= 10 and roll.playerhitchance <= 5:
          print("You missed!")
          break
          elif orcMob.hp <= 0 and userPlayer.hp >= 1:
          print("Your HP:",str(userPlayer.hp))
          print("You win!")
          break
          elif userPlayer.hp <= 0:
          print("You died!")
          exit()

          ### ORC ATTACK ###






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Mar 7 at 23:00

























          answered Mar 7 at 22:35









          ReedinationerReedinationer

          2,0921423




          2,0921423























              1














              Use functions like



              import random
              for x in range(10):
              print random.randint(1,101)


              use a array around for a max 100 people and generate random digits to add in your code.



              You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them



              from random import *

              items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
              shuffle(items)
              print items





              share|improve this answer





























                1














                Use functions like



                import random
                for x in range(10):
                print random.randint(1,101)


                use a array around for a max 100 people and generate random digits to add in your code.



                You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them



                from random import *

                items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                shuffle(items)
                print items





                share|improve this answer



























                  1












                  1








                  1







                  Use functions like



                  import random
                  for x in range(10):
                  print random.randint(1,101)


                  use a array around for a max 100 people and generate random digits to add in your code.



                  You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them



                  from random import *

                  items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                  shuffle(items)
                  print items





                  share|improve this answer















                  Use functions like



                  import random
                  for x in range(10):
                  print random.randint(1,101)


                  use a array around for a max 100 people and generate random digits to add in your code.



                  You can also use a array to create random umber structure and then use the numbers to be shuffled and added as you create them



                  from random import *

                  items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                  shuffle(items)
                  print items






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Mar 7 at 23:01









                  Vaishali

                  22.5k41438




                  22.5k41438










                  answered Mar 7 at 22:36









                  Andre HapertAndre Hapert

                  213




                  213



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55053654%2fpython-repeat-random-integer-in-while-loop%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      AWS Lex not identifying response if by a variable The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceEnforcing custom enumeration in AWS LEX for slot valuesHow to give response based on user response in Amazon Lex?Intercepting AWS Lambda Response to a AWS Lex QueryLex chat bot error: Reached second execution of fulfillment lambda on the same utteranceamazon lex showing invalid responseLambda response send back to Lex slot?Response card in Amazon lexAmazon Lex - Lambda response return HTML to botHow can I solve 424 (Failed Dependency) (python) obtained from Amazon lex?

                      Алба-Юлія

                      Захаров Федір Захарович