## Step 1: Define the variables and the objective function
Let's define the variables as follows:
- $x_1$ = number of keyboards
- $x_2$ = number of PC controllers

The objective function to maximize profit is: $20x_1 + 10x_2$

## Step 2: Define the constraints
The constraints based on the problem description are:
1. Floor space constraint: $12x_1 + 4x_2 \leq 200$
2. PC controller percentage constraint: $x_2 \geq 0.35(x_1 + x_2)$
3. Capital constraint: $200x_1 + 150x_2 \leq 5000$
4. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

## 3: Convert the constraints into standard form
1. Floor space constraint remains: $12x_1 + 4x_2 \leq 200$
2. PC controller percentage constraint simplifies to: $0.35x_1 - 0.65x_2 \leq 0$ or $x_2 \geq 0.35x_1 + 0.35x_2$ which can be rewritten as $-0.35x_1 + 0.65x_2 \geq 0$
3. Capital constraint remains: $200x_1 + 150x_2 \leq 5000$

## 4: Symbolic Representation
The symbolic representation of the problem is:
```json
{
'sym_variables': [('x1', 'keyboards'), ('x2', 'PC controllers')],
'objective_function': '20*x1 + 10*x2',
'constraints': [
    '12*x1 + 4*x2 <= 200',
    '-0.35*x1 + 0.65*x2 >= 0',
    '200*x1 + 150*x2 <= 5000',
    'x1 >= 0',
    'x2 >= 0'
]
}
```

## 5: Gurobi Code
Now, let's write the Gurobi code in Python:
```python
import gurobipy as gp

# Create a new model
m = gp.Model("Theta_Electronics")

# Define the variables
x1 = m.addVar(name="keyboards", lb=0)
x2 = m.addVar(name="PC_controllers", lb=0)

# Define the objective function
m.setObjective(20*x1 + 10*x2, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(12*x1 + 4*x2 <= 200, name="floor_space")
m.addConstr(-0.35*x1 + 0.65*x2 >= 0, name="PC_controller_percentage")
m.addConstr(200*x1 + 150*x2 <= 5000, name="capital")

# Solve the model
m.optimize()

# Print the solution
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Keyboards: {x1.varValue}")
    print(f"PC Controllers: {x2.varValue}")
    print(f"Max Profit: {m.objVal}")
else:
    print("No optimal solution found.")
```