|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 四四四四四秒 于 2020-9-11 23:05 编辑
第20讲的动动手第二题:
请用已学过的知识编写程序,找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
a) 每位密码为单个小写字母
b) 每位密码的左右两边均有且只有三个大写字母
我为它编写了这样一个代码:
结果运行之后出现了IndexError: string index out of range(索引器错误:字符串索引超出范围)这样的提示。我写出的代码无法完成题目的要求,但我不明白为什么会报错,理论上来说,它应该是可以运行的,只是会得出错误的结果。
我试着删除了末尾的一个字母,或者为它添加了一个新的字母后,却又能运行了。想问问各位大佬,为什么会出现这样的错误提示?
- if a[s].islower() and a[s-1].isupper() and a[s-2].isupper() and a[s-3].isupper() and a[s+1].isupper() and a[s+2].isupper() and a[s+3].isupper():
复制代码
- a的长度位8307位
- 当最后一位8306位读取时,a[s]=c,符合这句判断的第一个条件,然后就往后,符合第二个、第三个、第四个条件,但是到了第五个,a[s+1]没有这个值,所以就报错了
- 当删了最后一位时,最后一位8305位读取,a[s]=W,不符合判断的第一个条件,就直接退出判断了,后面的不用考虑,所以没有报错
- 当加了一位c后,最后一位8307位读取,a[s]=c,符合判断的第一个条件,然后就往后,符合第二个、第三个、第四个条件,但是到了第五个,但是a[s+1]=c,不符合条件就直接退出判断了,后面的不用考虑,即时没有a[s+2]也没有报错
- 同样的,如果补最后一位为W,也会报错,需要补三位WWW才不会报错
复制代码
|
|