|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zjyklxk 于 2022-10-23 15:17 编辑
#这是小甲鱼22课,课后作业里提到的‘摩尔投票法’选出数量最多的两个对象
#这我自己写的,答案还没看。然后不知道哪里出了问题。
#for循环过去之后输出两个num值,其中一个会被认定为False,但是检查type和值都正常的
# 这两个列表可以把后面那个#了就可以执行前面这个
l = [3,1,5,3,3,1,6,1,1,3]
l = [1,2,3,1,2,3,1,3]
# 初始化
count1 = count2 = num1 = num2 = 0
for x in l:
print('此轮x值:',x,'\n上轮结果:',num1,num2,'\n判定结果',end=' ') # debug
if count1 == 0 or x == num1:
num1 = x
count1 += 1
print('1位增加') # debug
elif count2 == 0 or x == num2:
num2 = x
count2 += 1
print('2位增加') # debug
else:
count1 -= 1
count2 -= 1
print('双位同减') # debug
print('本轮结果:',num1,'c'+str(count1),num2,'c'+str(count2)) # debug
print()
'''
前面都正常,到这里问题出现了
在最后判定的这里,num1或者num2的其中一个会被判False,但是两个都是有数据的
'''
print(num1, type(num1), bool(num1 == True)) # 检查num1的数据
print(num2, type(num2), bool(num2 == True)) # 检查num2的数据
if num1 == True and l.count(num1) > len(l)//3:
count1 = -1
print('1位通过') # 1位验证成功
else:
num1 = ''
count1 = 0
print('1位失败') # 1位验证失败
if num2 == True and l.count(num2) > len(l)//3:
count2 = -1
print('2位通过') # 2位验证成功
else:
num2 = ''
count2 = 0
print('2位失败') # 2位验证失败
# 输出结果
if count1 + count2 == -2:
print(num1,'和',num2,'是数量最多的两个')
elif count1 + count2 == 0:
print('数列里没有数量超过三分之一的')
else:
print('数列里数量超过三分之一的只有',num1,num2)
|
|