leizhenzi23 发表于 2024-11-19 14:11:39

第17讲的最后一段代码中的break跳出循环,为什么还要打印7次内层循环的print()

break 不是直接跳出内层循环,到了外层的while了么
那样的话就没有print了啊,只有一个day += 1了, 为什么视频里还说有print 然后继续打印7次呢
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
      if hour >1:
            break
    day += 1

FishC 发表于 2024-11-19 14:17:50

看起来代码片段有些不完整,但我可以猜测您的问题。通常,`break`语句是用来立即终止当前循环的。如果`break`在内层循环中,它将只跳出内层循环,并继续执行外层循环之后的代码。

从您的描述来看,问题是出在外层循环是`while day:`。如果`print()`语句在内层循环的`while`中,而`break`也在其中,`print()`只会在`break`发生之前执行。此外,外层`while`循环没有明确的条件,也可能在满足条件下继续执行。

如果您能提供完整代码,我能给出更精确的解释。不过,从目前的情况来看,可能是因为每次`day += 1`后又重新进入了内层的循环,导致`print()`执行多次。确保理解`break`只终止它所在的循环级别,而不是外层的循环。

希望这能解释您遇到的问题!如果仍有疑惑,欢迎提供完整代码以便更好地解答。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

leizhenzi23 发表于 2024-11-19 15:23:20

