To solve George's problem, we need to formulate a linear programming model that maximizes his profit while considering the constraints on demand and budget.

Let's denote:
- $x$ as the number of sneakers George buys,
- $y$ as the number of boots George buys.

The objective function is to maximize the total profit. Since the profit per sneaker sold is $50 and the profit per boot sold is $80, we can write the objective function as:
\[ \text{Maximize} \quad 50x + 80y \]

The constraints are:
1. The monthly demand for sneakers and boots combined is at most 50:
\[ x + y \leq 50 \]
2. George does not want to spend more than $8750 buying these shoes, with each sneaker costing $150 and each boot costing $200:
\[ 150x + 200y \leq 8750 \]
3. Non-negativity constraints since George cannot buy a negative number of shoes:
\[ x \geq 0 \]
\[ y \geq 0 \]

Now, let's translate this model into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("George_Shoes_Problem")

# Define the variables
x = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="sneakers")
y = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="boots")

# Set the objective function
m.setObjective(50*x + 80*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 50, "demand_limit")
m.addConstr(150*x + 200*y <= 8750, "budget_limit")

# Optimize the model
m.optimize()

# Print the solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution: Buy {x.x} sneakers and {y.x} boots.")
    print(f"Maximum profit: ${50*x.x + 80*y.x}")
else:
    print("No optimal solution found.")

```