鱼C论坛

 找回密码
 立即注册
查看: 139|回复: 2

[已解决]列表IV的课后作业动手题

[复制链接]
发表于 2024-4-10 18:21:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求问,我写的最后一题动手题答案如下
  1. nums = [1, 1, 2, 1, 3, 2, 3, 2]
  2. major1 = major2 = nums[0]
  3. count1 = 0
  4. count2 = 0
  5. # 对抗阶段
  6. for each in nums:
  7.     if major1 == each:
  8.         count1 += 1
  9.         continue
  10.     if major2 == each:
  11.         count2 += 1
  12.         continue
  13.     if count1 == 0:
  14.         major1 = each
  15.         count1 = 1
  16.         continue
  17.     if count2 == 0:
  18.         major2 == each
  19.         count2 = 1
  20.         continue
  21.     count1 -= 1
  22.     count2 -= 1
  23. # 统计阶段
  24. p = nums.count(major1)
  25. q = nums.count(major2)
  26. if p > len(nums) / 3 and q > len(nums) / 3:
  27.     print("主要元素为",major1,"和",major2)
  28. else:
  29.     print("无主要元素")
复制代码

答案的代码如下
  1. nums = [1, 1, 2, 1, 3, 2, 3, 2]
  2.    
  3. major1 = major2 = nums[0]
  4. count1 = count2 = 0
  5.    
  6. # 对抗阶段
  7. for each in nums:
  8.     if major1 == each:
  9.         count1 += 1
  10.         continue
  11.    
  12.     if major2 == each:
  13.         count2 += 1
  14.         continue
  15.    
  16.     if count1 == 0:
  17.         major1 = each
  18.         count1 = 1
  19.         continue
  20.    
  21.     if count2 == 0:
  22.         major2 = each
  23.         count2 = 1
  24.         continue
  25.    
  26.     count1 -= 1
  27.     count2 -= 1
  28.    
  29. # 统计阶段
  30. if nums.count(major1) > len(nums) / 3:
  31.     print(major1)
  32. if nums.count(major2) > len(nums) / 3:
  33.     print(major2)
复制代码

为什么我们两个的对抗阶段,major结果会不同
最佳答案
2024-4-10 21:38:53
本帖最后由 jackz007 于 2024-4-10 21:47 编辑

第18行有错
  1.         major2 == each
复制代码

应该改为:
  1.         major2 = each
复制代码

使用集合可以简化代码:
  1. nums , c = [1, 1, 2, 1, 3, 2, 3, 2] , 0
  2. for x in set(nums):
  3.     if nums . count(x) > len(nums) // 3 :
  4.         print(x)
  5.         c += 1
  6. if c == 0:
  7.     print('无主要元素')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-10 18:21:29 | 显示全部楼层
你们两个对抗阶段的代码之间只有一处细微的差别,但这个差别会导致结果不同。

你的代码:
  1. major1 = each
复制代码


正确代码:
  1. major1 == each
复制代码


在你的代码中,你将 `major1` 的值直接设置为了 `each` 的值,这是错误的。因为 `major1` 应该是一个元素,表示在列表 `nums` 中出现次数最多的元素,而不是当前循环到的元素。

而在正确代码中,使用了比较运算符 `==` 来判断 `major1` 和 `each` 是否相等,如果相等,则将 `count1` 加 1,否则进入下一个判断。这样可以保证 `major1` 始终指向出现次数最多的元素。

所以,在对抗阶段中,你应该将 `major1 == each` 修改为 `major1 = each`,以确保 `major1` 的值正确更新。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-10 21:38:53 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-4-10 21:47 编辑

第18行有错
  1.         major2 == each
复制代码

应该改为:
  1.         major2 = each
复制代码

使用集合可以简化代码:
  1. nums , c = [1, 1, 2, 1, 3, 2, 3, 2] , 0
  2. for x in set(nums):
  3.     if nums . count(x) > len(nums) // 3 :
  4.         print(x)
  5.         c += 1
  6. if c == 0:
  7.     print('无主要元素')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表