FishC 发表于 2024-11-19 14:17
看起来代码片段有些不完整,但我可以猜测您的问题。通常,`break`语句是用来立即终止当前循环的。如果`brea ...

有点不太懂啊,这是小甲鱼视频[知识点备忘] 第017讲:了不起的分支和循环(IV)中最后一段视频的完整代码,break直接跳出内层循环的话,那内层循环 while hour<=8 中的print()不是不执行么,那就是只打印1次啊

FishC 发表于 2024-11-19 15:23:32

leizhenzi23 发表于 2024-11-19 15:23
有点不太懂啊,这是小甲鱼视频 第017讲:了不起的分支 ...

根据您给出的信息,我假设完整的代码结构可能是这样的:

day = 1
hour = 1

while day <= 7:
    print(f"第 {day} 天")
    while hour <= 10:
      print(f"第 {hour} 小时")
      if hour == 5:
            break
      hour += 1
   
    day += 1
    hour = 1# 重置hour,以便外层循环继续时,内层循环能从hour=1开始

让我们逐步分析这段代码:

1. 外层循环 `while day <= 7:` 表示这一段代码总共会运行7天。
2. 在每一天的循环中,`hour`从1开始循环到10。
3. `if hour == 5: break` 在小时为5的时候,退出内层`while hour`循环。
4. 退出内层循环后,代码执行到 `day += 1` 处,使外层循环进入下一天。
5. `hour = 1` 在外层的每次循环结束时重设 `hour`,这样可以确保每进入新的一天,`hour`从1开始。

因此,尽管内层循环因为`break`而在小时到5时结束,每天还是会有一次`print`,重新计数进入下一天,这导致了7次打印外层循环的内容,而不是继续小时的打印。

希望这个解释能帮助您理解视频中提到的如何打印7次的问题。若有其他疑问,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

leizhenzi23 发表于 2024-11-19 15:26:15

day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
      if hour >1:
            break

    day += 1
为什么打印了7次呢,break不是跳出了循环么

FishC 发表于 2024-11-19 15:26:22

leizhenzi23 发表于 2024-11-19 15:26
day = 1
hour = 1
while day

非常抱歉,我需要完整的代码来更好地解释其中的逻辑。不过,我可以根据通常的循环控制结构给出一些一般性的解释。假设您有类似下面这样的一段代码:

day = 1

while day <= 7:
    hour = 1
    while hour <= 24:
      print(f"Day {day}, Hour {hour}")
      
      if some_condition:
            break# This breaks out of the inner while loop, not the outer while loop.

      hour += 1# Increment hour

    day += 1# Increment day

在这段代码中,`break`语句用于跳出内层循环`while hour <= 24`。当`break`被执行时,内层循环会被打断,程序将继续执行外层循环的剩余部分。

具体到您提到的问题,假设在`inner`循环中用了`break`,这意味着即便`hour`刚开始,比如在`hour = 1`时条件满足而`break`触发,内层循环会跳出,但`day`的循环依然会继续,所以它会打印7次(如果7天),这是因为外层`while day <= 7`继续执行。

如果您能补充完整的代码,我会很乐意为您进一步分析。希望这些解释有助于您理解`break`在嵌套循环中的行为。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-11-19 17:15:23

本帖最后由 jackz007 于 2024-11-19 22:52 编辑

day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
      if hour > 1:
            break
    day += 1

      这个嵌套循环比较特殊,由于内循环里有这一句:
      if hour > 1:
            break
      if 的条件 hour > 1 恒定为 True,所谓的内循环每次只能执行 1 次,处于名存实亡的状态,在循环过程中,day 和 hour 同步改变,而 day 率先到达循环终点 (day <= 7),所以,外循环实际控制着 print() 语句的执行次数,最终会打印 7 次 "今天一定学习8个小时"。

      改写一下,这个等效代码应该更能说明问题:
day = 1
hour = 1
while day <= 7:
    if hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
    day += 1

leizhenzi23 发表于 2024-11-21 12:51:02

jackz007 发表于 2024-11-19 17:15
这个嵌套循环比较特殊,由于内循环里有这一句:

      if 的条件 hour > 1 恒定为 True, ...

其实我实在想是不是 break直接就跳出了内循环,内循环的语句就不执行了,那样的话 就只打印一次,但是吧,现在是打印了7次,相当于每次都还要进到内循环中一次,进7次

leizhenzi23 发表于 2024-11-21 13:06:37

还有一个问题就是,代码中去掉内循环的if条件,改成下边这样,为什么打印8次,不是应该7次么,外循环只有7次啊:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
    day += 1

jackz007 发表于 2024-11-21 14:07:07

leizhenzi23 发表于 2024-11-21 13:06
还有一个问题就是,代码中去掉内循环的if条件,改成下边这样,为什么打印8次,不是应该7次么,外循环只有7 ...

      因为在 day = 1 的那次循环中,内循环会循环 8 次。

leizhenzi23 发表于 2024-11-21 18:16:13

jackz007 发表于 2024-11-21 14:07
因为在 day = 1 的那次循环中,内循环会循环 8 次。

不太懂,day = 1 不是外循环1次么,然后内循环,外循环7次以后,day 等于7,第八次的时候外循环就不符合了,内循环就终止了,那不就是7次么

jackz007 发表于 2024-11-21 19:36:53

本帖最后由 jackz007 于 2024-11-21 19:40 编辑

leizhenzi23 发表于 2024-11-21 18:16
不太懂,day = 1 不是外循环1次么,然后内循环,外循环7次以后,day 等于7,第八次的时候外循环就不符合 ...

      你把 break 语句都去掉了,在 day = 1 的时候,内循环就不再会被打断,而是一步到位,循环 8 次,然后,在 day = 2、3、....、7 的时候,就不再有内循环了。

Filthy-ice 发表于 2024-11-23 09:43:48

day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
    day += 1
恒等于
day = 1
while hour <= 8:
    print("今天一定学习8个小时")
day += 1

if(hour>7){ return}


最开始的:
day = 1
hour = 1
while day <= 7:
    while hour <= 8:
      print("今天一定学习8个小时")
      hour += 1
      if hour >1:
            break
    day += 1
恒等于:
day = 1
while day <= 7:
    print("今天一定学习8个小时")
    day += 1
页: [1]
查看完整版本: 第17讲的最后一段代码中的break跳出循环,为什么还要打印7次内层循环的print()