Hola, estoy tratando de imprimir los elementos que se muestran a continuación. Solo quiero que se impriman una vez, pero como las declaraciones de impresión están dentro del ciclo for, se imprimen 100 veces. y no puedo sacar las declaraciones de impresión porque los valores en el interior dependen del ciclo for. ¿Alguna idea sobre cómo imprimir esos valores solo una vez?

def Input_Q_bounds (lower,upper):
delta_x = .1

#since there are 100 iterations
J=np.zeros(101)
for i in range(101) :
    Q_i=(i*delta_x)+(delta_x/2)
    if lower <=Q_i<= upper :
        Q =1
    else :
        Q=0
    #now fill the matrix
    J[i]=(Q+(9.5*(J[i-1])))/10.5
    J_analytical = Q*(np.exp(upper-10)+(np.exp(lower-10))

    print(J_analytical)
    print(J[100])
0
Katey 21 mar. 2017 a las 03:26

2 respuestas

La mejor respuesta

Simplemente ponga un if i == 100: en la línea sobre la impresión

1
Seraphya 21 mar. 2017 a las 00:40

Opción 1: puede usar una condición else como la siguiente.

def Input_Q_bounds(lower, upper):
    delta_x = .1

    # since there are 100 iterations
    J = np.zeros(101)
    for i in range(101):
        Q_i = (i * delta_x) + (delta_x / 2)
        if lower <= Q_i <= upper:
            Q = 1
        else:
            Q = 0
        # now fill the matrix
        J[i] = (Q + (9.5 * (J[i - 1]))) / 10.5
        J_analytical = Q * (np.exp(upper - 10) + (np.exp(lower - 10))
    else:
        print(J_analytical)
        print(J[100])

if __name__ == "__main__":
    Input_Q_bounds(lower, upper)

Opción 2: la solución a continuación es mediante el uso de variables globales

J_analytical = -1
J = []

def Input_Q_bounds(lower, upper):
    global J
    global J_analytical
    delta_x = .1

    # since there are 100 iterations
    J = np.zeros(101)
    for i in range(101):
        Q_i = (i * delta_x) + (delta_x / 2)
        if lower <= Q_i <= upper:
            Q = 1
        else:
            Q = 0
        # now fill the matrix
        J[i] = (Q + (9.5 * (J[i - 1]))) / 10.5
        J_analytical = Q * (np.exp(upper - 10) + (np.exp(lower - 10))


if __name__ == "__main__":
    Input_Q_bounds(lower, upper)
    print(J[100])
    print(J_analytical)

Opción 3: Devuelve los valores de la función.

def Input_Q_bounds(lower, upper):
    delta_x = .1

    # since there are 100 iterations
    J = np.zeros(101)
    for i in range(101):
        Q_i = (i * delta_x) + (delta_x / 2)
        if lower <= Q_i <= upper:
            Q = 1
        else:
            Q = 0
        # now fill the matrix
        J[i] = (Q + (9.5 * (J[i - 1]))) / 10.5
        J_analytical = Q * (np.exp(upper - 10) + (np.exp(lower - 10))
    return J[100], J_analytical

if __name__ == "__main__":
    Input_Q_bounds(lower, upper)
1
Varad 21 mar. 2017 a las 01:05