Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使计数器上升到某个值,然后重置为0?_Python - Fatal编程技术网

Python 如何使计数器上升到某个值,然后重置为0?

Python 如何使计数器上升到某个值,然后重置为0?,python,Python,我需要制作一个内部计数器,该计数器进入设置的周期,然后重置为0。现在,因为类每次都被调用,\uuuu init\uuuuu它使得self.time始终等于0,我永远不会得到“R”的颜色。我不允许导入任何内容或添加其他函数 我尝试过各种方法,但都没有显示出任何积极的结果。我仍然只能得到要么所有东西都是'G'要么语法无效 class Light: def __init__(self, period, green_period): self.time = 0 s

我需要制作一个内部计数器,该计数器进入设置的周期,然后重置为0。现在,因为类每次都被调用,
\uuuu init\uuuuu
它使得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

您的颜色状态是
时间
绿色周期
的函数。你可以这样写
是绿色的

def is_green(self):
    return self.time % self.period < self.green_period
如果其他地方不需要时间,也可以旋转时间(而不是只增加时间)


您当前遇到的问题是您从未重新评估颜色。

您的颜色状态是时间和绿色周期的函数。你可以这样写
是绿色的

def is_green(self):
    return self.time % self.period < self.green_period
如果其他地方不需要时间,也可以旋转时间(而不是只增加时间)


您目前的问题是,您从未重新评估颜色。

我不确定您的问题是什么,但我认为以下内容可能会有所帮助。我将检查时间和颜色变化的代码移动到step方法,因为只有在创建对象时才会调用init方法,因此不会再次检查颜色

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

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

def step(self):
    self.time += 1
    self.color = 'G'
    if self.time > self.green_period:
        self.color = 'R'
    if self.time > self.period:
        self.time = 0



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 (R) False
8 (G) True
9 (G) True
10 (G) True
11 (R) False
12 (R) False
13 (R) False
14 (R) False

我不太清楚你的问题是什么,但我认为以下几点可能会有所帮助。我将检查时间和颜色变化的代码移动到step方法,因为只有在创建对象时才会调用init方法,因此不会再次检查颜色

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

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

def step(self):
    self.time += 1
    self.color = 'G'
    if self.time > self.green_period:
        self.color = 'R'
    if self.time > self.period:
        self.time = 0



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 (R) False
8 (G) True
9 (G) True
10 (G) True
11 (R) False
12 (R) False
13 (R) False
14 (R) False

两张便条。您需要添加将颜色设置为
'R'
和重置为
'G'
,并在步骤中重置计数器。如果你想让它像你说的那样,你也应该把self.time初始化为
1
。请参阅下面的完整代码:

class Light:
  def __init__(self, period, green_period):
    self.time = 1 # Initialised as 1 instead
    self.period = period
    self.color = 'G'
    self.green_period = green_period # Added so class can retrieve it
    # Removed steps here

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

  def step(self):
    self.time += 1
    if self.time > self.green_period:
      self.color = 'R'
    if self.time > self.period: # Added check and reset here
      self.color = 'G'
      self.time = 1 # Initialised as 1 instead

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

两张便条。您需要添加将颜色设置为
'R'
和重置为
'G'
,并在步骤中重置计数器。如果你想让它像你说的那样,你也应该把self.time初始化为
1
。请参阅下面的完整代码:

class Light:
  def __init__(self, period, green_period):
    self.time = 1 # Initialised as 1 instead
    self.period = period
    self.color = 'G'
    self.green_period = green_period # Added so class can retrieve it
    # Removed steps here

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

  def step(self):
    self.time += 1
    if self.time > self.green_period:
      self.color = 'R'
    if self.time > self.period: # Added check and reset here
      self.color = 'G'
      self.time = 1 # Initialised as 1 instead

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

我猜您在init中的条件放置得不好

请在下面找到我的试用版,它会产生您的预期结果:

class灯:
定义初始(自我、周期、绿色周期):#7,3
self.time=1
self.period=period#7
self.color='G'
self.green\u period=绿色\u period
定义(自我):
返回f'({self.color})'
def步骤(自我):
self.time+=1
如果self.time>self.green\u期间:
self.color='R'
如果self.time>self.period:
self.\uuuu初始(self.period,self.green\u period)
def为绿色(自):
如果self.color==“G”:
返回真值
其他:
返回错误
def demo_light():
a_灯=灯(7,3)
对于范围(15)内的i:
打印(i,a_灯,a_灯。为绿色()
a_灯。步骤()
演示灯()

我猜您在init中的条件放置得不好

请在下面找到我的试用版,它会产生您的预期结果:

class灯:
定义初始(自我、周期、绿色周期):#7,3
self.time=1
self.period=period#7
self.color='G'
self.green\u period=绿色\u period
定义(自我):
返回f'({self.color})'
def步骤(自我):
self.time+=1
如果self.time>self.green\u期间:
self.color='R'
如果self.time>self.period:
self.\uuuu初始(self.period,self.green\u period)
def为绿色(自):
如果self.color==“G”:
返回真值
其他:
返回错误
def demo_light():
a_灯=灯(7,3)
对于范围(15)内的i:
打印(i,a_灯,a_灯。为绿色()
a_灯。步骤()
演示灯()

\uuuu init\uuuuu
中的检查应移动到
步骤或更好的方法,然后从
\uuu init\uuuu
步骤调用该方法。
\uuuuu init\uuuuuu
中的检查应移动到
步骤或更好的新方法,然后从
\uuuuu init\uuuuucode>和
步骤调用该方法。谢谢这么多!我在这个问题上已经坚持了大约一个星期,但从来没有意识到最终的解决方案是非常简单的。非常感谢!我一直在这个问题上纠缠了大约一个星期,从来没有意识到最终的解决方案是相当简单的。这是一个漂亮的解决方案,唯一的问题是我不允许添加额外的函数“颜色”。但在任何其他情况下,我都会使用这个。这是一个很好的解决方案,唯一的问题是我不允许添加额外的函数“color”。但在任何其他情况下,我都会用这个。