在Colab中为快速排序添加全局变量引发缩进错误求助
快速排序添加全局变量后缩进错误的排查与修复
问题
在Colab环境下为快速排序算法添加全局变量r后,触发IndentationError,提示缩进不匹配,但视觉上缩进是对齐的。未添加该变量时代码运行正常。
错误代码:
# Quicksort Sort r=0 def partition(array, low, high): global r pivot = array[high] i = low - 1 for j in range(low, high): if array[j] <= pivot: i = i + 1 (array[i], array[j]) = (array[j], array[i]) r=r+1 (array[i + 1], array[high]) = (array[high], array[i + 1]) r=r+1 return i + 1 def quickSort(array, low, high): if low < high: pi = partition(array, low, high) quickSort(array, low, pi - 1) quickSort(array, pi + 1, high) data = [7,1,3,2,4,5,6] print("Unsorted Array") print(data) size = len(data) quickSort(data, 0, size - 1) print('Sorted Array in Ascending Order:') print(data,r)
报错信息:
File "<tokenize>", line 11 r=r+1 ^ IndentationError: unindent does not match any outer indentation level
原因分析
问题出在混合使用空格和制表符作为缩进,Python对缩进的一致性要求极高——哪怕视觉上对齐,只要同一代码块内混用不同缩进字符(比如有的行用2个空格,有的用制表符),解释器就会判定缩进不匹配。添加r变量时的修改,恰好暴露了原本隐藏的混合缩进问题。
修复方案
将所有缩进统一为4个空格(Python标准缩进规范),同时调整r=r+1的缩进层级到对应代码块内:
# Quicksort Sort r = 0 def partition(array, low, high): global r pivot = array[high] i = low - 1 for j in range(low, high): if array[j] <= pivot: i = i + 1 (array[i], array[j]) = (array[j], array[i]) r = r + 1 # 缩进匹配if判断块 (array[i + 1], array[high]) = (array[high], array[i + 1]) r = r + 1 # 缩进匹配partition函数外层 return i + 1 def quickSort(array, low, high): if low < high: pi = partition(array, low, high) quickSort(array, low, pi - 1) quickSort(array, pi + 1, high) data = [7,1,3,2,4,5,6] print("Unsorted Array") print(data) size = len(data) quickSort(data, 0, size - 1) print('Sorted Array in Ascending Order:') print(data, r)
预防建议
在Colab中可以使用Edit菜单下的Convert Indents to Spaces功能,自动将所有制表符转换为空格,避免混合缩进问题。
内容的提问来源于stack exchange,提问作者Beryl Amend
相关产品推荐
相关产品推荐

