鱼C论坛

 找回密码
 立即注册
查看: 1734|回复: 7

[已解决]009讲—动动手0程序问题(if,else,continue问题)

[复制链接]
发表于 2017-11-29 12:41:22 | 显示全部楼层 |阅读模式

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

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

x
0.设计一个验证用户密码的程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含 “*” 则不计算在内。
下面是小甲鱼发布的答案。
  1. count = 3
  2. password = 'FishC.com'

  3. while count:
  4.     passwd = input('请输入密码:')
  5.     if passwd == password:
  6.         print('密码正确,进入程序......')
  7.         break
  8.     elif '*' in passwd:
  9.         print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')
  10.         continue
  11.     else:
  12.         print('密码输入错误!您还有', count-1, '次机会!', end=' ')   
  13.     count -= 1
复制代码



我把这个程序做了一些展开,如下:
  1. count = 3
  2. password = '小甲鱼是帅哥'

  3. while count:
  4.     mima = input('请输入密码:')
  5.     #此步骤需要放在while循环内,放在while count前一步,
  6.     #否则在输入错一次密码后,不会提示继续输入密码,
  7.     #直接跳'密码错误,你还有几次机会。不会出现继续显示'输入密码问题'
  8.     if mima == password:
  9.         print('密码正确,进入程序...')
  10.         break   #break的作用就是当密码输入正确跳出这个while循环,
  11.                 #如果没有break,会无限打印'密码正确,进入程序'
  12.     else:
  13.         if '*' in mima:
  14.             print(‘密码中不能含有"*"号!您还有',count-1, '次机会,',end = '')
  15.             continue
  16.             #continue 此处有continue的时候,在输入密码中包含*时次数不会减1.
  17.         
  18.         else:
  19.             print('密码错误,您还有',count-1, '次机会,',end = '')
  20.         #此处end=''的作用,让开头的请输入密码,打印在一行中。
  21.         #否则,这行打印完。mima=input('请输入密码')这个在另一行中打印。
  22.         
  23.     count = count - 1
复制代码


根据小甲鱼的程序,下面的 if和else应该是一组吧?   但是在我的程序里这个else相当于是第二个else中的分支了。我有点弄不懂。

  1.     if mima == password:
  2.         print('密码正确,进入程序...')
复制代码
  1. else:
  2.             print('密码错误,您还有',count-1, '次机会,',end = '')
复制代码


然后,程序里的Continue

最佳答案
2017-11-29 14:35:17
zhuoyue65 发表于 2017-11-29 14:05
我的理解是我的第二个else 现在不跟第一个if 匹配,它属于第一个 else条件下的一个分支,那为什么还会在 ...

为什么不执行?既然第一个if判断为假,就进入了第一个else,
你的第二个else只是第一个else下的一部分,执不执行要看你第二个if是不是判断为真
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-29 12:51:50 | 显示全部楼层
python中看else的匹配都是看缩进的,只要缩进在同一列那么它们就是匹配的
代码中if-elif-else是并列关系的,他们属于同一级

continue可以结束本次循环,其后面的代码都不会被执行了,转而开始判断下次循环条件,如果成立,开始下次循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-29 12:59:41 | 显示全部楼层
BngThea 发表于 2017-11-29 12:51
python中看else的匹配都是看缩进的,只要缩进在同一列那么它们就是匹配的
代码中if-elif-else是并列关系的 ...

小甲鱼的程序里 if , elif  , else 是同样的缩进,属于同一级别。
那我自己的程序里,我是把 elif 给拆分开了。根据小甲鱼的程序,那我程序里的第二个 else 应该和第一个if 是同一列,应该是并列关系。

但是现在elif 的分支了。但是两个程序实现了一样的功能。 我弄不懂的是,如果第二个else 跟第一个if同样缩进,程序就会报错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-29 13:16:59 | 显示全部楼层
zhuoyue65 发表于 2017-11-29 12:59
小甲鱼的程序里 if , elif  , else 是同样的缩进,属于同一级别。
那我自己的程序里,我是把 elif 给 ...

因为你已经有一个else和第一个if配对了,不能用多个else配对同一个if
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-29 14:05:01 | 显示全部楼层
BngThea 发表于 2017-11-29 13:16
因为你已经有一个else和第一个if配对了,不能用多个else配对同一个if

我的理解是我的第二个else 现在不跟第一个if 匹配,它属于第一个 else条件下的一个分支,那为什么还会在输入密码错误时执行这一步。

我的理解是这个else和 第一个if 不匹配在一起了。那不应该执行了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-29 14:35:17 | 显示全部楼层    本楼为最佳答案   
zhuoyue65 发表于 2017-11-29 14:05
我的理解是我的第二个else 现在不跟第一个if 匹配,它属于第一个 else条件下的一个分支,那为什么还会在 ...

为什么不执行?既然第一个if判断为假,就进入了第一个else,
你的第二个else只是第一个else下的一部分,执不执行要看你第二个if是不是判断为真
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-29 15:55:34 | 显示全部楼层
BngThea 发表于 2017-11-29 14:35
为什么不执行?既然第一个if判断为假,就进入了第一个else,
你的第二个else只是第一个else下的一部分, ...

明白了,if 跟我最紧挨着的else成一组。 如果if条件不为真,就执行else为假的条件。
要是else 里面也有if 就先执行if条件,如果这个if条件为假, 就执行下面的else的条件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-29 16:06:47 | 显示全部楼层
zhuoyue65 发表于 2017-11-29 15:55
明白了,if 跟我最紧挨着的else成一组。 如果if条件不为真,就执行else为假的条件。
要是else 里面也有i ...

理解正确
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-1 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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