我正在尝试创建一个乘以所有参数的命令

时间:2021-04-21 19:38:12

标签: python discord discord.py

这是我目前拥有的代码:

@client.command()
async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
    await ctx.send(Number)

但是每次您将两个以上的参数相乘时它都会添加 2 个 0,我也希望它只打印最后一个答案而不是每个参数。

2 个答案:

答案 0 :(得分:2)

async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
    await ctx.send(Number)

我认为您不需要在 for 循环中使用 await。把它从循环中去掉,你应该有答案。

@client.command()
async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
  await ctx.send(Number)

答案 1 :(得分:0)

您在 ctx.send(Number) 循环的每次迭代中都在等待 for

@client.command()
async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
    await ctx.send(Number) # This line is inside of the loop
                           # hence running on every iteration

相反,将 await ctx.send(Number) 移到循环之外,它只会打印最终的 Number 值。

@client.command()
async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
  await ctx.send(Number)

如果我们用

测试这个
def Q1(args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
    #await ctx.send(Number)
  print(Number)
    
Q1([ 2, 3, 4, 5, 6 ])

它返回720.0。我假设通过“每次将 2 个以上的参数相乘时添加 2 个 0”,您指的是 .0 之后的 720。这是因为 Number 变量是一个浮点值。您可以通过格式化 Number 来删除它。

@client.command()
async def Q1(ctx, *args):
  Number = 1
  for arg in args:
    Number = Number * float(arg)
  await ctx.send('{:.0f}'.format(Number))

这会将 Number 舍入到零个小数位,呈现整数值并使用上一个示例中的数字返回 720