0

I am relatively new to programming, so don't be surprised if there are some minor hiccups in the code, but the problem that is happening is that this code seems to loop itself, the whole thing and I don't understand why. I looked at the actual code that runs this function but it seemed fine. So I cannot find any error in this code that makes it loop itself. (If the problem isn't in this code then the looping code it beneath it)

def thebeast(yourhp):
  foe = "Thisisirrelevant"
  enemy = int(random.randint(1,4))
  if enemy == 1:
    foe = "skeleton"
  elif enemy == 2:
    foe = "man with crazy eyes"
  else:
    foe = "dog, a big and scary dog"
  monsteract = 1
  dmg = 0
  print "-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~"
  time.sleep(0.1)
  print "           C O M B A T"
  time.sleep(0.1)
  print "-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~-=~"
  time.sleep(0.1)
  print "You encounter a " + foe
  time.sleep(0.5)
  while monsteract == 1:
    comb = str(input("What do you do to the " + foe + "?" + " Do you feel     like jabbing it or stabbing it?"))
    if comb in ["s", "S", "Stab", "STAB", "stab"]:
      if spear == 1:
        dmg = int(random.randint(1,4))
      elif sword == 1:
        dmg = int(random.randint(1,3))
      else:
        dmg = int(random.randint(1,5))
    elif comb in ["j", "J", "Jab", "JAB", "jab"]:
      if spear == 1:
        dmg = int(random.randint(1,3))
      elif sword == 1:
        dmg = int(random.randint(1,4))
      else:
        dmg = int(random.randint(1,5))
      if dmg == 1:
        print "You slay the " + foe + " with graceful ease"
        time.sleep(0.5)
        monsteract = 0
      else:
        enemydmg = int(random.randint(1,3))
        print "The " + foe + " strikes you for " + str(enemydmg) + " damage"
        time.sleep(0.3)
        print "That didn't work out as planned, but you pull yourself together and prepare to strike the " + foe
        time.sleep(0.3)
        yourhp = yourhp - enemydmg
        if yourhp < 0:
          yourhp = 0
        print "You have " + str(yourhp) + " health left"
        time.sleep(0.3)
        if yourhp < 1:
          print "The " + foe + " has slain you, well done, you're dead, on the bright side the innocent "
          print foe + " is still alive! Every life counts, even that of a " + foe + "."
          monsteract = 0
  return thebeast(yourhp)

Looping code:

def randomevents(yourhp):
    turn = 10
    while turn > 0:
        time.sleep(0.1)
        happening = int(random.randint(1,6))
        time.sleep(0.1)
        if yourhp < 1:
            turn = 0
            print "You managed to escape the dungeon, by dying that is"
        elif happening == 1:
            turn = turn - 1
            thebeast(yourhp)
        elif happening == 2:
            item(sword, spear)
            turn = turn - 1
        elif happening in [3, 4, 5]:
            friend()
            turn = turn - 1
    print "Well done! You escaped the dungeon! (Either by running out of it, or by having your soul sent to another world)"
    useless = str(input("Are you satsified with yourself?: "))

Thank you!

7
  • 1
    Can you clarify what you mean by "the code loop itself"? What section if code is run again? You are calling thebeast several times (if happening is equal to 1), is that what you are referring to? Commented Oct 20, 2016 at 11:09
  • Where are the other parts of the code? sword, spear? friend() ? Commented Oct 20, 2016 at 11:10
  • Sword spear and friend are irrelevant parts, they are part of the whole program but wouldn't affect the code displayed, which is where the looping problem is. When I say it loops itself, I mean that as soon as "thebeast(yourhp)" runs once, it runs forever. Although the code should random switch between friend(), thebeast() and item(). In addition the "turn" variable's function doesn't seem to work. Because the code is looped without an end. Commented Oct 20, 2016 at 11:15
  • 1
    Have you read this ? Quote: Include just enough code to allow others to reproduce the problem. For help with this, read How to create a Minimal, Complete, and Verifiable example Commented Oct 20, 2016 at 12:36
  • 1
    Hello and welcome to StackOverflow. Please take some time to read the help page, especially the sections named "What topics can I ask about here?" and "What types of questions should I avoid asking?". And more importantly, please read the Stack Overflow question checklist. You might also want to learn about Minimal, Complete, and Verifiable Examples. Commented Oct 20, 2016 at 13:19

1 Answer 1

2

Look at your return statement at the end of thebeast. At the end of the function, you call the function again! Since this happens every time you call it, you will never stop calling it (until you hit the maximum recursion depth). Considering that you don't capture the return value of thebeast in randomevents, you should consider it not returning anything.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.