孙赖 发表于 2020-9-3 09:44:42

新手 在做小甲鱼的作业时遇到了一个问题

print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
iftemp.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也都变成绿色的了 这是怎么回事呀 求大佬帮帮我{:5_100:} {:5_104:}

heidern0612 发表于 2020-9-3 09:48:20

错误提示是啥?

孙赖 发表于 2020-9-3 09:49:03

print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
iftemp.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('请键入您的新密码')
iftemp.isdigit()==True and len(temp)>16:
    print('您的密码安全评级为:低')
    print('请以以下方法提升您的密码安全级别')
    print('1,密码必须由数字,字母及特殊字符三种组合')
    print('2,密码只能由字母开头')
    while   temp.isdigit()==True and len(temp)<16:
      print('您的密码不符合要求')
      temp=input('请键入您的新密码')

heidern0612 发表于 2020-9-3 09:50:55

改成这样:


print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
iftemp.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('请键入您的新密码')

孙赖 发表于 2020-9-3 10:00:40

C:\Users\孙赖\Desktop

孙赖 发表于 2020-9-3 10:01:20

heidern0612 发表于 2020-9-3 09:50
改成这样:

怎么发图片啊,错误就是有一个红杠

孙赖 发表于 2020-9-3 10:02:11

heidern0612 发表于 2020-9-3 09:50
改成这样:

在第10行的最后 谢谢大佬

heidern0612 发表于 2020-9-3 10:03:49

孙赖 发表于 2020-9-3 10:02
在第10行的最后 谢谢大佬

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

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

1q23w31 发表于 2020-9-3 10:04:18

孙赖 发表于 2020-9-3 10:01
怎么发图片啊,错误就是有一个红杠

https://fishc.com.cn/forum.php?mod=viewthread&tid=128631&extra=page%3D1%26filter%3Dtypeid%26typeid%3D441

孙赖 发表于 2020-9-3 10:11:18

heidern0612 发表于 2020-9-3 10:03
主要是有个斜杠的转义符,把你后面的冒号内容转义掉了。

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

怎么用r转义啊 这个我还不太会用

heidern0612 发表于 2020-9-3 10:27:34

孙赖 发表于 2020-9-3 10:11
怎么用r转义啊 这个我还不太会用

看这个:戳我前进

小甲鱼的课后作业也有介绍。

卡着点学习 发表于 2020-9-3 10:49:39

本帖最后由 卡着点学习 于 2020-9-3 10:51 编辑

就是因为有 ‘\’,所以里面的字符就会被转义了,但是如果你输入成这样 r'''\\\*&(^^///''', 前面加 r 并用 '''''' 括起来,就可以把 r 后面的字符完整保留了。我之前也在这题出现 traceback ,一直明白,后来认证看来答案再琢磨才懂

sunrise085 发表于 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循环

疾风怪盗 发表于 2020-9-3 11:05:11

本帖最后由 疾风怪盗 于 2020-9-3 11:36 编辑

print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
iftemp.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='~!@#$%^&*()_=-/\,.?<>;:[]{}|\\'

sunrise085 发表于 2020-9-3 11:10:26

疾风怪盗 发表于 2020-9-3 11:05
print('--------密码安全性检查程序-------')
temp=input('请键入您的密码')
iftemp.isdigit()==True ...

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

你写的字符串内容是:~!@#$%^&*()_=-/,.?<>;:[]{}|"
人家的字符串内容是:~!@#$%^&*()_=-/,.?<>;:[]{}|\

疾风怪盗 发表于 2020-9-3 11:22:54

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

没有啊,pycharm里写的时候是正常的,发在论坛上加了code的代码格式,就会自动把最后的\去掉,所以我把代码格式去掉后发出来的

sunrise085 发表于 2020-9-3 11:28:58

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

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

sunrise085 发表于 2020-9-3 11:31:54

本帖最后由 sunrise085 于 2020-9-3 11:47 编辑

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

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

疾风怪盗 发表于 2020-9-3 11:34:40

本帖最后由 疾风怪盗 于 2020-9-3 11:36 编辑

sunrise085 发表于 2020-9-3 11:28
说的就是你这个字符串a
你的反斜杠是转义那个双引号的。所以你的字符串内容是没有反斜杠的。
但是人 ...

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

谢谢提醒

疾风怪盗 发表于 2020-9-3 11:39:52

sunrise085 发表于 2020-9-3 11:31
给你个字符串,你说说里面有没有反斜杠

\n \' \t
没有\
有3个双引号也不对的吧
页: [1] 2
查看完整版本: 新手 在做小甲鱼的作业时遇到了一个问题