python - 迭代快速排序步骤 - 乌龟中的可视化
问题描述
我正在Python3
用Turtle
. 它可视化quicksort
算法。我想改进我的应用程序,这样我就可以通过等待用户的点击来展示算法的每一步。
我input()
在算法中间尝试了简单的方法,但这需要控制台在应用程序窗口进入后台时处于活动状态。现在我正在尝试使用onscreenclick()
,但是当算法到达某个点时,它会停止监听鼠标事件。
我该怎么做?有没有其他方法可以做到这一点?
def partition(array, start, end):
global clickedFlag
pivotIndex = start
pivotValue = array[end]
for i in range(start, len(array) - 1):
if array[i] < pivotValue:
if clickedFlag:
swap(array, i, pivotIndex)
pivotIndex += 1
clickedFlag = False
else:
while clickedFlag == False:
onscreenclick(clicked)
listen()
swap(array, pivotIndex, end)
return pivotIndex
def clicked(x,y):
global clickedFlag
clickedFlag = True
return clickedFlag
解决方案
我建议您将“等待点击”逻辑集中在一个地方,而不是将其与其余的排序逻辑混合。
例如
def waitForClick():
global clickedFlag
clickedFlag = False
while clickedFlag == False:
onscreenclick(clicked)
listen()
...
if array[i] < pivotValue:
waitForClick()
swap(array, i, pivotIndex)
pivotIndex += 1
...
推荐阅读
- c# - 从 Session.GetObjects 获取列表
- asp.net - 使用 AJAX Asp.Net MVC 更改页面问题
- javascript - Vue.js 使用 document.getElementById('id').value 设置输入值不起作用
- java - JTable - CellHighlight 和 RowHighlight 问题
- java - 一个请求中带有 json 的 REST API 多部分文件
- java - 没有时区的 Java 字符串到日期
- coq - 将包含 y 的公式转换为包含 f(x) 的定理的 Coq 证明
- php - 永久重定向不适用于主题标签 - Htaccess
- javascript - 为什么阴影时不能引用变量?
- python - 在另一个模块中使用我的烧瓶 SQLAlchemy 模型?