all([str[x:z]])和all([str[x],str[y],str[z]])问题
本帖最后由 LZRoc 于 2021-11-11 16:45 编辑问题来源:
第020讲:函数:内嵌函数和闭包的课后练习题:
请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:(文本见附件)
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
当使用all(.isupper()]) 时(见代码1),最终输出的是“uilovefisdhc”
当使用all(.isupper(),string.isupper(),string.isupper()])时(见代码2),最终输出的是"ilovefishc"
当修改all(.isupper()])为all(.isupper(),string.isupper(),string.isupper()])并不改变输出结果
请问为什么出现这种差异?
代码1:
def crack(string):
temp = []
length = len(string)
if length < 7:
return temp
elif length == 7 and string.islower() and all(.isupper()]) and all(.isupper()]):
temp.append(string)
return temp
elif length > 7:
for i in range(3,length-4):
if string.islower() and all(.isupper()]) and string.islower() and all(.isupper()]) and string.islower():
temp.append(string)
if string[-4].islower() and all(.isupper()]) and all(.isupper()]) and string[-8].islower():
temp.append(string[-4])
return temp
password = open("string2.txt","r")
passwords = crack(password.read())
print("小甲鱼隐藏的密码是:","".join(k for k in passwords))
password.close()
结果1:
小甲鱼隐藏的密码是: uilovefisdhc
代码2:
def crack(string):
temp = []
length = len(string)
if length < 7:
return temp
elif length == 7 and string.islower() and all(.isupper()]) and all(.isupper()]):
temp.append(string)
return temp
elif length > 7:
for i in range(3,length-4):
if string.islower() and all(.isupper(),string.isupper(),string.isupper()]) and string.islower() and all(.isupper()]) and string.islower():
temp.append(string)
if string[-4].islower() and all(.isupper()]) and all(.isupper()]) and string[-8].islower():
temp.append(string[-4])
return temp
password = open("string2.txt","r")
passwords = crack(password.read())
print("小甲鱼隐藏的密码是:","".join(k for k in passwords))
password.close()
结果2:
小甲鱼隐藏的密码是: ilovefishc ewf 没人解答吗?{:10_266:} 找到原因:空白字符{:10_247:}。字符串切片有风险!!!
字符串中包括空格,换行符,制表符等,用s.isupper()或s.islower()判断是会忽略空白字符,其他不会忽略,比如s.isdigit(){:10_247:}。
当分开切片时string,isupper(),string,isupper(),string.isupper(),会单独返回空白字符串,因此结果正确。
a="123 "
a.isdigit()
False
a="a a"
a.islower()
True
a="a\na"
a.islower()
True
a="a\ta"
a.islower()
True
a="AA AA"
a.isupper()
True
a="AAA\tA"
a.isupper()
True
切片:
a="ABC\nDEF"
a
'\nDEF'
a.isupper()
True
a
'\n'
a.isupper()
False
页:
[1]