首页 > 解决方案 > 在 discord.py 命令中更改比较语句中的变量

问题描述

我需要在 Python 中为一个不和谐的 bot 做一个命令,它会按照这个算法工作:当命令执行时,bot 会从列表中随机显示一条消息,然后会检查这条消息的内容。方式,如果它匹配条件,更改将应用​​于变量。我通过在列表中为这个句子检查一个带有随机句子的变量,然后更改机器人稍后将输出的另一个成员计数变量来做到这一点。但是代码不起作用,出现一个错误,提示您无法membercount从命令为局部变量赋值。我试图将 if 放置为一个命令,但 thenkonfeticount没有找到。它仍然要从命令中取出,以便它自动更新,我把它放在while True循环延迟,但没有任何结果。请帮我处理这个问题。提前致谢!编码:

membercount = 0

job = ['Вы проработали в пиццерии и испекли 40 пицц за что получили **220** Монет.', 'Вы проработали мойщиком окон и получили **190** Монет.', 'Вы проработали кассиром в ларьке с мороженным и получили **100** Монет', 'Вы проработали мойщиком посуды в элитном ресторане и получили **280** Монет.', 'Вы проработали на стройке нося кирпичи и получили **230** Монет.', 'Вы проработали установщиком окон и получили **310** Монет.']

@bot.command()
async def j(ctx):
    konfeticount = str(random.choice(job))

    if konfeticount == job[0]:
        membercount += 220

    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} {konfeticount}", title = 'Работа')
    await ctx.send(embed = embed)

# Balance
@bot.command()
async def ballance(ctx):
    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} Ваш баланс - **{membercount}**", title = 'Баланс')
    await ctx.send(embed = embed)

标签: pythondiscord.py

解决方案


出现您的问题是因为membercount它是一个全局变量,但在 Python 中,全局变量被设计为read only。因此,当您尝试分配membercount += 220Python 正在执行的操作时,会创建一个名为membercount.

从函数内部修改全局变量的正确方法是将其声明为global,因此您的代码应如下所示:

membercount = 0

job = ['Вы проработали в пиццерии и испекли 40 пицц за что получили **220** Монет.', 'Вы проработали мойщиком окон и получили **190** Монет.', 'Вы проработали кассиром в ларьке с мороженным и получили **100** Монет', 'Вы проработали мойщиком посуды в элитном ресторане и получили **280** Монет.', 'Вы проработали на стройке нося кирпичи и получили **230** Монет.', 'Вы проработали установщиком окон и получили **310** Монет.']

@bot.command()
async def j(ctx):
    global membercount   # declare membercount to be a global variable
    konfeticount = str(random.choice(job))

    if konfeticount == job[0]:
        membercount += 220  # here we assign a value to the global variable membercount

    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} {konfeticount}", title = 'Работа')
    await ctx.send(embed = embed)

# Balance
@bot.command()
async def ballance(ctx):
    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} Ваш баланс - **{membercount}**", title = 'Баланс')
    await ctx.send(embed = embed)

推荐阅读