鱼C论坛

 找回密码
 立即注册
查看: 1345|回复: 9

[已解决]20讲课后作业自己的答案运行不正确求解

[复制链接]
发表于 2021-2-9 23:28:31 | 显示全部楼层 |阅读模式

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

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

x
str1 = '''  拷贝的字符串 '''
list1 = []
length = len(str1)
for each in str1:
    if str1.index(each) >= 2:
        if each not in list1:

            if each in 'zxcvbnmasdfghjklqwertyuiop':
                if str1[(str1.index(each))+1] and str1[(str1.index(each))+2] and str1[(str1.index(each))+3] and str1[(str1.index(each))-1] and str1[(str1.index(each))-2] and str1[(str1.index(each))-3] in 'ZXCVBNMASDFGHJKLQWERTYUIOP':
                    print(each, end=' ')
            list1.append(each)


为什么我这样写不能得出正确的答案,求解,大佬们


l q s w t p g z r u v o i d
这是我运行的结果,我觉得思路没有问题啊,先判断 小写字符串,再判断小写字符串的左右三个字符是否是大写字母
最佳答案
2021-2-10 04:13:01
for i in range(len(str1)-6):
    # 这里计算长度之所以会 -6 是因为我们后边的计算会 +7 ,不提前 -6 后边运算会越界报错
    
    if "\n" in str1[i:i+7]:
        continue
    # 我们要取得是 str[i+3] ,所以如果 str1[i:i+7] 中有换行符,我们选择跳过本轮
    
    if i == 0:
        if (str1[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3],end = " ")
    # 为什么要把 i == 0 单独出来,因为在 i == 0 时并没有 str1[i-1]
    
    else:
        if ((not str1[i-1].isupper()) and
            str1[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3],end = " ")
    # 因为我们要保证 每位密码的左右两边均  有且只有 三个大写字母
    # 所以我们在密码前的 左右两侧的 第四位 均要保证他们不是大写字母
    # 所以前后两头都加了两个 not 
    # .isupper() 判断大写,是大写则为 True 否则为 False
    # .islower() 判断小写,是小写则为 True 否则为 False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-9 23:35:26 | 显示全部楼层
1.
if each not in list1:
为什么? 密码是小写字母的话也有可能是相同的吧

2.
 if str1[(str1.index(each))+1] and str1[(str1.index(each))+2] and str1[(str1.index(each))+3] and str1[(str1.index(each))-1] and str1[(str1.index(each))-2] and str1[(str1.index(each))-3] in 'ZXCVBNMASDFGHJKLQWERTYUIOP':
str1[(str1.index(each))-3] 
第三次循环的时候是 -1,这是不对的,你应该下标从 3 开始。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-9 23:38:38 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-2-9 23:35
1.
为什么? 密码是小写字母的话也有可能是相同的吧

当前索引值的情况下-1,-2,-3,表示左边,+1,+2,+3表示右边。我是这样想的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-9 23:40:40 | 显示全部楼层
python_aini 发表于 2021-2-9 23:38
当前索引值的情况下-1,-2,-3,表示左边,+1,+2,+3表示右边。我是这样想的

if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-9 23:47:04 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-2-9 23:35
1.
为什么? 密码是小写字母的话也有可能是相同的吧



if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 04:13:01 | 显示全部楼层    本楼为最佳答案   
for i in range(len(str1)-6):
    # 这里计算长度之所以会 -6 是因为我们后边的计算会 +7 ,不提前 -6 后边运算会越界报错
    
    if "\n" in str1[i:i+7]:
        continue
    # 我们要取得是 str[i+3] ,所以如果 str1[i:i+7] 中有换行符,我们选择跳过本轮
    
    if i == 0:
        if (str1[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3],end = " ")
    # 为什么要把 i == 0 单独出来,因为在 i == 0 时并没有 str1[i-1]
    
    else:
        if ((not str1[i-1].isupper()) and
            str1[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3],end = " ")
    # 因为我们要保证 每位密码的左右两边均  有且只有 三个大写字母
    # 所以我们在密码前的 左右两侧的 第四位 均要保证他们不是大写字母
    # 所以前后两头都加了两个 not 
    # .isupper() 判断大写,是大写则为 True 否则为 False
    # .islower() 判断小写,是小写则为 True 否则为 False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-2-10 11:27:21 | 显示全部楼层
python_aini 发表于 2021-2-9 23:47
if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没

这不是很明显没用吗? 你后面都 -3 了,你这里才是 >= 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 20:07:31 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-2-10 11:27
这不是很明显没用吗? 你后面都 -3 了,你这里才是 >= 2

我觉得我的代码这么写有问题。。。。一点都不规范,我先参考下答案,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-10 20:49:58 | 显示全部楼层

for i in range(len(str1)-6):
    if '\n' in str1[i:i+7]:
        continue
    if str1[i].islower() and str1[i+1:i+4].isupper() and str1[i+4].islower() and str1[i+5:i+8].isupper() and str1[i+8].islower():
        print(str1[i+4], end=' ')


成功了,多谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-19 23:04:35 | 显示全部楼层


str1 = '''  拷贝的字符串 '''
for i in range(4, len(str1)-4):  
    if str1[i].islower() and str1[i-4].islower() and str1[i-3].isupper() and str1[i-2].isupper() and str1[i-1].isupper() and str1[i+3].isupper() and str1[i+4].islower() and str1[i+2].isupper() and str1[i+1].isupper():
        print(str1[i], end=' ')


时隔多年发现了更加简单的程序,哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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