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是否在尝试对字符串排序。好的,我明白你的意思了。下次我会尽量准确。谢谢