代码审查我的错误冒泡排序代码
Code review my buggy bubble sort code
我为冒泡排序写了这段代码,它显示了这个错误:
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_input 函数接受一个字符串作为用户提示打印。您可以将前两行缩短为
n = int(raw_input("Enter n"))
你的最后一个 for
循环是非常 C 风格的。您应该更喜欢 pythonic "for-each" 循环。不要迭代索引,迭代元素,将最后一个循环更改为
for e in a:
print e
您可能还想直接 print a
。
最后,值得一提的是 python 中已经有一个排序功能。如果您的任务不是编写排序函数,那么只需使用它即可
a.sort()
阅读用户的所有内容后。
您在 if
和 for
:
的每行末尾缺少冒号
for j in range(0,n-1):
# ↑ THIS
if a[j]>a[j+1]:
# ↑ THIS
等等。
另外,raw_input()
returns 一个字符串。您需要将其转换为整数:
n = int(raw_input())
您使用 raw_input()
的其他地方也是如此 - 情况有点糟糕,因为程序不会失败,但您的代码会安静地对元素进行排序 lexicographically 而不是比数字。
以下不是错误,但有助于使您的代码更加地道:
range(0,n)
可以写成range(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_input() as int(raw_input())
又是行a[i].append() should be changed to 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]
我为冒泡排序写了这段代码,它显示了这个错误:
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_input 函数接受一个字符串作为用户提示打印。您可以将前两行缩短为
n = int(raw_input("Enter n"))
你的最后一个 for
循环是非常 C 风格的。您应该更喜欢 pythonic "for-each" 循环。不要迭代索引,迭代元素,将最后一个循环更改为
for e in a:
print e
您可能还想直接 print a
。
最后,值得一提的是 python 中已经有一个排序功能。如果您的任务不是编写排序函数,那么只需使用它即可
a.sort()
阅读用户的所有内容后。
您在 if
和 for
:
for j in range(0,n-1):
# ↑ THIS
if a[j]>a[j+1]:
# ↑ THIS
等等。
另外,raw_input()
returns 一个字符串。您需要将其转换为整数:
n = int(raw_input())
您使用 raw_input()
的其他地方也是如此 - 情况有点糟糕,因为程序不会失败,但您的代码会安静地对元素进行排序 lexicographically 而不是比数字。
以下不是错误,但有助于使您的代码更加地道:
range(0,n)
可以写成range(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_input() as int(raw_input())
又是行a[i].append() should be changed to 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]