## Step 1: Define the symbolic representation of the problem
Let's denote the variables as follows:
- $x_1$ represents the amount invested in real estate.
- $x_2$ represents the amount invested in the pharmaceuticals industry.

The objective is to maximize the return on investment. The return from real estate is 5% of $x_1$, and the return from the pharmaceuticals industry is 10% of $x_2$. Therefore, the objective function to maximize is $0.05x_1 + 0.10x_2$.

## Step 2: Define the constraints
The constraints based on the problem description are:
1. The total investment is $300,000: $ $x_1 + x_2 = 300,000$.
2. At least 30% of the investment should be in real estate: $x_1 \geq 0.30 \times 300,000$.
3. At most 35% of the investment should be in the pharmaceuticals industry: $x_2 \leq 0.35 \times 300,000$.
4. Non-negativity constraints: $x_1 \geq 0$ and $x_2 \geq 0$.

However, since $x_1 + x_2 = 300,000$, the non-negativity constraints are implicitly considered in the context of the other constraints.

## 3: Convert constraints into standard form for optimization
The constraints in standard form are:
1. $x_1 + x_2 = 300,000$
2. $x_1 \geq 90,000$ (since $0.30 \times 300,000 = 90,000$)
3. $x_2 \leq 105,000$ (since $0.35 \times 300,000 = 105,000$)

## 4: Express the problem in symbolic notation
```json
{
'sym_variables': [('x1', 'real estate investment'), ('x2', 'pharmaceuticals industry investment')],
'objective_function': '0.05*x1 + 0.10*x2',
'constraints': [
'x1 + x2 = 300000',
'x1 >= 90000',
'x2 <= 105000'
]
}
```

## 5: Implement the problem in Gurobi Python
```python
import gurobi

def solve_investment_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    x1 = model.addVar(name='real_estate_investment', lb=0)
    x2 = model.addVar(name='pharmaceuticals_investment', lb=0)

    # Objective function
    model.setObjective(0.05 * x1 + 0.10 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(x1 + x2 == 300000, name='total_investment')
    model.addConstr(x1 >= 90000, name='real_estate_min')
    model.addConstr(x2 <= 105000, name='pharmaceuticals_max')

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal investment in real estate: ${x1.varValue}")
        print(f"Optimal investment in pharmaceuticals: ${x2.varValue}")
        print(f"Max return: ${0.05 * x1.varValue + 0.10 * x2.varValue}")
    else:
        print("No optimal solution found.")

solve_investment_problem()
```