Существуют ли более приятные конструкции чем if elif else где на каждое значение нужно проводить разное действие?
Во-первых код надо оборачивать в соответствующий тег.

По вашему вопросу. В питоне как такового нет оператора case, как во многих других языках. Но из-за того, что все в питоне является объектами, даже функции, то можно провернуть все через словарь

# прописываем соответсвие значений кубика и действий через словарь
actions = {1: self.pass_day,
			2: self.eat_food,
			3: self.work_day,
			4: self.have_fun,
			5: self.go_shopping,
			6: self.sleep}

action = actions[dice] # получаем нужную функцию

action() # Выполняем нужную функцию

Заметьте, что в словаре прописываем имена функций без (), т.к. мы не выполняем их, а только ссылаемся на сами объекты.

P.S. Код не проверялся, возможно где-то есть небольшие неточности, но примерно такую же конструкцию сам использовал как-то.
Для этого лучше использовать функцию-словарь
def f(x):
    return {
        'a': 1,
        'b': 2
    }.get(x, 9)    # 9 is default if x not found
...
f('c') # 9
f('a') # 1
f('b') # 3
Ну и вариантов масса - https://ru.stackoverflow.com/questions/460207/%D0%...

def get_temp_description(temp):
    return {
               temp < -20: 'Холодно',
        -20 <= temp < 0:   'Прохладно',
          0 <= temp < 15:  'Зябко',
         15 <= temp < 25:  'Тепло',
         25 <= temp:       'Жарко'
    }[True]