|

楼主 |
发表于 2020-2-14 14:50:19
|
显示全部楼层
本帖最后由 shatanzongcai 于 2020-2-14 14:52 编辑
前四指的是这个从左往右数的第四的字符吗,如果是这个意思的话,我的代码:
for each in list1:
if each[0:3].isupper() and each[4:7].isupper() and each[3].islower():
print(f'{each[3]}',end = '')
这一部分是符合“每位密码为单个小写字母,每位密码的左右两边均有且只有三个大写字母”的要求的。
后来我重新看了一下小甲鱼的代码,我发现小甲鱼的遍历和我的是不一样的。
具体来说,我的遍历按照顺序涵盖了所有的可能7字连续字符的切片,因为一共有8204(如果没算错)个字符,按照每组7个切片,我一共可以得到8198个切片。
但是按照小甲鱼的方法来看的话,小甲鱼是按照顺序算下去,假设第一个字符是大写,第二个是字符小写,这两个字符明显不符合题意了,所以直接三个count变成0,这样算来,小甲鱼的遍历数量远远小于我的遍历数量。一些符合我的代码的切片,在小甲鱼那里就不符合了。
我举个例子:
为了方便理解我们就只分大小写,比方说有个字符串是这样的:‘AAAAaAAAaAAAaaAAAaA’
如果使用小甲鱼的方法,得到的结果是这样的:a
使用我的方法,得到的结果是:aa
小甲鱼和我的结果不一样是因为,小甲鱼在经历第四个字符A时,发现它不符合题意,所以所有的count全都归零,也就等于这个代码切掉了不符合要求的前四个字符,变成了从‘aAAAaAAAaaAAAaA’这个字符串开始重新计算。那很明显,只有一个a是符合题意的。
但是如果是用我的方法,我所有的切片如下:
list1 = ['AAAAaAA', 'AAAaAAA', 'AAaAAAa', 'AaAAAaA', 'aAAAaAA', 'AAAaAAA', 'AAaAAAa', 'AaAAAaa', 'aAAAaaA', 'AAAaaAA', 'AAaaAAA', 'AaaAAAa', 'aaAAAaA']
其中第list1[2]和list1[5]符合题意,所以我得到了2个a。
总结一下:
问题的根源在于小甲鱼的代码的意思是每一个字符只能够使用一次,只要不符合题意就会被排斥在外,但是我的代码是切片,所以有一些字符甚至出现了7次。但这种方法其实不违背题目的要求。
所以,我的结论是这个题目要求和小甲鱼提供的string2字符串出现了一定的矛盾。如果使用的方法不一样,得到的结果也不一样。
如果还有朋友不明白我的阐述的,我可以再详细讲一下‘AAAAaAAAaAAAaaAAAaA’的例子,这样你就明白我的代码和小甲鱼的代码到底有什么区别。
还是很感谢小甲鱼提供的帮助,写到这里对错其实没有什么意义了,主要是学习到了新的方法和思考角度。
|
|