class PlayerAttributes:
        inventory = []
        def __init__(self, name, inventory):
            self.name = name
            self.inventory = inventory # LIST
    class Item:
        def __init__(self, item_name, damage):
            self.item_name = item_name
            self.damage = damage

class Weapons(Item):
    weapon_1 = Item("Me Sword", 100)


Player_1 = PlayerAttributes("Bob", [])

def get_name():
    Player_1.name = input("Enter name here: ").capitalize()
    commands()

def stats():
    print("Name = " + str(Player_1.name), "\n",
          "Inventory: ")
    for x in Player_1.inventory:
        print(str(x.item_name))

def commands():
    prompt = None
    prompt_choices = {"stats", "quit", "give"}
    while prompt not in prompt_choices:
        prompt = input("Enter Command: ").lower()
    if prompt == "stats":
        stats()
        commands()
    elif prompt == "quit":
        quit()
    elif prompt == "give":
        Player_1.inventory.append(Weapons.weapon_1)
        commands()

get_name()

PROBLEM

我现在通过在if语句中调用"commands()"返回"prompt"的while循环,但被告知这是一个递归,没有必要,而且它有一个增加调用堆栈的副作用...

QUESTION

我应该怎么做??

Extra

它将如何增加调用堆栈?

推荐答案

可以使用无限循环.不要让get_namecommands调用commands,try 在代码末尾添加以下内容:

get_name()

while True:
    commands()

并从代码中删除所有其他调用commands().

Python相关问答推荐

判断两极中N(N 2)列水平是否相等

从多行文本中提取事件对

不同数据类型的Python成员变量不会在具有相同优先级的不同线程中更新

在Docker中运行HAProxy时无法获得503服务

Docker-compose:为不同项目创建相同的容器

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

比较两个二元组列表,NP.isin

即使在可见的情况下也不相互作用

'discord.ext. commanders.cog没有属性监听器'

使用miniconda创建环境的问题

无法通过python-jira访问jira工作日志(log)中的 comments

我对我应该做什么以及我如何做感到困惑'

Scrapy和Great Expectations(great_expectations)—不合作

如何在Python中找到线性依赖mod 2

当我try 在django中更新模型时,模型表单数据不可见

CommandeError:模块numba没有属性generated_jit''''

Django admin Csrf令牌未设置

为什么if2/if3会提供两种不同的输出?

pandas:对多级列框架的列进行排序/重新排序

导入错误:无法导入名称';操作';