Point of clarification - I'm assuming that the calendar doesn't advance in this simulation/game until the player chooses one of travel, rest, or hunt. That's not entirely clear from the instructions.
Overview:
"Each day costs you food and health." - Not necessarily. Each day costs you food, but maybe not health, unless one of the random bad events occurs.
Behavior:
"On average, the player's health will randomly decrease twice during a month on any given day."
Please rewrite the above to eliminate ambiguity. As written, it is unclear as to whether "randomly" refers to the amount of the health decrease or its timing. And the overall description of the timing is (IMHO) confusing at best.
Implementation details:
MONTHS_WITH_31_DAYS isn't needed outside the add_day() function, so it shouldn't be global.
In my solution, what you call "select_action" is the main body of the program, a while loop without a function. And it doesn't call add_day() directly. It calls the function for one of the six chosen actions, and some of those call add_day().
Grading:
"Game ends if food runs out, days run out, or health runs out" in the rubric should be:
Game ends if days run out, health runs out, you get there (Oregon), or the player quits.
Your instructions don't mention what to do if food runs out. My solution has health dropping by 1 every time the player tries to travel, rest, or hunt without an existing supply of food. Also, that function prints a warning message to the effect that there is no more food remaining.
Extra Credit:
"Create a random event that occurs randomly once a month ..."
As opposed to a non-random event that occurs randomly once a month?