split choice network stuff into separate file
This commit is contained in:
parent
a073c04697
commit
8f06d4e1ee
75
choice_network.py
Normal file
75
choice_network.py
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
from random import randint, random, choice
|
||||||
|
|
||||||
|
class Choice:
|
||||||
|
def __init__(self, **data):
|
||||||
|
""" stores a dict.
|
||||||
|
the keys are strings that indicate the next state,
|
||||||
|
the values are lists that store the possible emissions in transition to that new state.
|
||||||
|
"""
|
||||||
|
self.data = data
|
||||||
|
self.new_states = list(self.data.keys())
|
||||||
|
|
||||||
|
def choose(self):
|
||||||
|
new_state = choice(self.new_states)
|
||||||
|
emission = choice(self.data[new_state])
|
||||||
|
return new_state, emission
|
||||||
|
|
||||||
|
class SingleArgChoice:
|
||||||
|
def __init__(self, kwarg):
|
||||||
|
if len(kwarg) != 1:
|
||||||
|
raise ValueError(
|
||||||
|
f"{self.__class__.__name__} takes exactly one keyword argument!"
|
||||||
|
)
|
||||||
|
for self.next_state, self.value in kwarg.items():
|
||||||
|
pass
|
||||||
|
|
||||||
|
class RandInt(SingleArgChoice):
|
||||||
|
def __init__(self, **kwarg):
|
||||||
|
super().__init__(kwarg)
|
||||||
|
assert len(self.value) == 2
|
||||||
|
assert type(self.value[0]) == int
|
||||||
|
assert type(self.value[1]) == int
|
||||||
|
|
||||||
|
self.minimum = self.value[0]
|
||||||
|
self.maximum = self.value[1]
|
||||||
|
|
||||||
|
def choose(self):
|
||||||
|
number = randint(self.minimum, self.maximum)
|
||||||
|
return self.next_state, f"{number} "
|
||||||
|
|
||||||
|
class FixedText(SingleArgChoice):
|
||||||
|
def __init__(self, **kwarg):
|
||||||
|
super().__init__(kwarg)
|
||||||
|
self.text = self.value
|
||||||
|
|
||||||
|
def choose(self):
|
||||||
|
return self.next_state, self.text
|
||||||
|
|
||||||
|
class Network:
|
||||||
|
def __init__(self, **choices):
|
||||||
|
""" takes a dict,
|
||||||
|
the keys are strings that name states,
|
||||||
|
the values are the choices for new states and emissions possible in these states.
|
||||||
|
the 'start' state and the 'stop' state have their respective special roles.
|
||||||
|
"""
|
||||||
|
self.choices = choices
|
||||||
|
self.recursion_warning = 100
|
||||||
|
|
||||||
|
def choose(self):
|
||||||
|
state = 'start'
|
||||||
|
emissions = []
|
||||||
|
states = [state]
|
||||||
|
while state != 'stop':
|
||||||
|
state, emission = self.choices[state].choose()
|
||||||
|
emissions.append(emission)
|
||||||
|
states.append(states)
|
||||||
|
if len(emissions) > self.recursion_warning:
|
||||||
|
raise RecursionError(
|
||||||
|
"there are over a hundred emissions. probably a bug!"
|
||||||
|
)
|
||||||
|
|
||||||
|
return emissions, states
|
||||||
|
|
||||||
|
|
74
generate.py
74
generate.py
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
from random import randint, random, choice
|
from random import randint, random, choice
|
||||||
|
|
||||||
|
from choice_network import Choice, FixedText, RandInt, Network
|
||||||
|
|
||||||
|
|
||||||
greeting = """
|
greeting = """
|
||||||
Englisch version below.
|
Englisch version below.
|
||||||
|
@ -21,82 +23,10 @@ Hi, we have two students matching the criteria from the database and a certain a
|
||||||
Maybe you can filter it with regular expressions? Good luck.
|
Maybe you can filter it with regular expressions? Good luck.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def matriculation_number():
|
|
||||||
return randint(40_000_000, 55_000_000)
|
|
||||||
# fünf Tatverdächtige
|
# fünf Tatverdächtige
|
||||||
# Uhrzeiten, siehe Infos von Verantwortlichen
|
# Uhrzeiten, siehe Infos von Verantwortlichen
|
||||||
# Groß-Klein-Schreibung
|
# Groß-Klein-Schreibung
|
||||||
|
|
||||||
class Choice:
|
|
||||||
def __init__(self, **data):
|
|
||||||
""" stores a dict.
|
|
||||||
the keys are strings that indicate the next state,
|
|
||||||
the values are lists that store the possible emissions in transition to that new state.
|
|
||||||
"""
|
|
||||||
self.data = data
|
|
||||||
self.new_states = list(self.data.keys())
|
|
||||||
|
|
||||||
def choose(self):
|
|
||||||
new_state = choice(self.new_states)
|
|
||||||
emission = choice(self.data[new_state])
|
|
||||||
return new_state, emission
|
|
||||||
|
|
||||||
class SingleArgChoice:
|
|
||||||
def __init__(self, kwarg):
|
|
||||||
if len(kwarg) != 1:
|
|
||||||
raise ValueError(
|
|
||||||
f"{self.__class__.__name__} takes exactly one keyword argument!"
|
|
||||||
)
|
|
||||||
for self.next_state, self.value in kwarg.items():
|
|
||||||
pass
|
|
||||||
|
|
||||||
class RandInt(SingleArgChoice):
|
|
||||||
def __init__(self, **kwarg):
|
|
||||||
super().__init__(kwarg)
|
|
||||||
assert len(self.value) == 2
|
|
||||||
assert type(self.value[0]) == int
|
|
||||||
assert type(self.value[1]) == int
|
|
||||||
|
|
||||||
self.minimum = self.value[0]
|
|
||||||
self.maximum = self.value[1]
|
|
||||||
|
|
||||||
def choose(self):
|
|
||||||
number = randint(self.minimum, self.maximum)
|
|
||||||
return self.next_state, f"{number} "
|
|
||||||
|
|
||||||
class FixedText(SingleArgChoice):
|
|
||||||
def __init__(self, **kwarg):
|
|
||||||
super().__init__(kwarg)
|
|
||||||
self.text = self.value
|
|
||||||
|
|
||||||
def choose(self):
|
|
||||||
return self.next_state, self.text
|
|
||||||
|
|
||||||
class Network:
|
|
||||||
def __init__(self, **choices):
|
|
||||||
""" takes a dict,
|
|
||||||
the keys are strings that name states,
|
|
||||||
the values are the choices for new states and emissions possible in these states.
|
|
||||||
the 'start' state and the 'stop' state have their respective special roles.
|
|
||||||
"""
|
|
||||||
self.choices = choices
|
|
||||||
self.recursion_warning = 100
|
|
||||||
|
|
||||||
def choose(self):
|
|
||||||
state = 'start'
|
|
||||||
emissions = []
|
|
||||||
states = [state]
|
|
||||||
while state != 'stop':
|
|
||||||
state, emission = self.choices[state].choose()
|
|
||||||
emissions.append(emission)
|
|
||||||
states.append(states)
|
|
||||||
if len(emissions) > self.recursion_warning:
|
|
||||||
raise RecursionError(
|
|
||||||
"there are over a hundred emissions. probably a bug!"
|
|
||||||
)
|
|
||||||
|
|
||||||
return emissions, states
|
|
||||||
|
|
||||||
network = Network(
|
network = Network(
|
||||||
start = Choice(
|
start = Choice(
|
||||||
student = ["Student ", "Studentin ", "", "Studierende:r "],
|
student = ["Student ", "Studentin ", "", "Studierende:r "],
|
||||||
|
|
Loading…
Reference in a new issue