Python入门遇index未定义错误,求解答(附选择排序代码)
选择排序代码的“index未定义”错误分析及修正
错误原因
你写的print(' Resolving element[' , index , '] to ' , array)语句位于selection_sort函数外部,但index是函数内部for循环的局部变量——局部变量的作用域仅限定义它的函数内部,函数外部无法访问,因此运行时会抛出“index未定义”的错误。
另外你的选择排序逻辑也存在问题:每次在内层循环找到更小元素时就立刻交换,这不符合选择排序“先遍历找到最小值位置,再一次性交换”的核心逻辑,会导致排序结果错误。
修正后的代码
def selection_sort(array): for index in range(0, len(array) - 1): value = array[index] current = index # 遍历找到当前区间内最小值的位置 for element in range(index + 1, len(array)): if array[element] < array[current]: current = element # 内层循环结束后,再交换当前位置与最小值位置的元素 array[index] = array[current] array[current] = value # 将打印语句移至函数内部,合法访问index变量 print(' Resolving element[' , index , '] to ' , array) array = [5, 3, 1, 2, 6, 4] print('Selection Sort...\nArray :', array) selection_sort(array) print('Array :', array)
修正说明
- 将打印语句移到
selection_sort函数内部的外层循环中,这样就能在index的作用域内访问它; - 把交换元素的代码移至内层循环外,确保找到最小值的位置后再完成交换,符合选择排序的正确执行流程。
内容的提问来源于stack exchange,提问作者Jeff Colbert
相关产品推荐
相关产品推荐

