鱼C论坛

 找回密码
 立即注册
查看: 1872|回复: 2

[已解决]零基础学python第20讲的最后一题

[复制链接]
发表于 2020-2-13 22:44:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助各位朋友,最后一道题我的想法是:将整个string2按顺序切片,这个切片的长度是7个字符(这个方法应该是有瑕疵的,但因为恰好字符串string2排除掉‘\n’本身是7的倍数,姑且用这样的方法),只要看这个切片的前三和后三个字符是不是大写,中间是不是小写就可以了,最后输出那个小写的字符。


代码是这样的。
a = 'string2文件'

b = 0

c = ''

list1 = [] #放入7字符串切片

list2 = [] #装符合题意的小写字母

for q in a:
    if q !='\n':
        c += q
    else:
        continue
#这一步是把string2文件中的回车去掉,创造一个只有原字符的文件c

for i in range((len(c)-6)):
    list1.append(c[i:i+7])
#这一步是将整个字符串分成只有7个字符串的切片(例:list1[0] = c[0:7],list1[1] = c[1:8])

for each in list1:
    if each[0:3].isupper() and each[4:7].isupper() and each[3].islower():
        print(f'{each[3]}',end = '')
#这一步是打印符合题意的中间小写字母

但是我的最终结果不是ilovefishc,而是llpuiallouovvhezafbilbjimirmsqqxthtgcnkdljoashncekxw。

我不太明白为什么会多出这么多小写字母,但是我觉得切片法也不违背题意,求各位朋友指点。

能确定的是:
1.我导入的string2文件是无误的。
2.将小甲鱼的例子带入我的代码中也可以正确得到所有的小写字母。

最佳答案
2020-2-13 22:59:02
按题意仅前三和后三是大写,也就是说前4一定不能是大写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-13 22:59:02 | 显示全部楼层    本楼为最佳答案   
按题意仅前三和后三是大写,也就是说前4一定不能是大写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 14:50:19 | 显示全部楼层
本帖最后由 shatanzongcai 于 2020-2-14 14:52 编辑
冬雪雪冬 发表于 2020-2-13 22:59
按题意仅前三和后三是大写,也就是说前4一定不能是大写


前四指的是这个从左往右数的第四的字符吗,如果是这个意思的话,我的代码:
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’的例子,这样你就明白我的代码和小甲鱼的代码到底有什么区别。

还是很感谢小甲鱼提供的帮助,写到这里对错其实没有什么意义了,主要是学习到了新的方法和思考角度。




小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-11 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表