【问题标题】:How to run python function as many times as user input + read valid lines?如何在用户输入+读取有效行时多次运行python函数?
【发布时间】:2022-01-26 00:16:36
【问题描述】:

您好,我有这个问题很长时间了,不知道如何处理它。我想像这样编程运行某事:

  • 用户写入命令与参数(数量)不一致
  • discord 函数将调用带有书面参数的 read_coupon 函数
  • read_coupon 函数将打开并读取行(取决于数量)并从 txt 文件中返回

atm 我的代码忽略用户输入,只返回 kody.txt 中的第一行

@client.command()
 async def kody (ctx, amount):
     await ctx.send(read_coupon(int(amount)))   
def read_coupon(amount):
    x_range = range(0,amount,1)
    kody_open = open("kody.txt","r")
    for line_kod in kody_open:
        kody_lista.append(line_kod)
    for x in x_range:
        for element in kody_lista:
            return element
kody.txt
NLZGQEJ32W
NLBH9LBZVP
NLB6DRBZ4Q
NLJ8GWAC8M
NLBH9LBZVP
NLB6DRBZ4Q
NLJ8GWAC8M

【问题讨论】:

    标签: python discord.py chatbot


    【解决方案1】:

    你可以这样做:

    def read_coupon(amount):
        kody_open = open("kody.txt","r")
        kody_lista = []
        for line_kod in kody_open:
            kody_lista.append(line_kod)
        kody_open.close()
        result = ''
        for i in range(min(len(kody_lista),amount)):
            result += kody_lista[i]
        return result
    

    您需要记住close the file,以防python无法自动关闭文件。您还需要在金额和列表之间添加一个最小检查,以防指定的金额超出列表的长度。

    或者,您可以使用上下文管理器执行类似的操作,该管理器将在退出上下文时自动关闭文件。

    def read_coupon(amount):
        result = ''
        with open("kody.txt","r") as f:
            for line in f:
                result += line
                amount -= 1
                if amount == 0: break
        return result
    

    【讨论】:

    • 好电话,仍在进行一些修改。
    • 第一个不适合我,第二个很好。谢谢!
    • 有道理,复制的代码没有kody_lista的实例化。
    • 如何从kody.txt删除打印的优惠券?我也想在这个循环中这样做。
    • 您可能需要单独执行此操作。有几种方法可以做到这一点,但您可以读取文件中的其余内容并将其放入列表/字符串中。退出上下文后,使用新的上下文管理器将其写回到文件中(带有with 的行)。
    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 2020-01-31
    • 2013-10-16
    • 2020-09-06
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多