不知道哪里出了问题,看代码。
本帖最后由 zjyklxk 于 2022-10-23 15:17 编辑#这是小甲鱼22课,课后作业里提到的‘摩尔投票法’选出数量最多的两个对象
#这我自己写的,答案还没看。然后不知道哪里出了问题。
#for循环过去之后输出两个num值,其中一个会被认定为False,但是检查type和值都正常的
# 这两个列表可以把后面那个#了就可以执行前面这个
l =
l =
# 初始化
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)
离谱的来了!!!
我把其他代码删了只剩这个
num1 = 1
num2 = 2
print(num1, type(num1), bool(num1 == True)) # 检查num1的数据
print(num2, type(num2), bool(num2 == True)) # 检查num2的数据
一毛一样的代码,一个输出True一个输出False
我人都傻了 发现问题了。num1 == True表示的是num1 == 1 这个True是1
这里得用bool(num1)来判定属实学艺不精了 告辞! 问题已解决,此帖终结!
页:
[1]