Python数组越界错误

Python数组越界错误,python,Python,我遇到一个数组错误超出范围的问题。我尝试循环遍历多维数组,并将公式中的值添加到每个元素。如何修复循环以跳出数组边界 z=int(4.3/7.9) V =51 T =51 r = 1 c = 1 a=[[0]*c for i in range(r)] for r in range(1,51): for c in range(1,51): a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16 p

我遇到一个数组错误超出范围的问题。我尝试循环遍历多维数组,并将公式中的值添加到每个元素。如何修复循环以跳出数组边界

z=int(4.3/7.9)
V =51
T =51
r = 1
c = 1
a=[[0]*c for i in range(r)]
for r in range(1,51):
    for c in range(1,51):
      a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
      print()
#print to html file down below
outfile=open("c:\\data\\pfile.html","w")

outfile.write("<!DOCTYPE html>")
outfile.write("<html>")
outfile.write("<head>")
outfile.write("<title>Kye Fullwood</title>")
outfile.write("<style> table,td{border:1px solid black;border-collaspse:collapse;background-color:aqua;}</style>\r\n")
outfile.write("</head>")
outfile.write("<body>")

outfile.write("<h1>This is a Windchill table</h1>")

outfile.write("<table>")
for V in range(1,51,1):
  outfile.write("<tr>")
  for TV in range(1,51,1):

    outfile.write("<td>"+str(a[r][c])+"</td>\r\n")

  outfile.write("</tr>")
outfile.write("</table>")
outfile.write("</body>")
outfile.write("</html>")
outfile.close()
print("complete")
z=int(4.3/7.9)
V=51
T=51
r=1
c=1
a=[[0]*c表示范围(r)内的i]
对于范围(1,51)内的r:
对于范围(1,51)内的c:
a[c][r]=35.74+0.6215*T-(35.75*V)**0.16+(0.4275*T*V)**0.16
打印()
#打印到下面的html文件
outfile=open(“c:\\data\\pfile.html”、“w”)
输出文件。写(“”)
输出文件。写(“”)
输出文件。写(“”)
outfile.write(“Kye Fullwood”)
write(“table,td{border:1px纯黑色;border collapsse:collapse;background color:aqua;}\r\n”)
输出文件。写(“”)
输出文件。写(“”)
outfile.write(“这是一个Windchill表”)
输出文件。写(“”)
对于范围(1,51,1)内的V:
输出文件。写(“”)
对于范围(1,51,1)内的电视:
outfile.write(“+str(a[r][c])+”\r\n)
输出文件。写(“”)
输出文件。写(“”)
输出文件。写(“”)
输出文件。写(“”)
outfile.close()
打印(“完成”)

当您以上述方式初始化列表时

r = 1
c = 1
a=[[0]*c for i in range(r)]
因为此时c和r都是1,所以列表看起来像这样--[[0]]--所以当您尝试更新列表中除[0][0]之外的任何索引时,都会出现超出范围的错误。因为在这个代码中

for r in range(1,51):
    for c in range(1,51):
      a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
for V in range(1,51,1):
  outfile.write("<tr>")
  for TV in range(1,51,1):

    outfile.write("<td>"+str(a[r][c])+"</td>\r\n")
当您首先初始化列表时,您需要将r和c设置为至少52

就这点而言,在这个代码中

for r in range(1,51):
    for c in range(1,51):
      a[c][r]=35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
for V in range(1,51,1):
  outfile.write("<tr>")
  for TV in range(1,51,1):

    outfile.write("<td>"+str(a[r][c])+"</td>\r\n")
(1,51,1)范围内V的
:
输出文件。写(“”)
对于范围(1,51,1)内的电视:
outfile.write(“+str(a[r][c])+”\r\n)
你只需要打印相同的值2500次,因为你永远不会改变这些循环中的r和c

a=[[0]*c for i in range(r)]
基本上是指
a=[[0]]
,因为您的代码以
c=1
r=1
开头。因此,当您尝试访问索引位于
范围(1,51)
中的矩阵
a
时,会出现“超出范围”异常,因为矩阵中只有一个元素

要创建50x50空矩阵,可以使用以下python习惯用法:

a = [[0 for col in range(50)] for row in range(50)]
但我想从你的代码中你确实需要这个:

a = [[35.74 + 0.6215*T - (35.75*V)**0.16 + (0.4275*T*V)**0.16
      for T in range(1,51)] for V in range(1,51)]

你的代码是脏的删除不相关的解析和添加错误堆栈正如前面的评论所建议的,请删除与问题无关的代码,并添加你得到的确切错误。此时,我们甚至不知道您所指的是哪个循环,代码中有四个循环。