我正在為快速排序演算法制作一個可視化表示工具,我正在使用一個一維陣列,它是一個隨機范圍的索引,填充了一個隨機范圍的值。我相信我在運行時用來填充這個陣列的方法導致了這個問題,因為我注意到它發生在大約 50% 的時間,但我無法確定索引值之間的任何因果關系/相關性,或者將回傳此錯誤的陣列長度:
canvas.create_line(masterArray[x] 20 ,1 ,masterArray[x] 20, masterArray[currValue] * 1 100)
IndexError: list index out of range
我將在下面附上代碼。我的理論是,正在填充的一些值沒有為要繪制的線提供足夠的資訊,即:x 起點、y 起點、x 終點和 y 終點。不幸的是,我無法想到我當前系統的任何值不會提供此資訊。如果有人有任何想法,我真的很感激朝正確方向的推動。
from tkinter import Tk, Canvas, Frame, BOTH, W
import random
import numpy as np
randInt = random.randint(10, 100)
masterArray = [random.randint(10,75) for _ in range(randInt)]
print(randInt)
print(masterArray)
class Example(Frame):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.master.title("Lines")
self.pack(fill=BOTH, expand=1)
sortedArr =quicksort(masterArray)
canvas = Canvas(self)
##canvas.create_text(100,100, anchor=W , font ="Purisa", text = len(masterArray))
for x in masterArray:
currValue = masterArray[x]
canvas.create_line(masterArray[x] 20 ,1 ,masterArray[x] 20, masterArray[currValue] * 1 100)
for x in sortedArr:
currValue = sortedArr[x]
canvas.create_line(sortedArr[x] 20 ,500,sortedArr[x] 20, 500 - sortedArr[currValue] - 100 )
##canvas.create_line(x start,ystart ,x end, y end)
canvas.create_text(125, 250, anchor=W, font="Purisa",text = "The total number of elements is: " str(len(masterArray)))
##canvas.create_line(15, 25, 200, 25)
##canvas.create_line(300, 35, 300, 200, dash=(4, 2))
## canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)
canvas.pack(fill=BOTH, expand=1)
def quicksort(arr):
elements = len(arr)
if elements < 2:
return arr
current_pos = 0
for i in range(1, elements):
if arr[i] <= arr[0]:
current_pos = 1
temp = arr[i]
arr[i] = arr[current_pos]
arr[current_pos] = temp
temp = arr[0]
arr[0] = arr[current_pos]
arr[current_pos] = temp
left = quicksort(arr[0:current_pos])
right = quicksort(arr[current_pos 1:elements])
arr = left [arr[current_pos]] right
return arr
def main():
root = Tk()
ex = Example()
root.geometry("500x500 300 300")
root.mainloop()
if __name__ == '__main__':
main()
我嘗試使用隨機值引數來查看是否有任何改進,但到目前為止還沒有任何運氣。我很感激任何幫助。謝謝。
uj5u.com熱心網友回復:
一定要研究什么是迭代器以及for它的作用:
像這樣的事情要好得多:
for x,currValue in enumerate(masterArray):
canvas.create_line(x 20 ,1 ,x 20, currValue * 1 100)
for x,currValue in enumerate(sortedArr):
canvas.create_line(x 20 ,500, x 20, 500 - currValue - 100 )
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399729.html
