鱼C论坛

 找回密码
 立即注册
查看: 1127|回复: 4

[已解决]小甲鱼pyhton 第14课习题疑问 break的缩进问题

[复制链接]
发表于 2018-7-27 23:01:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 逗儿 于 2018-7-27 23:17 编辑

代码如下:
#密码安全性检查代码
#
#低级密码要求:
# 1.密码由单纯的数字或字母组成
# 2.密码长度小于等于8位
#
#中级密码要求:
# 1.密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}\|)任意两种组合
#密码长度不能低于8位
#
#高级密码要求:
# 1.密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}\|)三种组合
# 2.密码只能由字母开头
# 3.密码长度不能低于16位

symbols = "~!@#$%^&*()_=-/,.?<>;:[]{}\|"
chars = 'adbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
numbers = '0123456789'
t = 'yes'
while t == 'yes':
    password = input("请输入需要检查的密码组合:")
    length = len(password)
#判断密码长度
    while(length == 0 or password.isspace()):
        password == input("您输入的密码为空或为空格,请重新输入:")
        length == len(password)
    if length <= 8:
        judge_len = 1
    elif 8 < length < 16:
        judge_len = 2
    elif length >= 16:
        judge_len = 3
    judge_chars = 0
#判断是否包含特殊字符
    for each in password:
        if each in symbols:
            judge_chars += 1
            break
#判断是否包含字母
    for each in password:
        if each in chars:
            judge_chars += 1
            break
#判断是否包含数字
    for each in password:
        if each in numbers:
            judge_chars += 1
            break
#得出结果
    while 1:
        print("您的密码安全级别评定为:",end='')
        if judge_len == 1 or judge_chars == 1:
            print("低\n")
            print("""请按以下方式提升您的密码安全级别:
    1.密码必须由数字、字母及特殊字符三种组合
    2.密码只能由字母开头
    3.密码长度不能低于16位""")
        elif judge_len == 2 or judge_chars == 2:
            print("中\n")
            print("""请按以下方式提升您的密码安全级别:
    1.密码必须由数字、字母及特殊字符三种组合
    2.密码只能由字母开头
    3.密码长度不能低于16位""")
        else:
            print("高")
            print("\n请继续保持")
        break
    t = input("还需要重新测试吗?(输入“yes”继续,其余退出)")

可以正常执行,但想问为什么break要在if里面,如果break和if对齐,不论输入什么密码安全性都为低,如果break和for对齐,程序可以运行,但输入之后就无反应了
最佳答案
2018-7-27 23:43:12
break 只是跳出它目前所在的循环体而已。if 是在 for 内部,而 break 是在 if 内部,所以 break 只是跳出 if 的判断而已。当跳出 if 判断,将继续 for 循环,检查 judge_char 是否需要 +1。如果没有缩进,break 将跳出 for 循环,那么只会对密码的第一个元素进行比较。

其实不需要 break,因为此代码只是单纯地询问是否有特殊符号或什么的,如果有,加一,没有就没有动作嘛,那没有就换下一个嘛
for each in password:
        if each in symbols:
            judge_chars += 1

这样是等价的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-27 23:03:45 | 显示全部楼层
这就叫在什么块中break。
满足什么条件才break。

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

使用道具 举报

 楼主| 发表于 2018-7-27 23:18:33 | 显示全部楼层
ba21 发表于 2018-7-27 23:03
这就叫在什么块中break。
满足什么条件才break。

不太懂 为什么要在if的里面,break不是跳出for循环吗,那如果缩进和if的对齐为什么不行呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-27 23:43:12 | 显示全部楼层    本楼为最佳答案   
break 只是跳出它目前所在的循环体而已。if 是在 for 内部,而 break 是在 if 内部,所以 break 只是跳出 if 的判断而已。当跳出 if 判断,将继续 for 循环,检查 judge_char 是否需要 +1。如果没有缩进,break 将跳出 for 循环,那么只会对密码的第一个元素进行比较。

其实不需要 break,因为此代码只是单纯地询问是否有特殊符号或什么的,如果有,加一,没有就没有动作嘛,那没有就换下一个嘛
for each in password:
        if each in symbols:
            judge_chars += 1

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

使用道具 举报

 楼主| 发表于 2018-7-27 23:50:10 | 显示全部楼层
claws0n 发表于 2018-7-27 23:43
break 只是跳出它目前所在的循环体而已。if 是在 for 内部,而 break 是在 if 内部,所以 break 只是跳出 i ...

懂了 谢谢~ break是看答案的代码有 然后让我产生了缩进的疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 11:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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