python - 如何使计数器上升到某个值然后重置为 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
解决方案
您的颜色状态是time
和的函数green_period
。你可以is_green
这样写:
def is_green(self):
return self.time % self.period < self.green_period
只需确保将文件存储green_period
在self.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'
如果在其他地方不需要它,也可以旋转时间(而不是只增加它)。
您目前遇到的问题是您永远不会重新评估颜色。
推荐阅读
- php - 分页在 elementor 模块上无法正常工作
- google-cloud-platform - 创建 Google Cloud Image 失败并显示“无法获取资源:内部错误”
- php - PHP PDO MySql lastInsertId() 返回 0
- google-apps-script - 嵌套 IF 语句的脚本替代 Google 表格,忽略文本单元格
- arrays - C索引到数组的双指针会导致崩溃
- git - 第一次使用 Git 用户,推送到远程存储库需要很长时间
- apache-spark-sql - 在 pyspark SQL 中将字符串日期转换为日期格式
- c# - 如何使用 ASP.NET Core MVC 模型验证属性指定验证消息是否显示在摘要中、表单中或两者中
- mapbox - Mapbox 在多边形上显示平铺边框,样式为线条
- vb.net - userControl 内的文本框 TextChanged 问题(C# 代码到 vb.net)