本帖最后由 LZRoc 于 2021-11-11 16:45 编辑
问题来源:
第020讲:函数:内嵌函数和闭包的课后练习题:
请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:(文本见附件)
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
当使用all([string[i-3:i].isupper()]) 时(见代码1),最终输出的是“uilovefisdhc”
当使用all([string[i-1].isupper(),string[i-2].isupper(),string[i-3].isupper()])时(见代码2),最终输出的是"ilovefishc"
当修改all([string[i+1:i+4].isupper()])为all([string[i+1].isupper(),string[i+2].isupper(),string[i+3].isupper()])并不改变输出结果
请问为什么出现这种差异?
代码1:def crack(string):
temp = []
length = len(string)
if length < 7:
return temp
elif length == 7 and string[3].islower() and all([string[:3].isupper()]) and all([string[4:].isupper()]):
temp.append(string[3])
return temp
elif length > 7:
for i in range(3,length-4):
if string[i].islower() and all([string[i-3:i].isupper()]) and string[i-4].islower() and all([string[i+1:i+4].isupper()]) and string[i+4].islower():
temp.append(string[i])
if string[-4].islower() and all([string[-7:-4].isupper()]) and all([string[-3:].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:
代码2:def crack(string):
temp = []
length = len(string)
if length < 7:
return temp
elif length == 7 and string[3].islower() and all([string[:3].isupper()]) and all([string[4:].isupper()]):
temp.append(string[3])
return temp
elif length > 7:
for i in range(3,length-4):
if string[i].islower() and all([string[i-1].isupper(),string[i-2].isupper(),string[i-3].isupper()]) and string[i-4].islower() and all([string[i+1:i+4].isupper()]) and string[i+4].islower():
temp.append(string[i])
if string[-4].islower() and all([string[-7:-4].isupper()]) and all([string[-3:].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:
|