雨留下的印记 发表于 2020-3-30 15:30:50

第16讲课后习题的一个问题

name = input('请输入带查找的用户名:')
score = [['迷途',85],['黑夜',88],['小布丁',65],['福禄娃娃',95],['怡静',90]]

for each in score:
    if name in each:
      print(name + '得分是' ,each)
      break
if name not in each:
    print("查找的数据不存在")
上面是程序,关于这个break我有点小问题,我个人理解是不需要break的,但删除break的时候会显示下面这样
请输入带查找的用户名:迷途
迷途得分是 85
查找的数据不存在
break不是跳出的是for循环嘛?为什么会影响到执行下面的if语句


       

heidern0612 发表于 2020-3-30 15:32:29

本帖最后由 heidern0612 于 2020-3-30 15:46 编辑

这段代码的意思是,东西已经找到了,就跳出循环吧。

不break的话,是不是假如东西我已经找到了,我还得继续找下去?

假如我for循环了个遍,each是不是就指代for循环的最后一位序列,名存实亡了?

qiuyouzhi 发表于 2020-3-30 15:34:19

可以打印一下each:
for each in score:
    if name in each:
      print(name + '得分是' ,each)
      #break
print(each)
if name not in each:
    print("查找的数据不存在")
会发现,如果删掉break,each就会等于
列表最后一个元素(for循环会继续遍历)
这时候,加入break,就可以让each保留
在正确的状态。

BngThea 发表于 2020-3-30 15:35:02

利用循环指定了each的值
删了,each最终肯定是score中的最后那个

小人物来了 发表于 2020-3-30 15:40:09

来看看大神们回复

jackz007 发表于 2020-3-30 15:43:59

本帖最后由 jackz007 于 2020-3-30 15:53 编辑

   楼主的代码似乎这样写才对
name = input('请输入带查找的用户名:')
score = [['迷途',85],['黑夜',88],['小布丁',65],['福禄娃娃',95],['怡静',90]]

for each in score:
    if name in each:
      print(name + '得分是' , each)
      break
else : print("查找的数据不存在")
      如果找到就打印信息,并 break 退出循环,如果循环过程不曾被 break 语句打断,那就执行 for 循环的 else 语句,打印没找到信息。这样,代码逻辑是一体的,可以避免两头判断给代码逻辑增加的复杂度。

雨留下的印记 发表于 2020-3-30 16:06:55

懂了,谢谢各位大佬
页: [1]
查看完整版本: 第16讲课后习题的一个问题