龙空技术网

python如何判断连续满足条件的区间?

Java架构师圈子 68

前言:

此刻兄弟们对“python区间判断”大致比较注意,兄弟们都想要分析一些“python区间判断”的相关资讯。那么小编也在网络上汇集了一些对于“python区间判断””的相关文章,希望姐妹们能喜欢,朋友们一起来了解一下吧!

这个很适合用状态机来写代码实现。

1、列出所有状态,如果不考虑状态内部变化的话,可以是初始、干旱、半旱、正常但之前持续1的步数为0、...、正常但之前持续1的步数为4 。

2、列出状态之间的转移

3、编码实现

4、实际上可以加入状态内的变量,就能缩减状态数量初始、干旱、半旱、正常,其中正常状态内有之前持续1的步数这个变量。

代码实现就很容易了

class State:    def __str__(self):        return self.__class__.__name__class Init(State):    def transform(self, step):        wet = Wet()        if step == 1:            wet.continue_steps += 1        return wetclass Dry(State):    def transform(self, step):        if step == 1:            return self        else:            return HalfDry()class HalfDry(State):    def transform(self, step):        if step == 1:            return Dry()        else:            return Wet()class Wet(State):    continue_steps = 0    def transform(self, step):        if step == 0:            self.continue_steps = 0            return self        elif self.continue_steps >= 4:            return Dry()        else:            self.continue_steps += 1            return self    def __str__(self):        return f'{self.__class__.__name__}:{self.continue_steps}'    class FSM:    state = Init()    def run(self, steps):        for step in steps:            print(f'{self.state} +{step}-->', end='')            self.state = self.state.transform(step)            fsm = FSM()steps = [1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1]fsm.run(steps)# 输出结果# >>> Init +1-->Wet:1 +0-->Wet:0 +1-->Wet:1 +1-->Wet:2 +1-->Wet:3 +1-->Wet:4 +1-->Dry +0-->HalfDry +1-->Dry +1-->Dry +1-->Dry +0-->HalfDry +0-->Wet:0 +0-->Wet:0 +1-->Wet:1 +1-->Wet:2 +1-->Wet:3 +1-->Wet:4 +1-->Dry +1-->Dry +1-->Dry +0-->HalfDry +0-->Wet:0 +0-->Wet:0 +1-->Wet:1 +1-->Wet:2 +0-->Wet:0 +1-->Wet:1 +1-->Wet:2 +0-->Wet:0 +1-->

编辑于 17 小时前

标签: #python区间判断