To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of standard definition web-cams as \(x\) and the number of high definition web-cams as \(y\). The profit from each standard definition web-cam is $100, and from each high definition web-cam is $125. Therefore, the total profit can be represented as \(100x + 125y\), which we want to maximize.

The constraints are:
1. The total cost of the web-cams should not exceed $40,000. Given that a standard definition web-cam costs $150 and a high definition web-cam costs $250, this constraint can be written as \(150x + 250y \leq 40000\).
2. The total number of web-cams should not exceed the estimated monthly demand of 275. This gives us the constraint \(x + y \leq 275\).
3. Since we cannot have a negative number of web-cams, both \(x\) and \(y\) must be non-negative.

Now, let's translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
x = m.addVar(vtype=GRB.INTEGER, name="Standard_Definition_WebCams")
y = m.addVar(vtype=GRB.INTEGER, name="High_Definition_WebCams")

# Set the objective function to maximize profit
m.setObjective(100*x + 125*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(150*x + 250*y <= 40000, "Total_Cost_Constraint")
m.addConstr(x + y <= 275, "Demand_Constraint")
m.addConstr(x >= 0, "Non_Negativity_Constraint_x")
m.addConstr(y >= 0, "Non_Negativity_Constraint_y")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Standard Definition WebCams: {x.x}")
    print(f"High Definition WebCams: {y.x}")
    print(f"Maximum Profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found")
```