首页 > 解决方案 > while 循环没有使用正确的变量进行输出

问题描述

我创建了这个循环,以便在 100 次代码迭代后找到温度、反照率和冰层纬度的变化。

import numpy as np
import matplotlib.pyplot as plt

#define constants
L = 1280
albedo = 0.15
nIters = 100
LRange = [1200, 1600] #W/m2
Episilon = 1 #no units
Sigma = 5.67E-08 #Wm-2K-4


Ice_Lat_m = 1.5
Ice_lat_c = -322.5
Alb_m = -0.01
Alb_c = 2.8

plotType = "iterDown" #"L", "iterUp", "iterDown"

x = []
y = []
while (L > LRange[0] - 1):
    for iter in range(nIters):
        T = ((L * ( 1- albedo)) / 4) / Sigma
        T = T ** (1/4)
        albedo = Alb_m * T + Alb_c
        albedo = min(albedo, 0.65)
        albedo = max(albedo, 0.15)
        lat_ice = Ice_Lat_m * T + Ice_lat_c
        lat_ice = min(lat_ice, 90)
        lat_ice = max(lat_ice, 0)
        if plotType is "iter" or plotType is "iterDown":
            x.append(iter)
            y.append(T)
    if plotType is "iter" or plotType is "iterDown":
        x.append(np.nan)
        y.append(np.nan)
    if plotType is "L":
        x.append(L)
        y.append(T)
    L = L - 10

while (L < LRange[1] + 1):
    for iter in range(nIters):
        T = ((L * ( 1- albedo)) / 4) / Sigma
        T = T ** (1/4)
        albedo = Alb_m * T + Alb_c
        albedo = min(albedo, 0.65)
        albedo = max(albedo, 0.15)
        lat_ice = Ice_Lat_m * T + Ice_lat_c
        lat_ice = min(lat_ice, 90)
        lat_ice = max(lat_ice, 0)
        if plotType is "iter" or plotType is "iterDown":
            x.append(iter)
            y.append(T)
    if plotType is "iter" or plotType is "iterDown":
        x.append(np.nan)
        y.append(np.nan)
    if plotType is "L":
        x.append(L)
        y.append(T)
    L = L + 10    

plt.plot(x, y)
plt.show()
print(T, albedo, lat_ice)

这段代码的输出是:

278.2748546226214 0.15 90

这告诉我,当代码在定义的“LRange”范围内时,代码使用变量“LRange[1]”作为循环的输入,而不是使用变量“L”。

期望的输出应该是:

255.45242794389384 0.24547572056106137 

谁能向我解释为什么会这样?这将不胜感激!

标签: pythonwhile-looprange

解决方案


你有两个循环:第一个循环将从 1280 倒数到 1200,第二个循环将从 1200 开始。

您可能想在第二个循环之前重置 L 。


推荐阅读