**Python Puzzles**

This type of puzzle is called a Markov Chain.

In Probability Land, on a sunny day, there is an equal probability of the next day being sunny or rainy. On a rainy day, there is a 70% chance it will rain the next day and a 30% chance it will be sunny the next day.

On average, how many rainy days are there in Probability Land?

Here is the output from Python’s print statement.

`It rains approximately 62% of the time in Probability Land.`

It is worth noting that the absolute value of the Pearson R correlation will always be 1. However, creating a scatter plot where the X and Y values are on the same scale makes it visually apparent that the number of rainy days far exceeds the number of sunny days.

Here is the Python code to run this simulation.

import numpy as np import matplotlib.pyplot as plt result = [] # repeat the simulation 10,000 times for _ in range(10_000): sunnydays = 0 # start with a forecast of sunny (1) with 70% probability forecast = np.random.binomial(1, .7, 1).item() # simulate the weather for 365 days for _ in range(365): if forecast == 1: # if the forecast is sunny, count it as a sunny day and update the forecast with 50% probability of being sunny sunnydays += 1 forecast = np.random.binomial(1, .5, 1).item() else: # if the forecast is not sunny, update the forecast with 30% probability of being sunny forecast = np.random.binomial(1, .3, 1).item() result.append(sunnydays) # calculate the percentage of days when it rains pct_rain = ((365 - (sum(result) / len(result))) / 365) print('It rains approximately ' + '{0:.0%}'.format(pct_rain) + ' of the time in ProbabilityLand.') # calculate correlation coefficient sunny_days = np.array(result) rainy_days = 365 - sunny_days corr = np.corrcoef(sunny_days, rainy_days)[0][1] # create scatter plot plt.xlim(90, 280) plt.ylim(90, 280) plt.scatter(sunny_days, rainy_days, color='blue', alpha=0.05) plt.xlabel('Number of Sunny Days') plt.ylabel('Number of Rainy Days') plt.title('Sunny vs Rainy Days in ProbabilityLand') # add correlation coefficient to plot plt.text(x = np.max(sunny_days), y = np.max(rainy_days), s = f"r = {corr:.2f}", ha = 'right', va = 'top') plt.savefig('weather-probability-land-scatter.png', dpi=300, bbox_inches='tight') plt.show()