课后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()
先不抛开你的索引超出范围的报错,你用 input 本身就是个错误了
input 函数不支持多行字符的输入,一但你拷贝过真 input 遇到换行符就会自动相当于回车了
帮你改完代码了,直接用 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) Twilight6 发表于 2020-7-29 15:32
帮你改完代码了,直接用 for 循环来索引下标判断就好,免去你的 a、b 参数计算的麻烦,而且容易算晕了:
...
太用心!非常感谢!!
页:
[1]