# (Maybe off topic) Can someone explain what a finite state machine is?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Jul 20 03:29:48 EDT 2011

```On Tue, 19 Jul 2011 11:32 pm Matty Sarro wrote:

> Hey everyone. I am currently reading through an RFC, and it mentions
> that a client and server half of a transaction are embodied by finite
> state machines. I am reading through the wikipedia article for finite
> state machines, and sadly it's going a bit above my head. I don't
> really have a background in engineering, and would really love to
> understand what is being said. Does anyone have a simple way to
> explain it?

Consider a heater with a thermostat. That's a finite state machine. It's a
machine, it has a finite number of states, namely, the combinations of
these:

"on" or "off"
"too warm", "too cold" or "in-between"

The machine has transitions between states:

"if too warm, then turn off"
"if too cold, then turn on"
"if in-between, then don't change"

Here's one way to simulate such a simple FSM in Python:

import time

class Heater:
low = 0
high = 10
def __init__(self, starting_temperature=7):
self.temp = starting_temperature
self.state = "off"
def run(self):
while True:
if self.state == "on":
# Heating.
self.temp += 1
if self.state == "off":
# Slowly cooling.
self.temp -= 1
if self.temp < self.low:
print("turning on")
self.state = "on"
if self.temp > self.high:
print("turning off")
self.state = "off"
time.sleep(1)

>>> heater = Heater()
>>> heater.run()
turning on
turning off
turning on
turning off
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in run
KeyboardInterrupt

More complex finite state machines can have many different states, and much
more complicated behaviour.

--
Steven

```