比较运算符在 python 中给出错误答案
Comparison operator giving wrong answer in python
这是文件
12,221,311,4,5,6,71,22
输出
('L:', ['12', '221', '311', '4'])
('R:', ['5', '6', '71', '22'])
('L,R', '12', '5')
错误
******这个条件给出了错误的结果(如果 12<5)它仍然在这个循环中
代码:
def merge(Array,start,end,mid):
A=Array
p=start
q=end
r=mid
size1=q-p+1
size2=r-q
print("size1:", size1)
print("size2:", size2)
L=[None]*size1
R=[None]*size2
#print("L[]", L)
for i in range(size1):
print("i:", i)
L[i]=A[p+i]
print("L:", L)
for j in range(size2):
R[j]=A[q+j+1]
print("R:", R)
#L[size1+1]=99999
#R[size2+1]=99999
i,j=0,0
B=[None]*(r+1)
print("L,R", L[0],R[0])
**#Getting a error here...the condition down is giving wrong answer...**
if L[0]<R[0]:
print("false")
for k in range(p,r+1,1):
print("i:",i)
print("j:",j)
if L[i]<=R[j]:
B[k]=L[i]
i=i+1
else:
B[k]=R[j]
j=j+1
print(B)
def merge_sort(Array,start,end):
p=start
r=end
A=Array
if p<r:
print("P:",p)
print("R:",r)
q=(p+r)/2
print("Q:",q)
#merge_sort(A,p,q)
#merge_sort(A,q+1,r)
merge(A,p,q,r)
def main():
p=0
f = open('input.txt', 'r')
A=[]
#B=[]
for ch in f:
A=ch.split(',')
f.close()
print("Unsorted list")
print(A)
r=len(A)
merge_sort(A,p,r-1)
if __name__=="__main__":
main()
因为你在比较字符串。
将主函数改成这样:
def main():
p=0
f = open('input.txt', 'r')
A=[]
#B=[]
for ch in f:
A=ch.split(',')
f.close()
A = [int(x) for x in A] #<--- Convert values to ints
print("Unsorted list")
print(A)
r=len(A)
merge_sort(A,p,r-1)
新输出:
未排序列表
[12, 221, 311, 4, 5, 6, 71, 22]
('P:', 0)
('R:', 7)
('Q:', 3)
('size1:', 4)
('size2:', 4)
('i:', 0)
('i:', 1)
('i:', 2)
('i:', 3)
('L:', [12, 221, 311, 4])
('R:', [5, 6, 71, 22])
('L,R', 12, 5)
('i:', 0)
('j:', 0)
('i:', 0)
('j:', 1)
('i:', 0)
('j:', 2)
('i:', 1)
('j:', 2)
('i:', 1)
('j:', 3)
('i:', 1)
('j:', 4)
(然后失败)
Traceback (most recent call last):
File "test.py", line 68, in <module>
main()
File "test.py", line 65, in main
merge_sort(A,p,r-1)
File "test.py", line 51, in merge_sort
merge(A,p,q,r)
File "test.py", line 31, in merge
if L[i]<=R[j]:
IndexError: list index out of range
这是文件
12,221,311,4,5,6,71,22
输出
('L:', ['12', '221', '311', '4'])
('R:', ['5', '6', '71', '22'])
('L,R', '12', '5')
错误
******这个条件给出了错误的结果(如果 12<5)它仍然在这个循环中
代码:
def merge(Array,start,end,mid):
A=Array
p=start
q=end
r=mid
size1=q-p+1
size2=r-q
print("size1:", size1)
print("size2:", size2)
L=[None]*size1
R=[None]*size2
#print("L[]", L)
for i in range(size1):
print("i:", i)
L[i]=A[p+i]
print("L:", L)
for j in range(size2):
R[j]=A[q+j+1]
print("R:", R)
#L[size1+1]=99999
#R[size2+1]=99999
i,j=0,0
B=[None]*(r+1)
print("L,R", L[0],R[0])
**#Getting a error here...the condition down is giving wrong answer...**
if L[0]<R[0]:
print("false")
for k in range(p,r+1,1):
print("i:",i)
print("j:",j)
if L[i]<=R[j]:
B[k]=L[i]
i=i+1
else:
B[k]=R[j]
j=j+1
print(B)
def merge_sort(Array,start,end):
p=start
r=end
A=Array
if p<r:
print("P:",p)
print("R:",r)
q=(p+r)/2
print("Q:",q)
#merge_sort(A,p,q)
#merge_sort(A,q+1,r)
merge(A,p,q,r)
def main():
p=0
f = open('input.txt', 'r')
A=[]
#B=[]
for ch in f:
A=ch.split(',')
f.close()
print("Unsorted list")
print(A)
r=len(A)
merge_sort(A,p,r-1)
if __name__=="__main__":
main()
因为你在比较字符串。
将主函数改成这样:
def main():
p=0
f = open('input.txt', 'r')
A=[]
#B=[]
for ch in f:
A=ch.split(',')
f.close()
A = [int(x) for x in A] #<--- Convert values to ints
print("Unsorted list")
print(A)
r=len(A)
merge_sort(A,p,r-1)
新输出:
未排序列表
[12, 221, 311, 4, 5, 6, 71, 22]
('P:', 0)
('R:', 7)
('Q:', 3)
('size1:', 4)
('size2:', 4)
('i:', 0)
('i:', 1)
('i:', 2)
('i:', 3)
('L:', [12, 221, 311, 4])
('R:', [5, 6, 71, 22])
('L,R', 12, 5)
('i:', 0)
('j:', 0)
('i:', 0)
('j:', 1)
('i:', 0)
('j:', 2)
('i:', 1)
('j:', 2)
('i:', 1)
('j:', 3)
('i:', 1)
('j:', 4)
(然后失败)
Traceback (most recent call last):
File "test.py", line 68, in <module>
main()
File "test.py", line 65, in main
merge_sort(A,p,r-1)
File "test.py", line 51, in merge_sort
merge(A,p,q,r)
File "test.py", line 31, in merge
if L[i]<=R[j]:
IndexError: list index out of range