使用嵌套循环生成表格,计算结果不正确/不完整

-2 投票
2 回答
1905 浏览
提问于 2025-04-17 04:30

我花了好几个小时在这个问题上,快要搞定了,但试了好几种不同的方法,结果总是奇奇怪怪的。

我也发现之前有人问过类似的问题,但他们似乎没有遇到我现在碰到的麻烦。

问题是:在下面这段代码的输出中可以看到,计算结果没有在每一行的不同列之间正确传递,似乎每次计算都在用相同的值,结果总是输出35.7。

代码如下:

def WindChill():
row = 0
col = 0
i = 0
wchill = round((35.74 + 0.6215*(col) - 35.75*(row**16) + 0.4275*(col)*(row**16)), 1)

print(10 * " ", "|", end = "")

head = -1

for i in range(1):
    for col in range(-20, 70, 10):
        print(3 * " ", col, "F", 3 * " ", "|", end = " ")
    print("\n", 150 * "-")

while head < 0:
    for row in range(0, 55, 5):
        if (len(str(row))) < 2:
            print(row, "mph", 4 * " ", "|", end = " ")

        else:
            print(row, "mph", 3 * " ", "|", end = " ")

        print(3 * " ", round(wchill, 1), 3 * " ", "|", end = " ")

        col = 0
        head += 1

        print("\n", 150 * "-")
    print()

print()

这段代码的输出是:

                  |    -20 F     |     -10 F     |     0 F     |     10 F     |     20 F     |     30 F     |     40 F     |     50 F     |     60 F     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       0 mph      |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       5 mph      |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       10 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       15 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       20 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       25 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       30 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       35 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       40 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       45 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------
       50 mph     |     35.7     | 
       ------------------------------------------------------------------------------------------------------------------------------------------------------

显然,35.7这个值应该随着风速每增加5英里每小时而变化,而且应该在每一行的所有列中都进行计算。

这个表格和计算结果应该和下面这个网站上的表格类似:http://www.nws.noaa.gov/os/windchill/index.shtml

2 个回答

0

尽量减少不必要的墨水使用!

def WindChillTable(of):
    of.write('           -20\u00b0F')
    for col in range(-10, 70, 10):
        of.write('{: 6}  '.format(col))

    of.write('\n       \u250c' + 71*'\u2500')

    for row in range(0, 55, 5):
        if row == 0:
            of.write('\n mph 0 \u2502')
        else:
            of.write('\n    {:2} \u2502'.format(row))

        for col in range(-20, 70, 10):
            of.write('  {: 5.1f} '.format(0))

    of.write('\n')

if __name__ == '__main__':
    import sys
    WindChillTable(sys.stdout)

           -20°F   -10       0      10      20      30      40      50      60
       ┌───────────────────────────────────────────────────────────────────────
 mph 0 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
     5 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    10 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    15 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    20 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    25 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    30 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    35 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    40 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    45 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
    50 │    0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0

让这个打印出你想要的实际数值就留给你自己去练习了。

2

你在程序一开始就计算了wchill,当时row(行)和col(列)都是0。这个数字一开始算出来是35.7,并且不会改变。

如果你希望wchill根据你当前打印的行和列来变化,那么你需要在打印之前调用这一行代码:

wchill = round((35.74 + 0.6215*(col) - 35.75*(row**16) + 0.4275*(col)*(row**16)), 1)

也就是说,每当行或列的值变化时,你要在打印之前重新计算一下。

补充一下,我想说的是,wchill并不是自己神奇地变化的——每次行或列变化时,你都需要重新计算它。

撰写回答