比较运算符在 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