首页 > 解决方案 > 如何使计数器上升到某个值然后重置为 0?

问题描述

我需要创建一个内部计数器,使其进入设定的周期,然后重置为 0。现在因为每次都会调用该类并且__init__它使self.time始终等于 0,并且我永远不会将颜色变为“R” . 我不允许导入任何东西或添加其他功能。

我尝试了各种方法,但没有任何积极的结果。我仍然只能得到一切都是'G'或无效的语法。

class Light:
    def __init__(self, period, green_period):
        self.time = 0
        self.period = period
        self.color = 'G'
        if self.time > green_period:
            self.color = 'R'
        if self.time > self.period:
            self.time = 0

    def __str__(self):
        return f'({self.color})'

    def step(self):
        self.time += 1

    def is_green(self):
        if self.color == 'G':
            return True
        else:
            return False

要尝试此代码,我将使用:

def demo_light():
    a_light = Light(7, 3)
        for i in range(15):
            print(i, a_light,
                a_light.is_green())
            a_light.step()

demo_light()

这是我期待的输出:

0 (G) True
1 (G) True
2 (G) True
3 (R) False
4 (R) False
5 (R) False
6 (R) False
7 (G) True
8 (G) True
9 (G) True
10 (R) False
11 (R) False
12 (R) False
13 (R) False
14 (G) True

这就是我得到的:

0 (G) True
1 (G) True
2 (G) True
3 (G) True
4 (G) True
5 (G) True
6 (G) True
7 (G) True
8 (G) True
9 (G) True
10 (G) True
11 (G) True
12 (G) True
13 (G) True
14 (G) True

标签: python

解决方案


您的颜色状态是time和的函数green_period。你可以is_green这样写:

def is_green(self):
    return self.time % self.period < self.green_period

只需确保将文件存储green_periodself.green_period.

但是,因为color它是一个函数,所以你可以将它变成一个函数。所以完整的课程将是:

class Light:
    def __init__(self, period, green_period):
        self.time = 0
        self.period = period
        self.green_period = green_period

    def __str__(self):
        return f'({self.color})'

    def color(self):
        return 'G' if self.time % self.period < self.green_period else 'R'

    def step(self):
        self.time += 1

    def is_green(self):
        return self.color() == 'G'

如果在其他地方不需要它,也可以旋转时间(而不是只增加它)。

您目前遇到的问题是您永远不会重新评估颜色。


推荐阅读