鱼C论坛

 找回密码
 立即注册
查看: 2031|回复: 12

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

[复制链接]
发表于 2021-1-17 10:42:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 香喷喷的咸鱼 于 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[a+i].isupper:
           b+=1
    if b==3:
             return 1
    else:
             return 0

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

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



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

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




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


这是python的课后题!
最佳答案
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[r].islower():
        if M - L == r - M == 4:
            p += s[M]
        L, M = M, r

print(p)

用下标判断不香吗?
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[k - 4] . islower() and s[k - 3 : k] . isupper() and s[k] . islower() and s[k + 1 : k + 4] . isupper() and s[k + 4] . islower():
        p += s[k]
print(p)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样子的话。a不也是一个小写字母,会有干扰的吗?
你的思路给我很大的启发!
能不能帮我看一下,我这样子有什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-17 11:50:35 | 显示全部楼层
str1 = '''ABSaDKSbRIHcRHGcdDIF'''

for i in range(len(str1)-6):
    if (str1[i:i+3].isupper() and
        str1[i+3].islower() and
        str1[i+4:i+7].isupper()):
        print(str1[i+3])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-17 12:27:52 | 显示全部楼层

这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-17 12:29:40 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-1-17 12:33 编辑
香喷喷的咸鱼 发表于 2021-1-17 12:27
这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写


好像是有点问题,等我改一改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3])
    else:
        if ((not str1[i-1].isupper()) and
            str1[i:i+3].isupper() and
            str1[i+3].islower() and
            str1[i+4:i+7].isupper() and
            (not str1[i+7].isupper())):
            print(str1[i+3])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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[r].islower():
        if M - L == r - M == 4:
            p += s[M]
        L, M = M, r

print(p)

用下标判断不香吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-17 13:06:55 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2021-1-17 14:14 编辑

1. 函数写的我看得好累,还不如不要抽象出函数。
2. Big 和 Small 里是 str1,不是 str,建议这些变量或者函数命名(left或者right)写清晰点,最好一开始就养成好习惯,不然后面还是要改过来的。
2. for 循环第一次时,i = 0,  Big() 里的 str1[a+i]  a + i 全是负数,这是不合逻辑的。
3. 这个 a = 0 有什么用啊?
4. 后面的没看了,我的眼睛受不了了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 09:10:56 | 显示全部楼层
本帖最后由 香喷喷的咸鱼 于 2021-1-18 09:35 编辑
°蓝鲤歌蓝 发表于 2021-1-17 13:06
1. 函数写的我看得好累,还不如不要抽象出函数。
2. Big 和 Small 里是 str1,不是 str,建议这些变量或者 ...


  谢谢指导!
那个for循环。。我是想实现逆循环,从右往左,不可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 09:27:37 | 显示全部楼层
本帖最后由 香喷喷的咸鱼 于 2021-1-18 09:31 编辑
°蓝鲤歌蓝 发表于 2021-1-17 13:01
用下标判断不香吗?


你的程序可以

但我也有些看不懂。。 尤其是最后一个  if判断 ==4  的意义
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-18 09:32:33 | 显示全部楼层

你的程序可以的!
  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-18 13:12:53 | 显示全部楼层
香喷喷的咸鱼 发表于 2021-1-18 09:27
你的程序可以

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

密码之间有三个大写字母,所以两个密码的下标相减为4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 18:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表