鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 15

[已解决]《零基础入门学习Python》第014讲课后题

[复制链接]
发表于 2020-7-1 16:37:34 | 显示全部楼层 |阅读模式

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

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

x
今天问题很多,有点崩溃:

1、定义一个跨越多行的字符串吗(请至少写出两种实现的方法)
小甲鱼列举了三个定义跨越多行字符串的方法之后,我copy之后print出来的依旧就是一长串字符,压根就没有换行,那为什么还要跨行定义呢?我不大明白...

2、str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>'
     str1[20:-36]
     小甲鱼提问:请问下边语句会显示什么内容?

难不成我要一个个去数出来吗??为什么要这么做....本来我可以用find()找出来索引位置就好了,弄成负数我只能一个个数了?

3、“三引号字符串不赋值的情况下,通常当作跨行注释使用”这句话我看不懂...我难道语文能力出了问题....

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

symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度
length = len(passwd)

while (passwd.isspace() or length == 0) :
    passwd = input("您输入的密码为空(或空格),请重新输入:")
    length = len(passwd)

if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3

flag_con = 0

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1
        break
   
# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1
        break   

# 打印结果
while 1 :
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1 :
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
        print("高")
        print("请继续保持")
        break
    else:
        print("中")

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break

我无论怎么改,程序都报错...到底正确写法是怎样的?

学完这一课我要去消化很久很久了



最佳答案
2020-7-1 16:49:05
本帖最后由 Twilight6 于 2020-7-1 17:05 编辑





1、定义一个跨越多行的字符串吗(请至少写出两种实现的方法)
小甲鱼列举了三个定义跨越多行字符串的方法之后,我copy之后print出来的依旧就是一长串字符,压根就没有换行,那为什么还要跨行定义呢?我不大明白...


我们的程序的窗口就只有这么的大,当你的字符串很长,字符串全部显示在一行时候,你就会觉得比较丑了,所以跨行会使你的代码更加美观

2、str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>'
     str1[20:-36]
     小甲鱼提问:请问下边语句会显示什么内容?
难不成我要一个个去数出来吗??为什么要这么做....本来我可以用find()找出来索引位置就好了,弄成负数我只能一个个数了?


对的,这题就是纯属的叫你计算,为了让你印象更深刻,实际上平时一般不会叫你自己去算来用到这样切片索引

3、“三引号字符串不赋值的情况下,通常当作跨行注释使用”这句话我看不懂...我难道语文能力出了问题....


