比较返回错误布尔值的两个函数的输出(列表)
Comparing outputs (list) of two functions returning wrong boolean
我写了两个函数largest_number
和largest_numbercopied
和运行一个压力测试来比较它们的结果。这两个函数都输出参数列表的 rear运行ged 版本。但问题是,当我 运行 压力测试时,我看到即使两个输出列表不相同(顺序不同),压力测试也显示正常。尽管我写信只在 largest_number(a) == largest_numbercopied(a)
时才输入 ok。实际上,我之前在其他算法中遇到过这种压力测试功能有点类似的问题,但经过几次试验后这些问题得到了解决,我不知道是什么导致了这个问题。
def maximum(m,n):
m_=m
n_=n
if m<n:
temp=m
m=n
n=temp
if m==n:
return 1
mlist= []
for i in range(len(str(m))):
mlist.append(m//(10**(len(str(m))-1)))
m= m % (10**(len(str(m))-1))
nlist= []
for i in range(len(str(n))):
nlist.append(n//(10**(len(str(n))-1)))
n= n % (10**(len(str(n))-1))
digitlist= [mlist, nlist]
if digitlist[0][0]==digitlist[1][0]:
if len(digitlist[1])==1:
if digitlist[0][1]>= digitlist[0][0]:
res= 1
else:
res= 0
else:
if digitlist[0][1]==digitlist[1][1]:
if digitlist[0][2]>=digitlist[0][1]:
res= 1
else:
res= 0
elif digitlist[0][1]>digitlist[1][1]:
res= 1
else:
res= 0
elif digitlist[0][0]>digitlist[1][0]:
res= 1
else:
res= 0
if m_<n_:
if res==0:
res=1
else:
res=0
return res
def largest_number(a):
a= sorted(a, reverse=True)
res=""
c=0
while True:
c=0
for i in range(len(a)-1):
if maximum(a[i],a[i+1])==0:
c+=1
idx=i
#print(idx,c)
break
if c==0:
break
temp= a[idx]
a[idx]= a[idx+1]
a[idx+1]= temp
#print(a)
return a
def IsGreaterOrEqual(digit, max_digit):
return int(str(digit)+str(max_digit))>=int(str(max_digit)+str(digit))
def largest_numbercopied(lst):
answer = []
res=""
while lst!=[]:
max_digit = 0
for digit in lst:
if IsGreaterOrEqual(digit, max_digit):
max_digit = digit
answer.append(max_digit)
lst.remove(max_digit)
return answer
def stresstest():
import random
okcounter=0
while True:
n=random.randint(1,100)
a=[]
for i in range(n):
a.append(random.randint(1,1000))
print(f'numbers= {a}, Result1= {largest_number(a)}')
print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')
if largest_number(a)== largest_numbercopied(a):
okcounter= okcounter+1
print('ok\n')
if okcounter>=100:
break
else:
print('Error')
break
stresstest()
largest_numbercopied
从 a
中删除元素,但它对传入的数组而不是它的副本进行操作。这意味着你的行
print(f'numbers= {a}, Result1= {largest_number(a)}')
print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')
将导致 a
被清除,然后
if largest_number(a)== largest_numbercopied(a)
将比较对空列表进行操作的结果。
我写了两个函数largest_number
和largest_numbercopied
和运行一个压力测试来比较它们的结果。这两个函数都输出参数列表的 rear运行ged 版本。但问题是,当我 运行 压力测试时,我看到即使两个输出列表不相同(顺序不同),压力测试也显示正常。尽管我写信只在 largest_number(a) == largest_numbercopied(a)
时才输入 ok。实际上,我之前在其他算法中遇到过这种压力测试功能有点类似的问题,但经过几次试验后这些问题得到了解决,我不知道是什么导致了这个问题。
def maximum(m,n):
m_=m
n_=n
if m<n:
temp=m
m=n
n=temp
if m==n:
return 1
mlist= []
for i in range(len(str(m))):
mlist.append(m//(10**(len(str(m))-1)))
m= m % (10**(len(str(m))-1))
nlist= []
for i in range(len(str(n))):
nlist.append(n//(10**(len(str(n))-1)))
n= n % (10**(len(str(n))-1))
digitlist= [mlist, nlist]
if digitlist[0][0]==digitlist[1][0]:
if len(digitlist[1])==1:
if digitlist[0][1]>= digitlist[0][0]:
res= 1
else:
res= 0
else:
if digitlist[0][1]==digitlist[1][1]:
if digitlist[0][2]>=digitlist[0][1]:
res= 1
else:
res= 0
elif digitlist[0][1]>digitlist[1][1]:
res= 1
else:
res= 0
elif digitlist[0][0]>digitlist[1][0]:
res= 1
else:
res= 0
if m_<n_:
if res==0:
res=1
else:
res=0
return res
def largest_number(a):
a= sorted(a, reverse=True)
res=""
c=0
while True:
c=0
for i in range(len(a)-1):
if maximum(a[i],a[i+1])==0:
c+=1
idx=i
#print(idx,c)
break
if c==0:
break
temp= a[idx]
a[idx]= a[idx+1]
a[idx+1]= temp
#print(a)
return a
def IsGreaterOrEqual(digit, max_digit):
return int(str(digit)+str(max_digit))>=int(str(max_digit)+str(digit))
def largest_numbercopied(lst):
answer = []
res=""
while lst!=[]:
max_digit = 0
for digit in lst:
if IsGreaterOrEqual(digit, max_digit):
max_digit = digit
answer.append(max_digit)
lst.remove(max_digit)
return answer
def stresstest():
import random
okcounter=0
while True:
n=random.randint(1,100)
a=[]
for i in range(n):
a.append(random.randint(1,1000))
print(f'numbers= {a}, Result1= {largest_number(a)}')
print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')
if largest_number(a)== largest_numbercopied(a):
okcounter= okcounter+1
print('ok\n')
if okcounter>=100:
break
else:
print('Error')
break
stresstest()
largest_numbercopied
从 a
中删除元素,但它对传入的数组而不是它的副本进行操作。这意味着你的行
print(f'numbers= {a}, Result1= {largest_number(a)}')
print(f'numbers= {a}, Result2= {largest_numbercopied(a)}')
将导致 a
被清除,然后
if largest_number(a)== largest_numbercopied(a)
将比较对空列表进行操作的结果。