下面的代码有一个小错误,但是执行了我认为是插入排序的操作。我有两个问题 1.为什么在运行时发生索引错误? 2.为了教学和学习的目的,我如何简化整个代码,合并for循环的使用。我想有人解释一下它们重复的地方,以及它们如何对应于使用循环的解决方案。 *我意识到我需要使用I和j来使用嵌套循环,但还不太清楚如何使用。我已经添加了外部级别的循环,它为循环的长度提供了I
代码:
def main():
#test with 6125
#test with 0142
#test with 4312
#test with 5432
list=[4,2,6,1]
print(list)
for i in range(len(list)):
#checking first element
if list[i+1]<list[i]:
temp1=list[i]
list[i]=list[i+1]
list[i+1]=temp1
print("first iteration:",list)
#Checking second element
if list[i+2]<list[i]:
temp1=list[i]
list[i]=list[i+2]
list[i+2]=temp1
print("second iteration:",list)
if list[i+2]>list[i]:
if list[i+2]<list[i+1]:
temp2=list[i+1]
list[i+1]=list[i+2]
list[i+2]=temp2
print("second iteration else #1:",list)
#Checking Third element
if list[i+3]<list[i]:
temp1=list[i]
temp2=list[i+1]
temp3=list[i+2]
list[i]=list[i+3]
list[i+1]=temp1
list[i+2]=temp2
list[i+3]=temp3
print("third iteration:",list)
elif list[i+3]>list[i]:
if list[i+3]<list[i+1]:
temp1=list[i+1]
temp2=list[i+2]
temp3=list[i+3]
list[i+1]=temp2
list[i+2]=temp3
list[i+3]=temp1
print("third iteration else #1:",list)
elif list[i+3]>list[i+1]:
if list[i+3]<list[i+2]:
temp3=list[i+2]
list[i+2]=list[i+3]
list[i+3]=temp3
print("third iteration else #2!",list)
main()
输出#1:
#Test with [4, 2, 6, 1]
('first iteration:', [2, 4, 6, 1])
('third iteration:', [1, 2, 4, 6])
**IndexError:** list index out of range on line 54 in main.py
输出测试#2
#Test with [5, 4, 3, 2]
('first iteration:', [4, 5, 3, 2])
('second iteration:', [3, 5, 4, 2])
('second iteration else #1:', [3, 4, 5, 2])
('third iteration:', [2, 3, 4, 5])
代码的小饰物可在此处找到(用于在线修复) https://trinket.io/python/fb5116c1ed
注意:我意识到python可以在不使用临时变量的情况下执行此操作,但我希望使用它们实现解决方案。在任何答案中,请使用现有的和我最初提供的代码进行分解
最外层的
for
循环很混乱,导致了问题。显式地遍历列表的四个元素,进行所有必要的检查。但是,您可以先增加i
,然后尝试对元素1到4重复此过程,最后对元素2到5以及元素3到6重复此过程你没有超过3的元素,这是你的错误。我怀疑你只需要去掉这个循环
我禁用了循环,将
i
保持为0,并且程序在您编写的范围内运行正常相关问题 更多 >
编程相关推荐