索引器错误:列表分配索引超出范围(列表分配)

2024-04-24 08:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使这个p=[0,25,43.3013,50,43.3013,25,0,0,0,0,0]只分配给位置1,2,3,4,5,并使其他值为零。我有个错误:

Tkinter回调异常

回溯(最近一次呼叫):

文件“C:\Users\sel\Anaconda3\lib\tkinter\uuuu init\uuuuuu.py”,第1705行,incall 返回自身功能(*参数)

文件“”,第28行,在打开的窗口1中

p[1]=25

索引器错误:列表分配索引超出范围

如何修复?你知道吗

import numpy as np
import xlsxwriter
import tkinter as tk
from tkinter import *

import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure


window=Tk()


def open_window1():
    y = 1/2
    b = 1/4

    result = []
    u = []
    v = []

    t = []
    #p = [0,25,43.3013,50,43.3013,25,0,0,0,0,0]

    p = []

    p[1]=25
    p[2]=43.3013
    p[3]=50
    p[4] = 43.3013
    p[5] = 25

    a = []
    pn = []
    pn.append(0)

    m = 0.4559/100000
    k = 18
    c = 0.2865
    u.append(0)
    v.append(0)
    a.append((p[0]-c*v[0]-k*u[0])/m)

    dt = 0.1
    Tn = 1 

    st = Tn/dt + 1

    step = int(st)

    x = 0.0
    for i in range(step):
        z = x
        t.append("%.2f"% z)
        x = x + dt


    a1 =(m/(b*dt*dt)+y*c/(b*dt))
    a2 = (m/(b*dt)+(y/b-1)*c)
    a3 = (((1/(2*b))-1)*m + dt*((y/(2*b))-1)*c)
    kn = k + a1


    for i in range(step):
        while(i<1 and i>5):
            p[i] = 0


    for i in range(step-1):
        pn.append(np.around(p[i+1]+ a1*u[i] + a2*v[i] + a3*a[i], decimals=4))
        u.append(np.around(pn[i+1]/kn, decimals=4))
        v.append(np.around(y*(u[i+1]-u[i])/(b*dt) + (1-y/b)*v[i] + dt* (1-y/(2*b))*a[i], decimals=4))
        a.append(np.around((u[i+1]-u[i])/(b*dt*dt) - v[i]/(b*dt)-(1/(2*b)-1)*a[i], decimals=4))

    top = tk.Toplevel()
    top.wm_geometry("1200x540")
    top.title('Result table')

    canvas = tk.Canvas(top,bg="white", width=1195, height=540)
    canvas.grid(row=0,column=180)

    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=t[i], font= "calibri 12", bg="white")
        canvas.create_window(3,40*(i+1), window=b6, anchor=tk.NW)

    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=p[i], font= "calibri 12", bg="white")
        canvas.create_window(100,40*(i+1), window=b6, anchor=tk.NW)            

    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=pn[i], font= "calibri 12", bg="white")
        canvas.create_window(200,40*(i+1), window=b6, anchor=tk.NW)         

    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=a[i], font= "calibri 12", bg="white")
        canvas.create_window(300,40*(i+1), window=b6, anchor=tk.NW)     


    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=v[i], font= "calibri 12", bg="white")
        canvas.create_window(400,40*(i+1), window=b6, anchor=tk.NW)   

    for i in range(0,len(t)):

        b6 = tk.Label(canvas, text=u[i], font= "calibri 12", bg="white")
        canvas.create_window(500,40*(i+1), window=b6, anchor=tk.NW)   


b1=Button(window, text="Cons. Avg.", width=12, command=open_window1)
b1.grid(row=6,column=0)

window.title("Fill in the blanks")
window.geometry("350x133")
window.mainloop()

Tags: textinimportforlendtrangewindow
1条回答
网友
1楼 · 发布于 2024-04-24 08:37:33
p = []

p[1]=25
p[2]=43.3013
p[3]=50
p[4] = 43.3013
p[5] = 25

这在Python中是不允许的;不能分配给尚未存在的列表索引。(同样,第一个索引应该是0,而不是1。)您将p设为空列表,因此不允许这些赋值。你知道吗

要将值附加到列表的末尾,不管它已经包含多少元素,请使用.append()方法。你知道吗

但是,最好首先使用注释掉的版本:p = [0,25,43.3013,50,43.3013,25,0,0,0,0,0]。你知道吗

相关问题 更多 >