Changed tweets, added eca
This commit is contained in:
47
demos/average.py
Normal file
47
demos/average.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from eca import *
|
||||
|
||||
|
||||
@event('main')
|
||||
def setup(ctx, e):
|
||||
"""
|
||||
Initialise the context with an accumulator value, and inform
|
||||
the user about the fact that we process input.
|
||||
"""
|
||||
print("Enter a number per line and end with EOF:")
|
||||
print("(EOF is ctrl+d under linux and MacOSes, ctrl+z followed by return under Windows)")
|
||||
ctx.accumulator = 0
|
||||
ctx.count = 0
|
||||
|
||||
|
||||
@event('line')
|
||||
def line(ctx, e):
|
||||
"""
|
||||
Tries to parse the input line as a number and add it to the accumulator.
|
||||
"""
|
||||
try:
|
||||
value = float(e.data) if '.' in e.data else int(e.data)
|
||||
ctx.accumulator += value
|
||||
ctx.count += 1
|
||||
print("sum = " + str(ctx.accumulator))
|
||||
except ValueError:
|
||||
print("'{}' is not a number.".format(e.data))
|
||||
|
||||
|
||||
@event('end-of-input')
|
||||
@condition(lambda c,e: c.count > 0)
|
||||
def done(ctx, e):
|
||||
"""
|
||||
Outputs the final average to the user.
|
||||
"""
|
||||
print("{} samples with average of {}".format(ctx.count, ctx.accumulator / ctx.count))
|
||||
shutdown()
|
||||
|
||||
|
||||
@event('end-of-input')
|
||||
@condition(lambda c,e: c.count == 0)
|
||||
def no_input(ctx, e):
|
||||
"""
|
||||
Invoked of no input is given and input is finished.
|
||||
"""
|
||||
print("0 samples. \"Does not compute!\"")
|
||||
shutdown()
|
||||
Reference in New Issue
Block a user