【发布时间】:2021-09-06 08:04:48
【问题描述】:
我写了两个函数largest_number 和largest_numbercopied 并运行了压力测试来比较它们的结果。这两个函数都输出参数列表的重新排列版本。但问题是,当我运行压力测试时,我看到即使两个输出列表不一样(顺序不同),压力测试也显示正常。虽然我写了只有在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()
【问题讨论】: