【问题标题】:Getting last character of string not working获取字符串的最后一个字符不起作用
【发布时间】:2021-06-14 01:40:34
【问题描述】:

为我的机器人设置一个命令,该命令从文本文件中随机选择一行并将其分配给一个变量。我在每一行的末尾都有一个数字(我的行在这里.3)。代码应该做的是将行的最后一个字符(现在是分配给变量的字符串)分配给变量。

问题是,它只是不这样做。好吧,它只执行到文本文件的最后一行。 random.choice() 函数得到哪一行并不重要,它总是只在文本文件的最后一行起作用

@commands.command()
async def slap_t(self, ctx, member : discord.Member):

    with open('docs/slap_t.txt') as f:

        slap_responses = f.readlines()

        f.close()

        slap= random.choice(slap_responses)

        gif_num = slap[-1]

        print(f"response: {slap}")
        print(f"gif num = {gif_num}")

【问题讨论】:

  • 可能是因为其他行末尾包含\n。请使用 slap_responses = f.read().splitlines() 而不是 slap_responses = f.readlines() 重试。
  • @j1-lee \n 是什么意思?你的意思是他们在行尾有\n
  • Yes readlines() 不会从每一行中删除换行符(通常称为\n)。 slap[-1] 会返回这个换行符,你可能认为这是一个“错误”。
  • @j1-lee 实际上你刚刚解决了这个问题。您能否将其设为答案,以便我将其标记为已回答。

标签: python python-3.x file discord discord.py


【解决方案1】:

这是因为slap_responses 中的其他行在末尾包含\n(换行符)。请使用 slap_responses = f.read().splitlines() 而不是 slap_responses = f.readlines() 重试。这将从每行中删除尾随换行符,并将这些行存储在列表slap_responses中。

readlines() 不会从每一行中删除\n。因此,在您的代码中 slap[-1] 将返回这个换行符,这可能不是您想要的。

【讨论】:

  • 如何去掉最后的数字?
  • 我不知道你指的是什么号码。我的回答是基于猜测,因为您没有提供可重现的示例。指定确切情况后,您可能会获得完整的答案,并在原始帖子中包含其他问题。
  • 数字只是字符串中的一个字符(这里是我的字符串3)。如何删除最后一个字符(数字)?
  • “删除”是什么意思?那是模糊的。你的意思是给定slap = 'my string here3',在removal之后你想要slap == 'my string here'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2011-08-17
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多