类中的循环否定了它之前的代码

时间:2017-04-18 08:41:38

标签: python python-2.7 python-3.x

在上一个问题中,问题是如何实现一个条件循环(一个简单的for循环)来影响已解决的onMessage事件调用函数。但是,我目前的问题是尝试将时间作为条件循环中的决定因素。

目前,代码运行但似乎只执行了重新检查时间的while循环,忽略了之前的代码。我怀疑问题是在我放置时间重新检查循环的位置?

对此问题的任何明确表示赞赏!

import ch
import time

class bot(ch.RoomManager):
    timeleft = 0
    starttime = 0

    def onMessage(self, room, user, message):
        print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body))
        if 100 >= timeleft >= 1:
            print('success')
        else:
            print('fail')

    loop = 1
    while loop == 1 :
        timeleft = starttime - int(time.clock())
        if timeleft <=0:
            timeleft = 200
            starttime = 200

rooms = ["testgroup444"]
username = "user"
password = "name"

bot.easy_start(rooms,username,password)

为了清楚使用的方法,可以在此处找到整个ch.py​​库:https://pastebin.com/8ukS4VR1

1 个答案:

答案 0 :(得分:0)

我认为您仍然遇到Python语法问题。在Python中,空格非常重要,因为它定义了范围。编写代码的方式是,在定义类之前,在启动任何内容之前执行while循环。

此外,代码进入无限循环,因为while loop == 1将始终为True。这就是您看到代码卡住的原因。从评论中的讨论中,我想你想要写一些类似的东西:

import ch
import time
import enum

class State(enum.Enum):
    idle = 0
    nominating = 1
    voting = 2
    watching = 3

class bot(ch.RoomManager):

    state = State.idle
    movie_length = 20

    def updateState(self):

        if self.state in [State.idle, State.nominating]:
            self.state = State.voting
            timeout = 10
        elif self.state == voting:
            self.state = State.watching
            timeout = self.movie_length - 15
        else: # if self.state == watching
            self.state = State.nominating
            timeout = 15

        self.setTimeout(timeout*60, bot.updateState, self)

    def onConnect(self, room):
        # Redirect through event loop, not strictly nessecary
        self.setTimeout(0, bot.updateState, self)

    def onMessage(self, room, user, message):

        print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body))
        print("Current state is {0}".format(self.state))

rooms = ["testgroup444"]
username = "user"
password = "name"

bot.easy_start(rooms,username,password)

这里,使用ch(bot)类中定义的setTimeout方法,以允许在特定时间传递消息。每次超时都会更新状态。然后,所有内部方法都可以使用实际状态,例如在onMessageupdateState

由于我不使用聊天网络或客户端,我不能保证解决方案有效。