冒泡排序:python编程入门,请大家帮我看一下非常感谢

想问一下大神我这个代码运行报错,显示n没有定义,len(numbers)不是已经赋值给n了吗
代码:
def bubblesort(numbers):
n = len(numbers)
for i in range(n):
for j in range(0,n-i-1):
if numbers[j]>numbers[j+1]:
numbers[j],numbers[j+1]=numbers[j+1],numbers[j]
numbers = [64, 34, 25, 12, 22, 11, 90]
bubblesort(numbers)
print('排序后:')
for i in range(len(numbers)):
print('%d'%numbers[i],end='')

for循环缩进有问题,应该是跟n = len(numbers)同层级,否则就会出现n未定义。
代码修改如下:

def bubblesort(numbers):
    n = len(numbers)
    for i in range(n):
        for j in range(0,n-i-1):
            if numbers[j]>numbers[j+1]:
                numbers[j],numbers[j+1]=numbers[j+1],numbers[j]
numbers = [64, 34, 25, 12, 22, 11, 90]
bubblesort(numbers)
print('排序后:')
for i in range(len(numbers)):
    print('%d'%numbers[i],end=' ')

img

上面代码有误,n与for应该同级,代码如下


def bubblesort(numbers):
  n = len(numbers)
  for i in range(n):
    for j in range(0, n - i - 1):
     if numbers[j] > numbers[j + 1]:
      numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
numbers = [64, 34, 25, 12, 22, 11, 90]
bubblesort(numbers)
print('排序后:')
for i in range(len(numbers)):
    print('%d' % numbers[i])

测试如下

img

兄弟,你这代码格式有点问题呀!直接理解的话,就是n是定义在方法内部的一个变量,也就是n是一个局部变量,在方法外部无法直接访问的,你把代码好好的格式化一下,把相应的代码写到方法内部。

额,python 有严格的缩进规则,你的 for 循环代码应该是在 bubbleSort 函数内的。因此

def bubbleSort(numbers):
    # ...
    for i in range(n):
        for j in range(n):
            if ...:
                do()
            else:
                do()

img


这里的n没有赋值,我给你改了下


def bubble_sort(array):
    for i in range(1, len(array)):
        for j in range(0, len(array)-i):
            if array[j] > array[j+1]:
                array[j], array[j+1] = array[j+1], array[j]
    return array
 
 
if __name__ == '__main__':
    array = [64, 34, 25, 12, 22, 11, 90]
    print(bubble_sort(array))

img