Python 如何使计数器上升到某个值,然后重置为0?
我需要制作一个内部计数器,该计数器进入设置的周期,然后重置为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
\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”。但在任何其他情况下,我都会用这个。