我需要在 Python 中为 discord bot 创建一个命令,它会按照这个算法工作:当命令被执行时,bot 会从列表中随机显示一条消息,然后这条消息的内容将是以某种方式检查,如果它与条件匹配,则更改将应用于变量。我通过为列表中的这个句子检查一个带有随机句子的变量,然后更改机器人稍后将输出的另一个 membercount 变量来做到这一点。但是代码不起作用,出现错误提示您无法从命令中为局部变量 membercount
赋值。我尝试放置 if for 命令,但未找到 konfeticount
。仍然需要将它从命令中取出,以便它自动更新,我将它延迟放入 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)
答案 0 :(得分:1)
您的问题出现是因为 membercount
是一个全局变量,但在 Python 中全局变量被设计为只读。因此,当您尝试分配 membercount += 220
时,Python 所做的是创建一个名为 membercount
的新local 变量。
从函数内部修改全局变量的正确方法是将其声明为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)