三引号赋值:
string='''I love FishC.com
By:Twilight
~~~~'''
print(string)
三引号注释(和#号用法差不多,只不过这个可以多行注释,还有可以文档检测):
'''I love FishC.com
By:Twilight
~~~~'''


我无论怎么改,程序都报错...到底正确写法是怎样的?


我运行很正常呀,你重新试试看:
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度
length = len(passwd)

while (passwd.isspace() or length == 0):
    passwd = input("您输入的密码为空(或空格),请重新输入:")
    length = len(passwd)

if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3

flag_con = 0

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1
        break

# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1
        break

    # 打印结果
while 1:
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1:
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
        print("高")
        print("请继续保持")
        break
    else:
        print("中")

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break





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

使用道具 举报

发表于 2020-7-1 16:49:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-1 17:05 编辑





1、定义一个跨越多行的字符串吗(请至少写出两种实现的方法)
小甲鱼列举了三个定义跨越多行字符串的方法之后,我copy之后print出来的依旧就是一长串字符,压根就没有换行,那为什么还要跨行定义呢?我不大明白...


我们的程序的窗口就只有这么的大,当你的字符串很长,字符串全部显示在一行时候,你就会觉得比较丑了,所以跨行会使你的代码更加美观

2、str1 = '<a href="http://www.fishc.com/dvd" target="_blank">鱼C资源打包</a>'
     str1[20:-36]
     小甲鱼提问:请问下边语句会显示什么内容?
难不成我要一个个去数出来吗??为什么要这么做....本来我可以用find()找出来索引位置就好了,弄成负数我只能一个个数了?


对的,这题就是纯属的叫你计算,为了让你印象更深刻,实际上平时一般不会叫你自己去算来用到这样切片索引

3、“三引号字符串不赋值的情况下,通常当作跨行注释使用”这句话我看不懂...我难道语文能力出了问题....


三引号赋值:
string='''I love FishC.com
By:Twilight
~~~~'''
print(string)
三引号注释(和#号用法差不多,只不过这个可以多行注释,还有可以文档检测):
'''I love FishC.com
By:Twilight
~~~~'''


我无论怎么改,程序都报错...到底正确写法是怎样的?


我运行很正常呀,你重新试试看:
symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
nums = '0123456789'

passwd = input('请输入需要检查的密码组合:')

# 判断长度
length = len(passwd)

while (passwd.isspace() or length == 0):
    passwd = input("您输入的密码为空(或空格),请重新输入:")
    length = len(passwd)

if length <= 8:
    flag_len = 1
elif 8 < length < 16:
    flag_len = 2
else:
    flag_len = 3

flag_con = 0

# 判断是否包含特殊字符
for each in passwd:
    if each in symbols:
        flag_con += 1
        break

# 判断是否包含字母
for each in passwd:
    if each in chars:
        flag_con += 1
        break

# 判断是否包含数字
for each in passwd:
    if each in nums:
        flag_con += 1
        break

    # 打印结果
while 1:
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1:
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
        print("高")
        print("请继续保持")
        break
    else:
        print("中")

    print("请按以下方式提升您的密码安全级别:\n\
    \t1. 密码必须由数字、字母及特殊字符三种组合\n\
    \t2. 密码只能由字母开头\n\
    \t3. 密码长度不能低于16位")
    break





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

使用道具 举报

发表于 2020-7-1 16:49:41 | 显示全部楼层
本帖最后由 yhhpf 于 2020-7-1 16:53 编辑

1,特意回去看了下题目答案,没问题的,你放下你的代码;
2,存在即合理,你只看到了你知道字符某个特征的情况下用find来找,但是当字符特征变了呢?比如变成需要取字符串最后5位,而这些字符串没有固定字符时?
3,三引号内的内容如果没去引用他,那他里面的内容就成了和注释一样的效果(参考#和面的内容);
4,并无报错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 19:36:41 | 显示全部楼层
我居然想不起来有讲find()这个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 09:39:34 | 显示全部楼层
Twilight6 发表于 2020-7-1 16:49
我们的程序的窗口就只有这么的大,当你的字符串很长,字符串全部显示在一行时候,你就会觉得比 ...

我明白了!真是感动!
最后一题我知道为啥我运行不了,因为我把里面的注释以及空白行都删掉了。。。所以格式让我改的面目全非。谢谢!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-2 09:40:11 | 显示全部楼层
彦彦儿 发表于 2020-7-2 09:39
我明白了!真是感动!
最后一题我知道为啥我运行不了,因为我把里面的注释以及空白行都删掉了。。。所以 ...

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

使用道具 举报

 楼主| 发表于 2020-7-2 09:43:30 | 显示全部楼层
405794672 发表于 2020-7-1 19:36
我居然想不起来有讲find()这个函数

我就是对照着小甲鱼那节课里面有个表格找出来用的哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 09:44:24 | 显示全部楼层
yhhpf 发表于 2020-7-1 16:49
1,特意回去看了下题目答案,没问题的,你放下你的代码;
2,存在即合理,你只看到了你知道字符某个特征的情 ...

嗯嗯!我懂了~我一开始不知道那些注释是可以写进去代码里面的哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 10:49:10 | 显示全部楼层
Twilight6 发表于 2020-7-2 09:40
哈哈,加油加油~

啊老师,我还有问题:
print("请按以下方式提升您的密码安全级别:\n\
        \t1. 密码必须由数字、字母及特殊字符三种组合\n\
        \t2. 密码只能由字母开头\n\
        \t3. 密码长度不能低于16位")
        break

这个等级是跟while语句里面的if语句一样(我是从空格来判断),那为啥评定为高等级密码的时候不会打印这几行字呢?因为从最后这行的break的等级来看感觉是跳出来打印这几句话,而不是在跳出来while?而且高等级密码的break也只是跳出elif这里?
我不知道我的问题是不是说明白了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-2 10:51:06 | 显示全部楼层
彦彦儿 发表于 2020-7-2 10:49
啊老师,我还有问题:
print("请按以下方式提升您的密码安全级别:\n\
        \t1. 密码必须由数字、 ...



这个是在循环内的哈,不是 break 后打印的,而是没次循环都会打印

而因为只有高级密码的 if 下面有 break  ,所以直接退出了循环,就导致代码还没运行到 print 就退出了所以不打印

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

使用道具 举报

 楼主| 发表于 2020-7-2 11:15:39 | 显示全部楼层
Twilight6 发表于 2020-7-2 10:51
这个是在循环内的哈,不是 break 后打印的,而是没次循环都会打印

而因为只有高级密码的 if 下面 ...

哦哦我能明白意思了,我的问题就是在于没有理解到第一个break和第二个break其实都是在跳出来while 1这个循环。强迫症总是想改成这样:
while 1:
    print("您的密码安全级别评定为:", end='')
    if flag_len == 1 or flag_con == 1:
        print("低")
    elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
        print("高")
        print("请继续保持")
        break
    else:
        print("中")

        print("请按以下方式提升您的密码安全级别:\n\
        \t1. 密码必须由数字、字母及特殊字符三种组合\n\
        \t2. 密码只能由字母开头\n\
        \t3. 密码长度不能低于16位")
         break

总感觉这样我舒服点,好理解一点...
于是,我又有问题了(我是问题少女吗?),为什么是while 1?不能单独用while?或者while 2?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-2 11:18:26 | 显示全部楼层
彦彦儿 发表于 2020-7-2 11:15
哦哦我能明白意思了,我的问题就是在于没有理解到第一个break和第二个break其实都是在跳出来while 1这个 ...


都可以的 while 10086 也没问题  条件循环只要条件成立都会循环的 即条件为 True

而 Python 中除了 0 None 空字符串、空字典、空列表、空元组、等都为的布尔类型值的 False

所以你这里随便就好,只要能为 True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 11:31:03 | 显示全部楼层
Twilight6 发表于 2020-7-2 11:18
都可以的 while 10086 也没问题  条件循环只要条件成立都会循环的 即条件为 True

而 Python 中除了  ...

那就是while True也可以咯?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-2 11:32:59 | 显示全部楼层
彦彦儿 发表于 2020-7-2 11:31
那就是while True也可以咯?

对~~这个最直接
>>> True == 1   # 1直接等于了 True
True
>>> True == '1'  # 而字符串是只能看成 bool 的True 而不等价哈
False
>>> True == bool('1')
True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-2 11:55:06 | 显示全部楼层

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

使用道具 举报

发表于 2020-7-2 12:26:45 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 04:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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