lanseyingfu 发表于 2020-7-29 15:10:36

课后20动手做的第二道

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

def passwords():
    temp = input("find the passwords")
    a = 0
    b = 3
    ps = []
    while temp != "":
      if temp.isupper() and temp.islower() :
            a += 3
            b += 3
            if temp.isupper():
                ps.append(temp)
            else:
                a += 1
                b += 1
      else:
            a += 1
            b += 1
    password = "".join(ps)      
    print(password)
passwords()

Twilight6 发表于 2020-7-29 15:12:13



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

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

Twilight6 发表于 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.islower():   # 判断循环到的字符是不是小写字母
            
            if temp.isupper() and (i-4 < 0 or temp.islower()) :# 判断前 3 个字母是不是大写字母,同时前面第四个字母是不是小写字母
                # 这里 i-4 < 0 是为了避免在第四个元素时候就是小写而导致索引为负数
               
                if temp.isupper() and temp.islower():
                  # 判断后 3 个字母是不是大写字母,同时后面第四个字母是不是小写字母
                  
                  ps.append(temp) # 如果都符合条件说明就是密码
                  
    password = "".join(ps)# 将列表拼接起来
    print(password)

string = """ABSaDKSbRIHcRHGcdDIF"""
passwords(string)

lanseyingfu 发表于 2020-7-29 16:01:12

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

太用心!非常感谢!!
页: [1]
查看完整版本: 课后20动手做的第二道