|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Stubborn 于 2018-12-3 21:11 编辑
动手02如题:找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
密码本:
我的思路是,1,既然密码是小写,我首先判定,这个字符串到底是不是小写。如果这个字符串是小写,我再判定,这个字符串的前三个长度,是不是全部是大写,如果这个前三个字符串都是大写,我再判定这个字符串后 三个长度,是不是全部是大写,如果是,判定这个字符串属于“密码”,添加到列表。首先问下,我 是不是对题目理解错了。下面贴上我的代码:
- file_object = open("string2.txt")
- text = file_object.read()
- lenght = len(text) #字符串长度
- txt_list = [] #存放密码
- for i in range(lenght):
- if text[i].islower():
- if text[i-3:i].isupper():
- if text[i+1:i+3].isupper():
- txt_list.append(text[i])
- else:
- continue
- else:
- continue
- else:
- continue
- print(''.join(txt_list))
复制代码
得到的处理数据和鱼C老师的答案不一样。鱼C老师的答案处理结果是:ilovefishc。我处理的就差远了。是不是我对题目理解偏了?有大佬讲解下吗?非常感谢,最好大佬们有自己觉得思路或者答案,也帮忙评论下、。
---------------------------------------------------分割线-------------------------------------------------------------------------------------------
首先,理解有点问题,b,有,且只有三个大写字母。意思就是xAAAxAAAx 只有这种才符合题意,其他的AAAAxAAAAA ,这种是不合符的。
第二。一楼版主,判断越界,需要加一个限制,在for i in range(3,lenght-3): 密码只能从第四个单位长度判断,和倒数第四个单位长度判断。似乎改成在后面两个if判断中还是有越界,应该要改成5,但是5似乎也不有矛盾的感觉,思路不对?刚刚想到,既然是这样,我单独判断前面AAAxAAAA(8位长度)和后面单独8位,虽然有些麻烦,好歹是自己的思路,OKOKOK
--------------------------------------------------最终结果------------------------------------
- file_object = open("string2.txt")
- text = file_object.read()
- file_object.close()
- lenght = len(text) #字符串长度
- txt_list = [] #存放密码
- for i in range(3, lenght-3):
- if '\n' in text[i-3:i+4]: #若果是换行符,跳过
- continue
- if text[i].islower():
- if (text[i-3:i]==text[i-3:i].upper()) and (text[i-4:i]!=text[i-4:i].upper()): #如果前三等于前三转换成大写的字母,而且前面四个字母不等于后面四个转换成大些的字母
- if (text[i+1:i+4] == text[i+1:i+4].upper()) and (text[i+1:i+5] != text[i+1:i+5].upper()): #判断后面的
- txt_list.append(text[i]) #全部判断完成 认定是密码,添加到密码列表
- else:
- continue
- else:
- continue
- else:
- continue
- print(''.join(txt_list)) # 把列表打印成字符串
复制代码
思路02.其他渔友:
- with open(r'string2.txt') as f:
- s=f.read()
- s=''.join(filter(str.isalpha,s))
- pwd=''
- for i in range(len(s)):
- if s[i].islower():
- if s[i-4].islower() and s[i-3:i].isupper() \
- and s[i+1:i+4].isupper() and s[i+4].islower():
- pwd+=s[i]
- print(pwd)
复制代码
思路修改其他渔友:
- file_object = open("string2.txt")
- text = file_object.read()
- lenght = len(text) #字符串长度
- txt_list = [] #存放密码
- for i in range(4,lenght-4):
- if text[i].islower(): #先判断目标是不是小写
- t1 = text[i-4:i+5]#截取xXXXxXXXx
- if t1.isalpha():#判断xXXXxXXXx是否全是字母
- t2 = t1[0]+t1[4]+t1[8] #判断t2全部为小写
- t3 = t1[1:4]+t1[5:8] #判断t3全部为大写
- if t2.islower() and t3.isupper(): #判定成功,加入密码列表
- print(t1[4],end='')
-
-
- print(''.join(txt_list))
复制代码
楼上版主正解,要正确理解索引和isupper方法。
由于这里字符串设置的比较简单,想要简单的看到结果可以作个弊实现(换个字符串就不行了):
- file_object = open("string2.txt")
- text = file_object.read()
- file_object.close()
- lenght = len(text) #字符串长度
- txt_list = [] #存放密码
- for i in range(5, lenght-5):
- if '\n' in text[i-3:i+4]:
- continue
- if text[i].islower():
- if (text[i-3:i]==text[i-3:i].upper()) and (text[i-4:i]!=text[i-4:i].upper()):
- if (text[i+1:i+4] == text[i+1:i+4].upper()) and (text[i+1:i+5] != text[i+1:i+5].upper()):
- txt_list.append(text[i])
- else:
- continue
- else:
- continue
- else:
- continue
- print(''.join(txt_list))
复制代码
|
评分
-
查看全部评分
|