#!/usr/bin/env python3
# This switch statements supports default cases aswell
class switch():
    def __init__(self, key):
        self.key = key
        self.matchFound = False
        self.defaultCase = None
    def __enter__(self):
        return self.case
    def __exit__(self, exc_type, exc_val, exc_tb):
        if not self.matchFound and self.defaultCase:
            self.defaultCase()
    def case(self, key = None):
        def decorator(func):
            if self.key == key:
                func()
                self.matchFound = True
            elif key == None:
                self.defaultCase = func
            return func
        return decorator

for key in range(1, 101):
    with switch(key % 15) as case:
        @case(5)
        @case(10)
        def five():
            print("Buzz")
        @case(3)
        @case(6)
        @case(9)
        @case(12)
        def three():
            print("Fizz")
        @case(0)
        def both():
            print("Fizzuzz")
        @case()
        def default():
            print(key)
