鱼C论坛

 找回密码
 立即注册
查看: 1877|回复: 14

[已解决]是否可以用缩进代替else

[复制链接]
发表于 2016-11-14 00:42:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 sspphh 于 2016-11-14 20:10 编辑

看了小甲鱼第009的视频‘’了不起的分支与循环3‘’之后,对其中一个语句产生的疑问。
视频中的片段是:
  1. bingo = '小甲鱼是帅哥'
  2. answer = input('请输入小甲鱼最想听的一句话:')
  3. while True:
  4.     if answer == bingo:
  5.         break
  6.     answer = input('抱歉,错了,重新输入:')
  7. print('哎呦!帅哦')
  8. print('您真是小甲鱼肚子里的蛔虫啊!')
复制代码



我总感觉是不是应该写成
  1. bingo = '小甲鱼是帅哥'
  2. answer = input('请输入小甲鱼最想听的一句话:')
  3. while True:
  4.     if answer == bingo:
  5.         break
  6.     else:
  7.         answer = input('抱歉,错了,重新输入:')
  8. print('哎呦!帅哦')
  9. print('您真是小甲鱼肚子里的蛔虫啊!')
复制代码




我两个都尝试了,都可以正常执行,但是不知道理由是什么?
是不是意味着,else后面跟着的代码,只要缩进和if处于同一层级,就可以省略else??
最佳答案
2016-11-14 08:31:53
并不是, 而是此处一旦进入 if 语句内, 循环将会终止, 也不会执行后面的语句了
而实际上, 按照编码规范, 是需要使用 else 说明业务逻辑的
Python 诸多特性之一就是代码的自解释性, 不需要很多注释就能看懂逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-14 08:31:53 | 显示全部楼层    本楼为最佳答案   
并不是, 而是此处一旦进入 if 语句内, 循环将会终止, 也不会执行后面的语句了
而实际上, 按照编码规范, 是需要使用 else 说明业务逻辑的
Python 诸多特性之一就是代码的自解释性, 不需要很多注释就能看懂逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 10:15:39 | 显示全部楼层
hldh214 发表于 2016-11-14 08:31
并不是, 而是此处一旦进入 if 语句内, 循环将会终止, 也不会执行后面的语句了
而实际上, 按照编码规范, 是 ...

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

使用道具 举报

发表于 2016-11-14 10:56:14 | 显示全部楼层
正常情况下。两种方式的效果是不一样的。 1.jpg

小甲鱼的相当于放在B处,你相当于放在A处。
但有了break,你再看看是否一样了。
2.jpg

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

使用道具 举报

发表于 2016-11-14 12:37:21 | 显示全部楼层
只是if  True里面有个break,不然也会执行answer = input('抱歉,错了,重新输入:')
用两种方法解决了同一个问题,但方法不一样而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 12:44:35 | 显示全部楼层
  1. if answer == bingo:
  2.         break
复制代码

这里若不满足if的条件,如果有else的话,则应该进入else中继续执行代码,若没有else则跳过if分支 继续向下进行。
而这里面if有所不同,if中包含了break,也就是说如果满足条件进入了if中则会直接跳出while循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 15:07:45 | 显示全部楼层
本来没什么,看了答案之后觉得好混乱。我的理解:两种不一样,但是在这道题中实现的东西是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 19:50:19 | 显示全部楼层
如果772815726 发表于 2016-11-14 15:07
本来没什么,看了答案之后觉得好混乱。我的理解:两种不一样,但是在这道题中实现的东西是一样的

那这个不带else的语句,是什么意思呢?为什么也能达到有else的效果呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 20:21:17 | 显示全部楼层
冬雪雪冬 发表于 2016-11-14 10:56
正常情况下。两种方式的效果是不一样的。

小甲鱼的相当于放在B处,你相当于放在A处。

