鱼C论坛

 找回密码
 立即注册
查看: 1847|回复: 23

[已解决]新手 在做小甲鱼的作业时遇到了一个问题

[复制链接]
发表于 2020-9-3 09:44:42 | 显示全部楼层 |阅读模式

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

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

x
print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
if  temp.isdigit()==True and len(temp)<16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    print('3,密码成都不能低于16位')
    while   temp.isdigit()==True and len(temp)<16 and '~!@#$%^&*()_=-/,.?<>;:[]{}|\' in temp:
        print('您的密码不符合要求')
        temp=input('请键入您的新密码')
想要检查输入的密码中是否有~!@#$%^&*()_=-/,.?<>;:[]{}|\这几个字符 但是我一这样打就报错 显示temp后面有个红杠 而且打上去in temp也都变成绿色的了 这是怎么回事呀 求大佬帮帮我
最佳答案
2020-9-3 10:58:49
你的程序既有语法问题又有逻辑问题

第一个问题:
while循环条件的第二个and后面有语法问题,这个字符串的最后一个字符是反斜杠为转义字符将引号转义了,导致字符串没有后半个引号作为结尾了,因此出现了你所看到的 in temp都变成了绿色
解决办法:1、将末尾反斜杠向前移,不让其在末尾;2、写双反斜杠

第二个问题:while循环条件的第二个and后面这部分,你想表达的意思是:temp中有这个字符串中的某一个或多个字符吧? 但你写的这种形式意思是该字符串是否是temp的子字符串。正确的方式有两种:一种是遍历一个字符串,然后判断每一个字符是否在另一个字符串中;另一种是求两个字符串交集,若有交集说明有相同字符
#第一种:
flag=False
for i in temp:
    if i in '~!@#$%^&*()_=-/\,.?<>;:[]{}|\\':
        flag = True

#第二种
list(set(temp).intersection(set('~!@#$%^&*()_=-/\,.?<>;:[]{}|\\')))

第三个问题:
你的程序一旦进入if语句,说明temp中只有数字,没有其他字符,那么while循环条件则医院不可能成立,所以说你的while循环写的位置不对,或者就不应该出现while循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-3 09:48:20 | 显示全部楼层
错误提示是啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 09:49:03 | 显示全部楼层
print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
if  temp.isdigit()==True and len(temp)<16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    print('3,密码成都不能低于16位')
    while   temp.isdigit()==True and len(temp)<16 and '~!@#$%^&*()_=-/,.?<>;:[]{}|\' in temp==False:
        print('您的密码不符合要求')
        temp=input('请键入您的新密码')
if  temp.isdigit()==True and len(temp)>16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    while   temp.isdigit()==True and len(temp)<16:
        print('您的密码不符合要求')
        temp=input('请键入您的新密码')

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

使用道具 举报

发表于 2020-9-3 09:50:55 | 显示全部楼层
改成这样:
print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
if  temp.isdigit()==True and len(temp)<16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    print('3,密码成都不能低于16位')
    while   temp.isdigit()==True and len(temp)<16 and """~!@#$%^&*()_=-/,.?<>;:[]{}|"""" in temp:
        print('您的密码不符合要求')
        temp=input('请键入您的新密码')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-9-3 10:00:40 | 显示全部楼层
C:\Users\孙赖\Desktop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 10:01:20 | 显示全部楼层

怎么发图片啊,错误就是有一个红杠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 10:02:11 | 显示全部楼层

在第10行的最后 谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 10:03:49 | 显示全部楼层
孙赖 发表于 2020-9-3 10:02
在第10行的最后 谢谢大佬

主要是有个斜杠的转义符,把你后面的冒号内容转义掉了。

用个三引号或者r转义下就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 10:04:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 10:11:18 | 显示全部楼层
heidern0612 发表于 2020-9-3 10:03
主要是有个斜杠的转义符,把你后面的冒号内容转义掉了。

用个三引号或者r转义下就好。

怎么用r转义啊 这个我还不太会用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 10:27:34 | 显示全部楼层
孙赖 发表于 2020-9-3 10:11
怎么用r转义啊 这个我还不太会用

看这个:戳我前进

小甲鱼的课后作业也有介绍。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 10:49:39 | 显示全部楼层
本帖最后由 卡着点学习 于 2020-9-3 10:51 编辑

就是因为有 ‘\’,所以里面的字符就会被转义了,但是如果你输入成这样 r'''\\\*&(^^///''', 前面加 r 并用 '''  ''' 括起来,就可以把 r 后面的字符完整保留了。我之前也在这题出现 traceback ,一直明白,后来认证看来答案再琢磨才懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 10:58:49 | 显示全部楼层    本楼为最佳答案   
你的程序既有语法问题又有逻辑问题

