求助14讲课后作业,为啥自己写的这一行一选就报错。。还有就是这一行为啥用三引号?
print ('请输入需要检查的密码组合:',end='')password = input()
symbol1 = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
symbol2 = '0123456789'
symbol3 = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\'''#这一行自己写的,选择这一行就报错
#symbol3 = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''#选择这一行不会报错
time1 = 0#这里报错,syntaxerrorinvaild syntax
time2 = 0
time3 = 0
number = 0
if len(password) ==0 or password.isspace():
print ('您未输入密码或者全是空格,请重新输入:',end='')
password = input()
while 1:
for each in password:
number +=1
if time1 == 0:
if each in symbol1:
time1 +=1
if time2 == 0:
if each in symbol2:
time2 +=1
if time3 == 0:
if each in symbol3:
time3 +=1
if each not in symbol1 and each not in symbol2 and each not in symbol3:
print ('密码中还有偏僻字符,请重新输入:',end='')
password =input()
break
if number == len(password):
break
length = len(password)
piece = password[:1]
if length <= 8:
temp = 1
elif length >= 16:
temp = 3
else :
temp = 2
print('您输入的密码等级:',end='')
if temp ==3 and piece.isalpha() and time1 ==1 and time2 ==1 and time3 ==1:
print('高')
elif time1 ==1 and time2 ==1 and time3 ==1:
print('中')
elif temp ==2 and (time1+time2+time3 ==2):
print('中')
elif (time1+time2+time3 ==2):
print('低')
else:
print('低')
print ('请按以下方式提升您的密码安全等级:')
print ('\t1.密码必须有数字、字母及特殊字符组成\n\t2.密码只能由字母开头\n\t3.密码长度不能低于16位')
因为你自己些的将 \ 转义符放在了最后一个字符中,导致字符串的 ' 一个单引号被转义,导致右引号少了一个而报错
你的代码最后多加个 \ 即可,参考代码:
symbol3 = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\\'''
使用三引号是因为字符串中需要有 单引号或者 双引号,否则 Python 会将字符串字符中的引号当成结束的右引号
感觉注释那一行和自己写的也没哪不一样。。不知道为啥报错{:9_220:} symbol3 = r'''~!@#$%^&*()_=-/,.?<>;:[]{}|\'''
最后面的\把'给转义了,长字符串不完整了。6个单引号或双引号包裹的字符串可以多行。 suchocolate 发表于 2021-5-21 20:03
最后面的\把'给转义了,长字符串不完整了。6个单引号或双引号包裹的字符串可以多行。
前面不是有个r吗?这里三引号不是多行的意思吧,我改成单引号报错EOL while scanning string literal,改成双引号invaild syntax suchocolate 发表于 2021-5-21 20:03
最后面的\把'给转义了,长字符串不完整了。6个单引号或双引号包裹的字符串可以多行。
第五行代码最后的\挪到中间就没报错了,没懂为啥?不是说文本符前面r或者R可以使得\失去转义的作用吗? Twilight6 发表于 2021-5-21 20:14
因为你自己些的将 \ 转义符放在了最后一个字符中,导致字符串的 ' 一个单引号被转义,导致右引号少了一个 ...
但是三引号里面包括的没有单引号或者双引号的嘛。。 杨东明 发表于 2021-5-21 20:14
第五行代码最后的\挪到中间就没报错了,没懂为啥?不是说文本符前面r或者R可以使得\失去转义的作用吗?
这和数据生成顺序有关,因为 r'123456' 是先生成 '123456' 在进行 r 转义
若你将 \ 放在最后,就会导致生成字符串失败而报错 杨东明 发表于 2021-5-21 20:16
但是三引号里面包括的没有单引号或者双引号的嘛。。
三个连续引号在一起就相当于属于一种组合,不会再次导致和单引号产生歧义 Twilight6 发表于 2021-5-21 20:16
这和数据生成顺序有关,因为 r'123456' 是先生成 '123456' 在进行 r 转义
若你将 \ 放在最后,就会 ...
这个没太懂。。意思是先转义符\必须正常发挥作用是吗?然后再由r转义,放在最后的\,没办法发挥正常作用,所以报错? Twilight6 发表于 2021-5-21 20:16
这和数据生成顺序有关,因为 r'123456' 是先生成 '123456' 在进行 r 转义
若你将 \ 放在最后,就会 ...
r'123\t456'先生成'123 456',再生成'123456'? 杨东明 发表于 2021-5-21 20:23
r'123\t456'先生成'123 456',再生成'123456'?
刚刚错了,是先 '123 456' 再r 后得到 '123\t456' Twilight6 发表于 2021-5-21 20:26
刚刚错了,是先 '123 456' 再r 后得到 '123\t456'
懂了,谢谢谢谢{:9_228:} suchocolate 发表于 2021-5-21 20:03
最后面的\把'给转义了,长字符串不完整了。6个单引号或双引号包裹的字符串可以多行。
谢谢解答{:10_254:}
页:
[1]