Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 代码查看我的buggy bubble排序代码_Python_Sorting - Fatal编程技术网

Python 代码查看我的buggy bubble排序代码

Python 代码查看我的buggy bubble排序代码,python,sorting,Python,Sorting,我为冒泡排序编写了这段代码,它显示了以下错误: File "bubble.py", line 6 for i in range(0,n) 谁能告诉我如何使用range功能,以便我可以从用户那里获取输入n print "Enter n" n = raw_input() print "enter elements" a = [] for i in range(0,n) temp = raw_input() a[i].append(temp) for i in range(

我为冒泡排序编写了这段代码,它显示了以下错误:

File "bubble.py", line 6
    for i in range(0,n)
谁能告诉我如何使用
range
功能,以便我可以从用户那里获取输入
n

print "Enter n"
n = raw_input()
print "enter elements"
a = []
for i in range(0,n)
    temp = raw_input()
    a[i].append(temp)

for i in range(0,n)
    for j in range(0,n-1)
        if a[j]>a[j+1]
            temp = a[j]
            a[j] = a[j+1]
            a[j+1] = temp


for i in range(0,n)
    print a[i]

Python使用冒号来开始块,每个for、if、while等都需要一个:结尾

for i in range(0,n):
    for j in range(0,n-1):
        if a[j]>a[j+1]:

其他问题:

n = raw_input()
n
将是一个
str
,您需要将其转换为int,如下所示:

n = int(raw_input())

对于
range
,0是一个隐式的开始,使用
range(n)
range(0,n)


在您的第一个循环中

temp = raw_input()
a[i].append(temp)
但是
a
是一个没有任何内容的列表,您使用它就像使用列表列表一样。相反,我认为您只是想附加到
a
,并且您必须再次将该值转换为数字

temp = float(raw_input())
a.append(temp)
也可能是

a.append(float(raw_input()))

raw_输入函数接受一个字符串,并将其打印为用户提示。您可以将前两行缩短为

n = int(raw_input("Enter n"))

您上次的
for
循环非常c风格。您应该更喜欢一个更具pythonic风格的“for each”循环。不要迭代索引,迭代元素,将最后一个循环更改为

for e in a:
    print e
您可能还想直接打印一份


最后,值得一提的是,python已经有了一个排序函数。如果您的任务不是编写排序函数,那么只需通过

a.sort()

在从用户处读取所有信息后。

您在每行末尾缺少冒号,带有
if
for

for j in range(0,n-1):
#                    ↑ THIS
    if a[j]>a[j+1]:
    #             ↑ THIS
等等

另外,
raw\u input()
返回一个字符串。您需要将其转换为整数:

n = int(raw_input())
同样的情况也适用于您使用的另一个地方
raw\u input()
——情况更糟,因为程序不会失败,但您的代码会安静地对元素排序,而不是按数字排序

以下不是错误,但有助于使代码更加习惯化:

  • 范围(0,n)
    可以写成
    范围(n)
  • 交换
    a[j]
    a[j+1]
    可以写成
    a[j],a[j+1]=a[j+1],a[j]

    • 您的代码中有很多错误。首先是失踪的科隆之后

      for i in range(0,n): 
      for j in range(0,n-1):
      if a[j]>a[j+1]:
      
      接下来需要将
      raw\u input()转换为int(raw\u input())

      第二行是
      a[i]。append()应该改为a.append()

      这是修改后的代码

      print "Enter n"
      n = int(raw_input())
      print "enter elements"
      a = []
      for i in range(0,n):
          temp = int(raw_input())
          a.append(temp)
      
      for i in range(0,n):
          for j in range(0,n-1):
              if a[j]>a[j+1]:
                  temp = a[j]
                  a[j] = a[j+1]
                  a[j+1] = temp
      
      
      for i in range(0,n):
          print a[i]
      

      您只需使用
      range(n)
      ,0是隐式的。请阅读任何Python教程。例如,官方的答案:只使用代码的答案是不鼓励的,因为它们没有什么用处。你应该解释代码是如何工作的,并试图消除OP的任何误解,而不是仅仅给他们一个解决方案。这段代码也是错误的。在第一个循环中,您没有将用户的输入转换为数字,因此它将执行一个字符串比较,这几乎肯定不是OP想要的。好的,Ryan,我必须告诉您,在问题的任何地方,您都不需要对整数进行排序。但是我还是做了修改。你的解释仍然没有真正解释太多,为什么必须使用
      int(raw_input())
      a[i].append()有什么问题?您没有做一些看起来很明显的更改,例如
      range(n)
      而不是
      range(0,n)
      。最后一个循环很笨拙,交换可以在一行中完成。如果你想发布一个大的代码块,就把它做成一个模型。是的,我知道它没有指定整数(这就是为什么我实际使用了
      float
      ),但我再次怀疑OP是否在尝试对字符串排序。好的,我明白你的意思了。下次我会尽量准确。谢谢