## Problem Description and Formulation

The problem requires minimizing the objective function $6 \cdot \text{potatoes} + 7 \cdot \text{bananas}$, subject to several constraints related to the carbohydrate content of potatoes and bananas.

### Constraints:

1. Potatoes contain 2 grams of carbohydrates.
2. Bananas contain 12 grams of carbohydrates.
3. The total carbohydrates from potatoes and bananas must be at least 39 grams.
4. The total carbohydrates from potatoes and bananas must not exceed 91 grams.
5. $-5 \cdot \text{potatoes} + 7 \cdot \text{bananas} \geq 0$.
6. The amount of potatoes must be an integer (non-fractional).
7. The amount of bananas can be any real number.

### Gurobi Code Formulation

```python
import gurobi

# Create a new Gurobi model
model = gurobi.Model()

# Define the variables
potatoes = model.addVar(name="potatoes", vtype=gurobi.GRB.INTEGER)
bananas = model.addVar(name="bananas")

# Objective function: Minimize 6 * potatoes + 7 * bananas
model.setObjective(6 * potatoes + 7 * bananas, gurobi.GRB.MINIMIZE)

# Constraints
model.addConstr(2 * potatoes + 12 * bananas >= 39, name="carbohydrates_min")
model.addConstr(2 * potatoes + 12 * bananas <= 91, name="carbohydrates_max")
model.addConstr(-5 * potatoes + 7 * bananas >= 0, name="potatoes_bananas_balance")

# Solve the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal Solution:")
    print(f"Potatoes: {potatoes.varValue}")
    print(f"Bananas: {bananas.varValue}")
    print(f"Objective: {model.objVal}")
else:
    print("The model is infeasible or unbounded.")
```

This Gurobi code captures the problem description and provides a solution. If the problem is infeasible, it will indicate so. Note that the `vtype` parameter for the `addVar` method is used to specify that `potatoes` must be an integer variable, while `bananas` can be any real number (which is the default).