【问题标题】:Python: Alternative while loop with telegram botPython:带有电报机器人的替代while循环
【发布时间】:2019-08-16 14:33:10
【问题描述】:

我使用此代码从列表“my_list”中获取随机行,我使用下面的 while 循环创建,如果我在电报中输入 /start 与我的机器人交谈,则该循环正在工作。

唯一的问题是我的电脑卡住了,因为这个无限循环可能会占用我的全部内存。而且我不喜欢这个循环,即使我不调用它也会持续工作。

没有 while 循环的问题是它读取代码一次,每次在电报中键入 /start 时都会得到相同的行。

我尝试了创建函数之类的方法,如果从电报中调用“开始”,则将其传递给 for 循环,但没有结果,因为这对我来说有点太高级了。

如果在没有 while 循环的情况下在电报中键入 /start 时,我希望有人可以向我展示从 my_list 获取新行的解决方案:')

import time
import urllib.request as urllib
import json
import html
import random

from telegram.ext import Updater
from telegram.ext import CommandHandler

updater = Updater(token='<token>')
dispatcher = updater.dispatcher

while True:
    my_list = ['\"this is line1\"',
        '\"this is line2\"',
        '\"this is line3\"',
        '\"this is line4\"',
        '\"this is line5\"'
        ]

    my_random = random.choice(my_list)

    def func1():
        return my_random

    def start(bot, update):
        bot.send_message(chat_id=update.message.chat_id, text=func1())

    my_handler = CommandHandler('start', start)

    dispatcher.add_handler(my_handler)

    updater.start_polling()

【问题讨论】:

    标签: python-3.x for-loop while-loop python-telegram-bot


    【解决方案1】:

    如果你不需要使用while循环,你只需要这样编码:

    import time
    import urllib.request as urllib
    import json
    import html
    import random
    
    from telegram.ext import Updater
    from telegram.ext import CommandHandler
    
    updater = Updater(token='token')
    dispatcher = updater.dispatcher
    
    def func1():
        my_list = ['\"this is line1\"',
            '\"this is line2\"',
            '\"this is line3\"',
            '\"this is line4\"',
            '\"this is line5\"'
            ]
    
        return random.choice(my_list)
    
    def start(bot, update):
        bot.send_message(chat_id=update.message.chat_id, text=func1())
    
    my_handler = CommandHandler('start', start)
    
    dispatcher.add_handler(my_handler)
    
    updater.start_polling()
    

    【讨论】:

      【解决方案2】:

      谢谢 Arian,它有效。我在周末找到了另一个解决方案,方法是删除 func1 函数并在 start 函数中直接指向 my_list:text=random.choice(my_list)。 我也有无法迭代的代码,从 API 获取随机文本。我不得不把我的代码放在 start 函数中。我也可以为 my_list 执行此操作。

      这是我最终得到的代码:

      import time
      import urllib.request as urllib
      import json
      import html
      import random
      
      from telegram.ext import Updater
      from telegram.ext import CommandHandler
      
      updater = Updater(token='<token>')
      dispatcher = updater.dispatcher 
      
      my_list = ['\"this is line1\"',
      '\"this is line2\"',
      '\"this is line3\"',
      '\"this is line4\"',
      '\"this is line5\"'
      ]
      
      def start(bot, update):
          bot.send_message(chat_id=update.message.chat_id, text=random.choice(my_list))
      
      my_handler = CommandHandler('start', start)
      
      dispatcher.add_handler(my_handler)
      
      updater.start_polling()
      

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 1970-01-01
        • 2020-10-28
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 2022-01-01
        • 2021-02-21
        • 1970-01-01
        相关资源
        最近更新 更多