鱼C论坛

 找回密码
 立即注册
查看: 933|回复: 3

[已解决]课后20动手做的第二道

[复制链接]
发表于 2020-7-29 15:10:36 | 显示全部楼层 |阅读模式

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

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

x
题目看图,下面的代码是我写的,不知道错什么
运行后,它会报 IndexError: string index out of range

def passwords():
    temp = input("find the passwords")
    a = 0
    b = 3
    ps = []
    while temp[a:b] != "":
        if temp[a:b].isupper() and temp[b+1].islower() :
            a += 3
            b += 3
            if temp[a:b].isupper():
                ps.append(temp[b-2])
            else:
                a += 1
                b += 1
        else:
            a += 1
            b += 1
    password = "".join(ps)        
    print(password)
passwords()
最佳答案
2020-7-29 15:32:55

帮你改完代码了,直接用 for 循环来索引下标判断就好,免去你的 a、b 参数计算的麻烦,而且容易算晕了:
def passwords(temp):
    ps = []
    temp = temp.replace('\n','')  # 甲鱼哥的文本有换行符这里对主要的对甲鱼哥文本有效,而这里没什么用哈~
    
    for i in range(len(temp)):    # 直接拿 for 循环来遍历,就免去了你的 a、b 变量的麻烦
        
        if temp[i].islower():     # 判断循环到的字符是不是小写字母
            
            if temp[i-3:i].isupper() and (i-4 < 0 or temp[i-4].islower()) :  # 判断前 3 个字母是不是大写字母,同时前面第四个字母是不是小写字母
                # 这里 i-4 < 0 是为了避免在第四个元素时候就是小写而导致索引为负数
                
                if temp[i+1:i+4].isupper() and temp[i+4].islower():
                    # 判断后 3 个字母是不是大写字母,同时后面第四个字母是不是小写字母
                    
                    ps.append(temp[i]) # 如果都符合条件说明就是密码
                    
    password = "".join(ps)  # 将列表拼接起来
    print(password)

string = """ABSaDKSbRIHcRHGcdDIF"""
passwords(string)
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-29 15:12:13 | 显示全部楼层
[b]

先不抛开你的索引超出范围的报错,你用 input 本身就是个错误了

input 函数不支持多行字符的输入,一但你拷贝过真 input 遇到换行符就会自动相当于回车了

[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-29 15:32:55 | 显示全部楼层    本楼为最佳答案   

帮你改完代码了,直接用 for 循环来索引下标判断就好,免去你的 a、b 参数计算的麻烦,而且容易算晕了:
def passwords(temp):
    ps = []
    temp = temp.replace('\n','')  # 甲鱼哥的文本有换行符这里对主要的对甲鱼哥文本有效,而这里没什么用哈~
    
    for i in range(len(temp)):    # 直接拿 for 循环来遍历,就免去了你的 a、b 变量的麻烦
        
        if temp[i].islower():     # 判断循环到的字符是不是小写字母
            
            if temp[i-3:i].isupper() and (i-4 < 0 or temp[i-4].islower()) :  # 判断前 3 个字母是不是大写字母,同时前面第四个字母是不是小写字母
                # 这里 i-4 < 0 是为了避免在第四个元素时候就是小写而导致索引为负数
                
                if temp[i+1:i+4].isupper() and temp[i+4].islower():
                    # 判断后 3 个字母是不是大写字母,同时后面第四个字母是不是小写字母
                    
                    ps.append(temp[i]) # 如果都符合条件说明就是密码
                    
    password = "".join(ps)  # 将列表拼接起来
    print(password)

string = """ABSaDKSbRIHcRHGcdDIF"""
passwords(string)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-29 16:01:12 | 显示全部楼层
Twilight6 发表于 2020-7-29 15:32
帮你改完代码了,直接用 for 循环来索引下标判断就好,免去你的 a、b 参数计算的麻烦,而且容易算晕了:
...

太用心!非常感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 17:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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