0

考虑:

from Tkinter import *

class App(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        self.entryLabel = Label(self, text="Please enter a list of numbers (no commas):")
        self.entryLabel.grid(row=0, column=0, columnspan=2)

        self.listEntry = Entry(self)
        self.listEntry.grid(row=0, column=2, sticky=E)

        self.entryLabel = Label(self, text="Please enter an index value:")
        self.entryLabel.grid(row=1, column=0, columnspan=2, sticky=E)

        self.indexEntry = Entry(self)
        self.indexEntry.grid(row=1, column=2)

        self.runBttn = Button(self, text="Run Function", command=self.psiFunction)
        self.runBttn.grid(row=2, column=0, sticky=W)

        self.answerLabel = Label(self, text="Output List:")
        self.answerLabel.grid(row=2, column=1, sticky=W)

此代码构建了一个小型用户界面,然后用于以下功能:

    def psiFunction(self):
        j = int(self.indexEntry.get())
        valueList = list(self.listEntry.get())
        x = map(int, valueList)
        if x[0] != 0:
            x.insert(0, 0)
        rtn = []
        for n2 in range(0, len(x) * j - 2):
            n = n2 / j
            r = n2 - n * j
            if  r == 0:
                rtn.append(j * x[n])
            else: 
                rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
        self.answer = Label(self, text=rtn)
        self.answer.grid(row=2, column=2, sticky=W)


if __name__ == "__main__":
    root = Tk()
    app = App(root)
    root.mainloop()

例如,如果我们取 j = 3 并且我们的列表 x = [0,1,2,3,4,5] 我们得到 [0,1,2,3.....,13,14,15] 作为我们的输出列表(尽管程序将其输出为字符串)。这是通过使用来自固定参数 j 的输入列表中的项来计算长度为 len(x) * j - 2 的输出列表的值来完成的。现在,这个例子与上面的代码配合得很好。但是,如果我尝试采用 j=4 x = [0,1,2,3,4,5] 什么都没有出现 - 我没有得到任何输出。我也没有收到任何错误消息,所以我不确定为什么会出现这个问题。起初我认为这可能与列表长度小于 j 值有关(只是猜测)但这个例子表明我的想法是错误的。有谁知道为什么会发生这种情况?

注意:标题指的是使用 python 中的函数时不会发生这种情况,从 tkinter 代码中删除。

编辑:更改定义代码

def psiFunction(self):
        j = int(self.indexEntry.get())
        valueList = list(self.listEntry.get())
        x = map(int, valueList)
        length = len(x)
        if x[0] != 0:
            x.insert(0, 0)
        rtn = []
        for n2 in range(0, length * j):
            n = n2 / j
            r = n2 - n * j
            if  r == 0:
                rtn.append(j * x[n])
            else: 
                rtn.append(j * x[n] + r * (x[n + 1] - x[n]))
        self.answer = Label(self, text=rtn)
        self.answer.grid(row=2, column=2, sticky=W)
4

1 回答 1

1

我不知道为什么您的计算机没有错误,但是您的这部分代码确实给出了错误x=[0,1,2,3,4,5]and j=4

for n2 in range(0, len(x) * j - 2):
            n = n2 / j
            r = n2 - n * j
            if  r == 0:
                rtn.append(j * x[n])
            else: 
                rtn.append(j * x[n] + r * (x[n + 1] - x[n]))

让我们看看,range(0, len(x) * j - 2)等于range(0, 22),所以当n2谈到 21 时,n = 5, j = 1。它将进入 else 并且会有x[6],这将引发 indexerror,并且您无法获得所需的输出。

于 2013-07-27T14:20:13.390 回答