Q:

Error: TypeError: can't multiply sequence by non-int of type 'str'

¿A que corresponde el siguiente error?:

TypeError: can't multiply sequence by non-int of type 'str'

Este es mi código:
import math

print("teoria de inventarios")
print("elige el modelo")
print("1.-modelo deterministico")
print("2.-modelo con rebastecimiento instantaneo en un periodo de tiempo ")
print("3.-modelo de lote economico de producion")
print("4.-modelo probabilistico")
while (True):
    opcion=input(">")

    if (opcion=="1"):
        Q=0
        print("ingrese K")
        K=input()
        print("ingrese D")
        D=input()
        #print("ingrese T")
        #T=input()
        #print("ingrese P")
        #P=input()
        print("ingrese H")
        H=input()
        Q=2*K*D/H**1/2
        print(Q)

    elif(opcion=="2"):
        Q=0      
        print("ingrese K")
        K=input()
        print("ingrese D")
        D=input()
        #print("ingrese T")
        #T=input()
        print("ingrese P")
        P=input()
        print("ingrese H")
        H=input()
        Q=2*K*D/H
        raiz=math.sqrt(Q)
        print(Q)

    elif(opcion=="3"):
        print(" opcion 3")
    elif(opcion=="4"):
        print(" opcion 4")
    else:
        print("opcion invalida")

A:

la función input retorna un string, por ejemplo lo puede comprobar imprimiendo el tipo:
valor = input()
print(type(valor))

Esto retorna lo siguiente:
<class 'str'>

La solucion sencilla es convertir el string a float o int, es decir reemplazar:
valor = input()

por:
valor = float(input())

Opcional:
Ademas de ello me di el tiempo de comprimir tu código para que se pueda configurar facilmente como muestro a continuación:
import math

print("teoria de inventarios")
print("elige el modelo")
print("1.-modelo deterministico")
print("2.-modelo con rebastecimiento instantaneo en un periodo de tiempo ")
print("3.-modelo de lote economico de producion")
print("4.-modelo probabilistico")

data = {"1": (["K", "D", "H"], lambda K, D, H:  2*K*D/H**1/2 ),
         "2": (["K", "D", "P", "H"], lambda K, D, P, H: math.sqrt(2*K*D/H))}

while True:
    opcion = input(">")
    if opcion in data.keys():
        variables, fun = data[opcion]
        args = []
        for variable in variables:
            print("ingrese {}".format(variable))
            valor = float(input())
            args.append(valor)
        resultado = fun(*args)
        print(resultado)
    else:
        print("opcion invalida")

Uso:
Si deseas añadir más opciones debes seguir los siguientes pasos:

Añadir la opción.
Una lista de los nombres de las variables que se deben pedir.
un funcion lambda indicando la formula.

Por ejemplo:
Digamos que queremos usar la siguiente formula asociada a la opción "3":
a**2 + b*p

Entonces debes de tener lo siguiente:

opcion: "3"
lista de variables: ["a", "b", "p"]
función: lambda a, b, p:  a**2 + b*p

Obteniendo lo siguiente:
data = {"1": (["K", "D", "H"], lambda K, D, H:  2*K*D/H**1/2 ),
         "2": (["K", "D", "P", "H"], lambda K, D, P, H: math.sqrt(2*K*D/H)),
         "3": (["a", "b", "p"], lambda a, b, p:  a**2 + b*p)}