首先感谢你的耐心回答,不过,我没有看明白你的意思,好尴尬

  1. bingo = '小甲鱼是帅哥'
  2. answer = input('请输入小甲鱼最想听的一句话:')
  3. while True:
  4.     if answer == bingo:
  5.         break
  6.     answer = input('抱歉,错了,重新输入:')
  7. print('哎呦!帅哦')
  8. print('您真是小甲鱼肚子里的蛔虫啊!')
复制代码


while True:   #如果下面的循环体没有中断或者跳出,应该会无限制的循环执行下去吧?
    if answer == bingo:
        break                     #这两句应该是说,如果猜对了,就直接跳出while循环体,执行最后2行代码
    answer = input('抱歉,错了,重新输入:')     #关键就是这一句,我看不明白这句的缩进为什么是和if对其的???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 20:33:22 | 显示全部楼层
shuofxz 发表于 2016-11-14 12:44
这里若不满足if的条件,如果有else的话,则应该进入else中继续执行代码,若没有else则跳过if分支 继续向 ...

你的意思是:如果没有猜中,也就是说if条件的结果为flase,那就不执行后面的break,转而继续往下执行下一条语句。
如果这样理解是正确的话,我还有一点不明白:为什么answer = input('抱歉,错了,重新输入:')这段语句的缩进是和if对齐?而不能和break对齐呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-14 20:52:35 | 显示全部楼层
while True:   #如果下面的循环体没有中断或者跳出,应该会无限制的循环执行下去吧?
是的,会无限循环下去。
    if answer == bingo:
        break                     #这两句应该是说,如果猜对了,就直接跳出while循环体,执行最后2行代码
    answer = input('抱歉,错了,重新输入:')     #关键就是这一句,我看不明白这句的缩进为什么是和if对其的???
无论是否有else都是在猜错了时执行这条语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 21:01:49 | 显示全部楼层
冬雪雪冬 发表于 2016-11-14 20:52
while True:   #如果下面的循环体没有中断或者跳出,应该会无限制的循环执行下去吧?
是的,会无限循环下 ...

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

使用道具 举报

发表于 2016-11-14 22:42:26 | 显示全部楼层
貌似不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 08:19:14 | 显示全部楼层
应该不行吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 16:50:29 | 显示全部楼层
进入循环之后先判断if语句,如果条件为真则break跳出循环,如果不为真(此处没有else语句)则继续执行下面的语句,即执行下面的 answer = input('抱歉,错了,重新输入:')(这是一条普通的语句,并不在if语句中)

如果有else语句则执行else语句即执行answer = input('抱歉,错了,重新输入:')(这个就是你加else后的效果)

两者的效果在这道题的情况下是一样的,But缩进不能代替else

例如下面两个程序,你输入‘小甲鱼是帅哥’,两个的运行结果不一样
  1. bingo = '小甲鱼是帅哥'
  2. answer = input('请输入小甲鱼最想听的一句话:')
  3. if answer == bingo:
  4.     print('哎呦!帅哦')
  5.     print('您真是小甲鱼肚子里的蛔虫啊!')
  6. else:
  7.     answer = input('抱歉,错了,重新输入:')
复制代码

================ RESTART: C:/Users/Administrator/Desktop/1.py ================
请输入小甲鱼最想听的一句话:小甲鱼是帅哥
哎呦!帅哦
您真是小甲鱼肚子里的蛔虫啊!
>>>

  1. bingo = '小甲鱼是帅哥'
  2. answer = input('请输入小甲鱼最想听的一句话:')
  3. if answer == bingo:
  4.     print('哎呦!帅哦')
  5.     print('您真是小甲鱼肚子里的蛔虫啊!')

  6. answer = input('抱歉,错了,重新输入:')
复制代码

>>>
================ RESTART: C:/Users/Administrator/Desktop/1.py ================
请输入小甲鱼最想听的一句话:小甲鱼是帅哥
哎呦!帅哦
您真是小甲鱼肚子里的蛔虫啊!
抱歉,错了,重新输入:
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 02:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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