香喷喷的咸鱼 发表于 2021-1-17 10:42:00

python:找出藏在下边这个长字符串中的密码。有问题,求大佬帮忙

本帖最后由 香喷喷的咸鱼 于 2021-1-17 11:32 编辑

str1 = ''''ABSaDKSbRIHcRHGcdDIF'''
left=0
right=0
small=0
# 此处不可for each in str1         此时each代表的是某一元素的名称 而非索引,不方便下文找大写字母
length=len(str1)
list1=[]
str2=''

#判断前只有3个是大写字母:是的话返回1
def Big():
    for a in range(-1,-4,-1):
   if str.isupper:
         b+=1
    if b==3:
             return 1
    else:
             return 0

            
#判断后只有3个是小大写字母:是的话返回1

def Small():
    for a in range(4):
   if str.isupper:
         b+=1
    if b==3:
             return 1
    else:
            return 0
   



for i in range(length):
    #判断是否回车!!经常忘记
    if str1=='\n':
      continue   #continue 用于此处恰到好处!
   
   
   
    a=0
    b=0
   
   
    if (str1.isupper)and Big() and Small():#先判断小写字母,再判前后只有三个大写
      list1.append(str1)
               
   
   

str2=''.join(list1)
print(str2)





这是我写的程序,奈何知识有限,无法找到其中的错误,我想大概的思路应该是正确的。
还希望,温柔善良的鱼油帮帮我这个鱼渣找找错!!
感激不尽!


这是python的课后题!{:5_99:} {:9_220:}

jackz007 发表于 2021-1-17 11:08:52

       其实,这题的最大障碍,就是 str1 中含有无效字符 '\n' 了,去掉后,程序可以写的非常简单
s , p = 'a' + '' . join(str1 . split('\n')) + 'a' , ''# 去掉 str1 中的换行符,并在首尾各添加一个小写字母 'a'
for k in range(4 , len(s) - 4):
    if s . islower() and s . isupper() and s . islower() and s . isupper() and s . islower():
      p += s
print(p)

香喷喷的咸鱼 发表于 2021-1-17 11:35:12

jackz007 发表于 2021-1-17 11:08
其实,这题的最大障碍,就是 str1 中含有无效字符 '\n' 了,去掉后,程序可以写的非常简单

这样子的话。a不也是一个小写字母,会有干扰的吗?{:10_266:}
你的思路给我很大的启发!
能不能帮我看一下,我这样子有什么问题{:10_254:}

qq1151985918 发表于 2021-1-17 11:50:35

str1 = '''ABSaDKSbRIHcRHGcdDIF'''

for i in range(len(str1)-6):
    if (str1.isupper() and
      str1.islower() and
      str1.isupper()):
      print(str1)

香喷喷的咸鱼 发表于 2021-1-17 12:27:52

qq1151985918 发表于 2021-1-17 11:50


这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写

qq1151985918 发表于 2021-1-17 12:29:40

本帖最后由 qq1151985918 于 2021-1-17 12:33 编辑

香喷喷的咸鱼 发表于 2021-1-17 12:27
这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写

好像是有点问题,等我改一改

qq1151985918 发表于 2021-1-17 12:43:16

香喷喷的咸鱼 发表于 2021-1-17 12:27
这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写

str1 = '''ABSaDKSbRIHcRHGcdDIF'''

for i in range(len(str1)-6):
    if i == 0:
      if (str1.isupper() and
            str1.islower() and
            str1.isupper() and
            (not str1.isupper())):
            print(str1)
    else:
      if ((not str1.isupper()) and
            str1.isupper() and
            str1.islower() and
            str1.isupper() and
            (not str1.isupper())):
            print(str1)

°蓝鲤歌蓝 发表于 2021-1-17 13:01:05

本帖最后由 °蓝鲤歌蓝 于 2021-1-17 14:11 编辑

str1 = "ABSabDKSbRIHcRHGdDIFeokj"

s = "a" + str1.replace("\n", "") + "a"
M = L = 0
p = ""

for r in range(len(s)):
    if s.islower():
      if M - L == r - M == 4:
            p += s
      L, M = M, r

print(p)

用下标判断不香吗?

°蓝鲤歌蓝 发表于 2021-1-17 13:06:55

本帖最后由 °蓝鲤歌蓝 于 2021-1-17 14:14 编辑

1. 函数写的我看得好累,还不如不要抽象出函数。
2. Big 和 Small 里是 str1,不是 str,建议这些变量或者函数命名(left或者right)写清晰点,最好一开始就养成好习惯,不然后面还是要改过来的。
2. for 循环第一次时,i = 0,Big() 里的 str1a + i 全是负数,这是不合逻辑的。
3. 这个 a = 0 有什么用啊?
4. 后面的没看了,我的眼睛受不了了。

香喷喷的咸鱼 发表于 2021-1-18 09:10:56

本帖最后由 香喷喷的咸鱼 于 2021-1-18 09:35 编辑

°蓝鲤歌蓝 发表于 2021-1-17 13:06
1. 函数写的我看得好累,还不如不要抽象出函数。
2. Big 和 Small 里是 str1,不是 str,建议这些变量或者 ...

{:5_107:}谢谢指导!
那个for循环。。我是想实现逆循环,从右往左,不可以吗

香喷喷的咸鱼 发表于 2021-1-18 09:27:37

本帖最后由 香喷喷的咸鱼 于 2021-1-18 09:31 编辑

°蓝鲤歌蓝 发表于 2021-1-17 13:01
用下标判断不香吗?

你的程序可以{:5_106:}

但我也有些看不懂。。{:5_96:} 尤其是最后一个if判断 ==4的意义

香喷喷的咸鱼 发表于 2021-1-18 09:32:33

qq1151985918 发表于 2021-1-17 12:43


你的程序可以的!
谢谢

°蓝鲤歌蓝 发表于 2021-1-18 13:12:53

香喷喷的咸鱼 发表于 2021-1-18 09:27
你的程序可以

但我也有些看不懂。。 尤其是最后一个if判断 ==4的意义

密码之间有三个大写字母,所以两个密码的下标相减为4
页: [1]
查看完整版本: python:找出藏在下边这个长字符串中的密码。有问题,求大佬帮忙