20讲课后作业自己的答案运行不正确求解
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
这是我运行的结果,我觉得思路没有问题啊,先判断 小写字符串,再判断小写字符串的左右三个字符是否是大写字母 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 开始。 °蓝鲤歌蓝 发表于 2021-2-9 23:35
1.
为什么? 密码是小写字母的话也有可能是相同的吧
当前索引值的情况下-1,-2,-3,表示左边,+1,+2,+3表示右边。我是这样想的 python_aini 发表于 2021-2-9 23:38
当前索引值的情况下-1,-2,-3,表示左边,+1,+2,+3表示右边。我是这样想的
if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没 °蓝鲤歌蓝 发表于 2021-2-9 23:35
1.
为什么? 密码是小写字母的话也有可能是相同的吧
if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没
for i in range(len(str1)-6):
# 这里计算长度之所以会 -6 是因为我们后边的计算会 +7 ,不提前 -6 后边运算会越界报错
if "\n" in str1:
continue
# 我们要取得是 str ,所以如果 str1 中有换行符,我们选择跳过本轮
if i == 0:
if (str1.isupper() and
str1.islower() and
str1.isupper() and
(not str1.isupper())):
print(str1,end = " ")
# 为什么要把 i == 0 单独出来,因为在 i == 0 时并没有 str1
else:
if ((not str1.isupper()) and
str1.isupper() and
str1.islower() and
str1.isupper() and
(not str1.isupper())):
print(str1,end = " ")
# 因为我们要保证 每位密码的左右两边均有且只有 三个大写字母
# 所以我们在密码前的 左右两侧的 第四位 均要保证他们不是大写字母
# 所以前后两头都加了两个 not
# .isupper() 判断大写,是大写则为 True 否则为 False
# .islower() 判断小写,是小写则为 True 否则为 False
python_aini 发表于 2021-2-9 23:47
if str1.index(each) >= 2
我还有个这个条件,避免出现-1的情况,不知道有用没
这不是很明显没用吗? 你后面都 -3 了,你这里才是 >= 2 °蓝鲤歌蓝 发表于 2021-2-10 11:27
这不是很明显没用吗? 你后面都 -3 了,你这里才是 >= 2
我觉得我的代码这么写有问题。。。。一点都不规范,我先参考下答案,,{:5_99:}, qq1151985918 发表于 2021-2-10 04:13
for i in range(len(str1)-6):
if '\n' in str1:
continue
if str1.islower() and str1.isupper() and str1.islower() and str1.isupper() and str1.islower():
print(str1, end=' ')
成功了,多谢大佬{:5_109:} qq1151985918 发表于 2021-2-10 04:13
str1 = '''拷贝的字符串 '''
for i in range(4, len(str1)-4):
if str1.islower() and str1.islower() and str1.isupper() and str1.isupper() and str1.isupper() and str1.isupper() and str1.islower() and str1.isupper() and str1.isupper():
print(str1, end=' ')
时隔多年发现了更加简单的程序,哈哈哈哈
页:
[1]