当我试图在discord.py中使用命令时,标题中的错误是给我的,命令是!sell my code:
if "!sell" in message.content:
Rndm_mon = (random.randrange(1000,5000))
with open('income.json', 'r') as f:
h = [json.load(f)]
entry = h[(len(f'| {message.author.name} '))] = (Rndm_mon)
h.append(entry)
with open('income.json', 'w') as f:
json.dump(h, f, indent=4)
saveJson(h, "income.json")
await message.channel.send('You Earned ' + Rndm_mon + ' Dollars from selling')
错误是IndexError:列表分配索引超出范围,并引用该部分的问题,我如何修复此错误?入口= h [(len (f ' | {message.author.name } '))] = ( Rndm_mon)
代码应该生成一个随机数,然后将该数字添加到json文件中,然后将json文件中的前一个值与新的值相加,最后将旧余额和新钱的最终值加在一起,用于一种银行系统
我的income.json
文件看起来像这样
{
"| name ": "1716",
"| name_1 ": "4291",
"| name_2 ": "4778",
"| name_3 ": "1254"
}
通过回答可能更容易解决这个问题。
这适用于值为数字的JSON文件。在你的版本中,它们是字符串,但这会使解决方案更难处理,因为你必须将字符串转换为数字才能对它们进行数学运算。
例如,这是JSON应该看起来像什么,Python的json
模块将尝试在默认情况下写,因为你基本上有一个str: int
的映射为你的dict
键。
{
"| name ": 1716,
"| name_1 ": 4291,
"| name_2 ": 4778,
"| name_3 ": 1254
}
现在,这是你的代码的一个版本,根据我们在注释中讨论的,可能做了你想要的。
请注意,所有内容的加载和修改方式都发生了一些变化。
if "!sell" in message.content:
k = f"| {message.author.name} "
val = random.randrange(1000, 5000)
# open entire file for reading and writing
with open("income.json", "r+") as f:
incomes = json.load(f)
# Either add the value to the user's balance
# or, if they don't exist yet, create the entry
# with the val
try:
incomes[k] += val
except KeyError:
incomes[k] = val
# seek to beginning and rewrite file
f.seek(0)
json.dump(incomes, f, indent=4)
f.truncate()
await message.channel.send(f"You Earned {val} Dollars from selling")
如果你需要转换你的JSON文件…
import json
with open("income.json", "r+") as f:
d = json.load(f)
n = {k: int(v) for k, v in d.items()}
f.seek(0)
json.dump(n, f, indent=4)
f.truncate()