第一个问题:
while循环条件的第二个and后面有语法问题,这个字符串的最后一个字符是反斜杠为转义字符将引号转义了,导致字符串没有后半个引号作为结尾了,因此出现了你所看到的 in temp都变成了绿色
解决办法:1、将末尾反斜杠向前移,不让其在末尾;2、写双反斜杠

第二个问题:while循环条件的第二个and后面这部分,你想表达的意思是:temp中有这个字符串中的某一个或多个字符吧? 但你写的这种形式意思是该字符串是否是temp的子字符串。正确的方式有两种:一种是遍历一个字符串,然后判断每一个字符是否在另一个字符串中;另一种是求两个字符串交集,若有交集说明有相同字符
#第一种:
flag=False
for i in temp:
    if i in '~!@#$%^&*()_=-/\,.?<>;:[]{}|\\':
        flag = True

#第二种
list(set(temp).intersection(set('~!@#$%^&*()_=-/\,.?<>;:[]{}|\\')))

第三个问题:
你的程序一旦进入if语句,说明temp中只有数字,没有其他字符,那么while循环条件则医院不可能成立,所以说你的while循环写的位置不对,或者就不应该出现while循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-3 11:05:11 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-3 11:36 编辑

print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
if  temp.isdigit()==True and len(temp)<16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    print('3,密码成都不能低于16位')
   a='~!@#$%^&*()_=-/\,.?<>;:[]{}|\\'
    while   temp.isdigit()==True and len(temp)<16 and a in temp:
        print('您的密码不符合要求')
        temp=input('请键入您的新密码')
主要是这个
a='~!@#$%^&*()_=-/\,.?<>;:[]{}|\\'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 11:10:26 | 显示全部楼层
疾风怪盗 发表于 2020-9-3 11:05
print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
if  temp.isdigit()==True ...


不要误导人哈
你直接把人家的字符串修改了。。
人家的字符串中是有反斜杠的,但是没有双引号,你这个修改,字符串中的内容被你修改了,

你写的字符串内容是:~!@#$%^&*()_=-/,.?<>;:[]{}|"
人家的字符串内容是:~!@#$%^&*()_=-/,.?<>;:[]{}|\
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 11:22:54 | 显示全部楼层
sunrise085 发表于 2020-9-3 11:10
不要误导人哈
你直接把人家的字符串修改了。。
人家的字符串中是有反斜杠的,但是没有双引号,你这个 ...

没有啊,pycharm里写的时候是正常的,发在论坛上加了code的代码格式,就会自动把最后的\去掉,所以我把代码格式去掉后发出来的
微信截图_20200903112124.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-3 11:28:58 | 显示全部楼层
疾风怪盗 发表于 2020-9-3 11:22
没有啊,pycharm里写的时候是正常的,发在论坛上加了code的代码格式,就会自动把最后的\去掉,所以我把代 ...


说的就是你这个字符串a
你的反斜杠是转义那个双引号的。所以你的字符串内容是没有反斜杠的。
但是人家需要的字符串是有反斜杠的,只是写的不符合语法,导致没有反斜杠了
你的写法没有语法问题,在哪儿都能通过,只是你写的不是题主要求的意思
你仔细看一下我在15楼写的最后两行

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
疾风怪盗 -1 -1 谢谢提醒

查看全部评分

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

使用道具 举报

发表于 2020-9-3 11:31:54 | 显示全部楼层
本帖最后由 sunrise085 于 2020-9-3 11:47 编辑
疾风怪盗 发表于 2020-9-3 11:22
没有啊,pycharm里写的时候是正常的,发在论坛上加了code的代码格式,就会自动把最后的\去掉,所以我把代 ...


给你个字符串,你说说里面有没有反斜杠
a="\n\'\"\t"

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
疾风怪盗 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2020-9-3 11:34:40 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-3 11:36 编辑
sunrise085 发表于 2020-9-3 11:28
说的就是你这个字符串a
你的反斜杠是转义那个双引号的。所以你的字符串内容是没有反斜杠的。
但是人 ...


a='~!@#$%^&*()_=-/\,.?<>;:[]{}|\\'
写成这样应该可以了吧

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

使用道具 举报

发表于 2020-9-3 11:39:52 | 显示全部楼层
sunrise085 发表于 2020-9-3 11:31
给你个字符串,你说说里面有没有反斜杠

\n \' \t
没有\
有3个双引号也不对的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 20:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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