|
20鱼币
本帖最后由 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:
|
|