鱼C论坛

 找回密码
 立即注册
查看: 2076|回复: 11

[已解决]有大佬解答一下 当满足第一个if条件后是continue执行后后面的if和count-=1都不执行...

[复制链接]
发表于 2023-4-15 11:11:55 | 显示全部楼层 |阅读模式

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

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

x
nums = [1, 1, 2, 1, 3, 2, 3, 2]
   
major1 = major2 = nums[0]
count1 = count2 = 0
   
# 对抗阶段
for each in nums:
    if major1 == each:
        count1 += 1
        continue
   
    if major2 == each:
        count2 += 1
        continue
   
    if count1 == 0:
        major1 = each
        count1 = 1
        continue
   
    if count2 == 0:
        major2 = each
        count2 = 1
        continue
   
    count1 -= 1
    count2 -= 1
   
# 统计阶段
if nums.count(major1) > len(nums) / 3:
    print(major1)
if nums.count(major2) > len(nums) / 3:
    print(major2)
最佳答案
2023-4-15 11:18:45
当执行到 continue 语句时,它会跳过当前循环体剩下的部分,然后直接进入下一次循环。

在你的代码中,如果满足了任何一个 if 语句条件并执行了 continue,那么在当前循环体内,后面的 if 语句和 count1 -= 1、count2 -= 1 都不会执行。

具体来说,代码的执行流程如下:

  • 对每一个 each 在 nums 中进行遍历。
  • 如果 each 等于 major1,那么 count1 加 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 each 等于 major2,那么 count2 加 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 count1 等于 0,那么设置 major1 为 each,将 count1 设置为 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 count2 等于 0,那么设置 major2 为 each,将 count2 设置为 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果以上条件都不满足,执行 count1 -= 1 和 count2 -= 1,然后进入下一个 each 的循环。


简单来说,如果一个 if 条件满足并执行了 continue,那么当前循环体内剩下的代码都不会被执行。而是直接进入下一次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-15 11:12:34 | 显示全部楼层
主要就是continue跳出这一层循环给我整懵了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:12:45 | 显示全部楼层
本帖最后由 sfqxx 于 2023-4-15 11:18 编辑

在这段代码中,`continue`语句用于跳过当前循环,直接进入下一次循环。在对抗阶段中,当判断当前数值与major1或major2相等时,就会执行continue语句,不再执行后续的代码。这样做的目的是为了避免重复计数。

举个例子,假如在nums列表中有三个数值为1,如果不使用continue语句,每次遇到1都会进行计数操作,导致最终major1的计数值可能会超过实际出现次数,从而影响到统计阶段的结果。

因此,continue语句在这里的作用就是跳过已经计数过的数值,确保每个数值只被计数一次,最终得出正确的major1和major2。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:14:41 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-4-15 11:22 编辑

continue是直接下一次循环。如果下一次循环条件不满足,退出循环

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-15 11:16:01 | 显示全部楼层
sfqxx 发表于 2023-4-15 11:12
这段代码的作用是找到在列表 nums 中出现次数超过三分之一的主要元素。代码中使用了 boyer-moore 投票算法 ...


他的问题是:continue 不理解
标题和二楼的也要复制,不能只复制个代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:18:38 | 显示全部楼层
歌者文明清理员 发表于 2023-4-15 11:16
他的问题是:continue 不理解
标题和二楼的也要复制,不能只复制个代码

改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:18:45 | 显示全部楼层    本楼为最佳答案   
当执行到 continue 语句时,它会跳过当前循环体剩下的部分,然后直接进入下一次循环。

在你的代码中,如果满足了任何一个 if 语句条件并执行了 continue,那么在当前循环体内,后面的 if 语句和 count1 -= 1、count2 -= 1 都不会执行。

具体来说,代码的执行流程如下:

  • 对每一个 each 在 nums 中进行遍历。
  • 如果 each 等于 major1,那么 count1 加 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 each 等于 major2,那么 count2 加 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 count1 等于 0,那么设置 major1 为 each,将 count1 设置为 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果 count2 等于 0,那么设置 major2 为 each,将 count2 设置为 1,然后直接跳到下一个 each 的循环,忽略剩下的代码。
  • 如果以上条件都不满足,执行 count1 -= 1 和 count2 -= 1,然后进入下一个 each 的循环。


简单来说,如果一个 if 条件满足并执行了 continue,那么当前循环体内剩下的代码都不会被执行。而是直接进入下一次循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:18:56 | 显示全部楼层

改了有啥用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 11:19:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 16:37:41 | 显示全部楼层
这段代码是一个求解一个数组中出现次数超过1/3的众数的算法。该算法使用了摩尔投票算法的思想。

在对抗阶段中,算法遍历整个数组,对于每个数,首先判断它是否和当前候选的两个数(major1和major2)相等,如果相等,就把对应的计数器(count1或count2)加一,然后跳过后面的代码继续处理下一个数。如果该数不等于当前的任何一个候选数,就尝试更新候选数,如果其中一个计数器为0,就用该数替换对应的候选数,并将对应的计数器设置为1。如果两个计数器都不为0,则说明当前的两个候选数都没有达到出现次数超过1/3的要求,因此将它们的计数器都减1,相当于同时从候选数中删除了一个。

如果遍历完整个数组后,major1和major2中有一个数的出现次数超过了1/3,则在统计阶段中打印该数。

回到你的问题,如果满足第一个if条件,即major1等于当前的数each,就会执行count1 += 1,然后执行continue跳过后面的代码。因此,如果第一个if条件成立,后面的所有代码都不会被执行。同理,如果满足第二个if条件,即major2等于当前的数each,也会执行类似的操作,跳过后面的代码。因此,这两个if语句的作用是防止重复计数,即遇到已经被选为候选数的数时,直接跳过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-15 19:35:43 | 显示全部楼层
isdkz 发表于 2023-4-15 11:18
当执行到 continue 语句时,它会跳过当前循环体剩下的部分,然后直接进入下一次循环。

在你的代码中,如 ...

感谢大佬解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 19:38:33 | 显示全部楼层

如果答案对你有帮助的话,给个最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 23:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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