谁能告诉我我做错了什么?!我在Python 3中使用tkinter创建了一个GUI。我打算创建数组并在窗口打开时将其显示到列表框。下面,您可以看到我使用过的代码。
错误:
Population.X[i] = float(random.random()) * self.XMin
IndexError: list assignment index out of range
CODE:
class Population:
X = []
Y = []
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
self.create_array()
def widgets(self):
self.first_listbox = Listbox(self)
self.first_listbox.grid()
def create_array(self):
i = 0
while i < 20:
Population.X[i] = float(random.random()) * self.XMin
# x = random.random() - Random float x | 0.0 <= x < 1.0 |
if Population.X[i] == 0:
Population.X[i] = -0.1
Population.Y[i] = 1 / Population.X[i]
i += 1
while i < 20:
self.first_listbox.insert(i, Population.X[i])
i += 1
root = Tk()
root.geometry("600x400")
app = Application(root)
root.mainloop()
答案 0 :(得分:2)
您收到IndexError
,因为您在列表中没有元素时尝试访问元素编号0
。
您无法像这样创建新索引:
my_list = []
my_list[12] = 'whatever'
但是你可以迭代地附加到列表中:
def create_array(self):
for i in range(20):
new_item = float(random.random()) * self.XMin)
if new_item == 0:
new_item = -0.1
Population.X.append(new_item)
Population.Y.append(1 / new_item)
此外,您的代码的这部分将永远无法访问:
while i < 20:
self.first_listbox.insert(i, Population.X[i])
i += 1
因为i
离开前一个循环时为20
。您需要将i
设置回0
或更好以重新考虑整个事情:
for item in Population.X:
self.first_listbox.insert(END, item)
请注意
new_item = float(random.random()) * self.XMin)
if new_item == 0:
new_item = -0.1
可以写成一行:
new_item = float(random.random()) * self.XMin) or -0.1
但前者完全正常且易于掌握。这主要是品味问题。