zjyklxk 发表于 2022-10-22 16:31:56

不知道哪里出了问题,看代码。

本帖最后由 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)

zjyklxk 发表于 2022-10-23 15:24:56

离谱的来了!!!
我把其他代码删了只剩这个

num1 = 1
num2 = 2
print(num1, type(num1), bool(num1 == True)) # 检查num1的数据
print(num2, type(num2), bool(num2 == True)) # 检查num2的数据

一毛一样的代码,一个输出True一个输出False
我人都傻了

zjyklxk 发表于 2022-10-23 15:27:45

发现问题了。num1 == True表示的是num1 == 1   这个True是1
这里得用bool(num1)来判定属实学艺不精了 告辞!

zjyklxk 发表于 2022-10-24 12:06:07

问题已解决,此帖终结!
页: [1]
查看完整版本: 不知道哪里出了问题,看代码。