如何在循环外访问变量并随后更改变量

时间:2019-02-08 00:35:20

标签: python while-loop

我正在为我目前出于娱乐目的而开发的游戏开发一个遭遇系统。为了在完成游戏之前构建系统,统计信息和medkit只是占位符,除此问题外,它的功能还不错。我希望在循环内访问medkits变量,然后再说(如果有第二次遭遇),以便将该变量更改为正确的数字。例如,如果我在第一次接触中使用medkit,则在下一次接触中应该少用一个。不知道该怎么做,因为这是我制作正版游戏的第一次尝试。任何功能性解决方案都很棒!

我还要补充一点,我知道第3个选项不起作用并且敌人还没有反击,但这对我来说没有问题。我只想要这个特定问题的答案。

charisma = int(60)
strength = int(25)
endurance = int(40)
intelligence = int(70)
capacity = int(50)
from random import randint
medkits = 2

def encounter(enemy):
  print("Engaging "+enemy+"!")
  print()
  y = 10 + (strength*.10)
  enhealth = int(100)
  enhealth = int(enhealth-y)
  health = int(100)
  med = int(medkits)
  while True:
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if "1" in enc:
      x = randint(0, 100)
      if x < 80:
        enhealth = int(enhealth-y)
        print()
        print("You hit "+enemy+" for "+str(y)+" damage!")
        print()
      else:
        print()
        print("Miss!")
        print()
    elif "2" in enc:
      if med > 0:
        print()
        print("You used a medkit!")
        print()
        health = health+30
        med = med-1
        print("Health is at "+str(health))
        print()
      else:
        print("You're out of medkits!")
    if enhealth <= int(0):
      print(enemy+" has been defeated! Well done!")
      break

encounter("Cornelius")

2 个答案:

答案 0 :(得分:0)

每次调用遇到函数时,您的变量med都会设置为medkits。 例如,如果您调用遭遇(“ Cornelius”)并使用1 medkit,然后调用遭遇(“ Cornelius”),则med将再次设置为int(medkits)。当前,每个函数调用的med设置为2。我修复了您的代码,现在它可以实现您想要的功能。很棒的游戏,并保持编码!

charisma = int(60)
strength = int(25)
endurance = int(40)
intelligence = int(70)
capacity = int(50)
from random import randint
med = 2

def encounter(enemy):
  print("Engaging "+enemy+"!")
  print()
  y = 10 + (strength*.10)
  enhealth = int(100)
  enhealth = int(enhealth-y)
  health = int(100)
  global med
  while True:
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if "1" in enc:
      x = randint(0, 100)
      if x < 80:
        enhealth = int(enhealth-y)
        print()
        print("You hit "+enemy+" for "+str(y)+" damage!")
        print()
      else:
        print()
        print("Miss!")
        print()
    elif "2" in enc:
      if med > 0:
        print()
        print("You used a medkit!")
        print()
        health = health+30
        med = med-1
        print("Health is at "+str(health))
        print()
      else:
        print("You're out of medkits!")
    if enhealth <= int(0):
      print(enemy+" has been defeated! Well done!")
      break

encounter("Cornelius")
encounter("Cornelius")

答案 1 :(得分:0)

解决此问题的一种方法是在函数外部定义所有初始值(已经完成),然后将它们作为函数的其他变量传递,并使函数递归。在每次运行结束时使用return语句。如果敌人还活着并且您想再次运行该函数,则return encounter(enemy, y, enhealth, health, med)命令只需再次调用该函数,并传递之前更新的值即可。当敌人死亡时,一个简单的return一起退出该功能。

from random import randint

def encounter(enemy, y, enhealth, health, med):
    print("Engaging "+enemy+"!\n")
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if enc == '1':
        if randint(0,100) < 80:
            enhealth = int(enhealth - y)
            print("\nYou hit "+enemy+" for "+str(y)+" damage!\n")
        else:
            print("\nMiss!\n")
    elif enc == '2':
        if med > 0:
            print("\nYou used a medkit!\n")
            health += 30
            med -= 1
            print("\nHealth is at " + str(health) + "\n")
        else:
            print("\nYou're out of medkits!\n")
    if enhealth <= 0:
        print(enemy + " has been defeated! Well done!")
        return
    return encounter(enemy, y, enhealth, health, med)


strength = int(25)
y = 10 + (strength*.10)
enhealth = int(100 - y)
health = int(100)
med = 2
enemy = "Cornelius"
encounter(enemy, y, enhealth, health, med)

不过,您可能不想考虑跟踪所有这些变量,而是要考虑将所有统计信息存储在Python字典中以传入和传出函数。这样,如果您已经完成return,但您希望保留相同的结果统计信息以传递到新函数中,则也可以encounter()字典。