我希望能够缩短python中的代码,我该怎么做?

时间:2020-02-06 15:52:40

标签: python bots discord discord.py

我正在使用discord.py在python中制作一个discord机器人。我想知道如何将这个功能缩短到更少的行。此功能接受一个命令(例如-cf红色),并翻转带有红色和蓝色两面的硬币。当结果存储在代码中时,向执行硬币翻转的人员发送DM,同时在聊天中发送结果。

@bot.command(aliases=['coinflip'])
async def cf(ctx, *, cfchoice):
    cfResults = random.choice(['red','blue'])
    userId = ctx.message.author.id
    user = bot.get_user(userId)

    time.sleep(1)

    # If the user wins the coinflip
    if cfchoice == cfResults:
        # Send result in the channel
        await ctx.send(f'It is {cfResults}!')
        # Send a DM to the person
        await user.send('You won on coinflip! Well done.')

    # If the user loses the coinflip
    elif cfchoice != cfResults:
        # Send result in the channel
        await ctx.send(f'It is {cfResults}!')
        # Send a DM to the person
        await user.send('You lost on coinflip! Good luck next time.')

2 个答案:

答案 0 :(得分:1)

如果您在if的两个分支中都有相同的行,则很好地暗示您可以将其完全从if中取出。

@bot.command(aliases=['coinflip'])
async def cf(ctx, *, cfchoice):
    cfResults = random.choice(['red','blue'])
    userId = ctx.message.author.id
    user = bot.get_user(userId)

    time.sleep(1)

    await ctx.send(f'It is {cfResults}!')
    await user.send('You won on coinflip! Well done.' if cfchoice == cfResults else
                    'You lost on coinflip! Good luck next time.')

也就是说,通常,此类问题不是Stack Overflow上的热门话题。您应该询问有关特定问题的问题; “我怎样才能使它变得更短?”,而没有指出您认为哪个特定要素太冗长(以及您为什么这样认为,以及为什么使它更短实际上是实用要做的事情- -由于我们的规则将网站限制在实用范围内,因此可以回答问题,并且对于简洁性(而不是可读性或可维护性)进行优化本质上是不切实际的)。

答案 1 :(得分:0)

我真的不知道为什么要尝试这样做,该功能看起来很可靠。您唯一可以做的就是将'elif'更改为'else',因为如果if语句不正确,它将始终以任何方式执行。此外,由于命名约定,您应该对python使用snake_case而不是camelCase:

%load_ext autoreload
%autoreload 2