鱼C论坛

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

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

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

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

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

x
本帖最后由 香喷喷的咸鱼 于 2021-1-17 11:32 编辑
  1. str1 = ''''ABSaDKSbRIHcRHGcdDIF'''
  2. left=0
  3. right=0
  4. small=0
  5. # 此处不可for each in str1           此时each代表的是某一元素的名称 而非索引,不方便下文找大写字母
  6. length=len(str1)
  7. list1=[]
  8. str2=''

  9. #判断前只有3个是大写字母:是的话返回1
  10. def Big():
  11.     for a in range(-1,-4,-1):
  12.      if str[a+i].isupper:
  13.            b+=1
  14.     if b==3:
  15.              return 1
  16.     else:
  17.              return 0

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

  20. def Small():
  21.     for a in range(4):
  22.      if str[a+i].isupper:
  23.          b+=1
  24.     if b==3:
  25.              return 1
  26.     else:
  27.             return 0
  28.    



  29. for i in range(length):
  30.     #判断是否回车!!经常忘记
  31.     if str1[i]=='\n':
  32.         continue   #continue 用于此处恰到好处!
  33.    
  34.    
  35.    
  36.     a=0
  37.     b=0
  38.    
  39.    
  40.     if (str1[i].isupper)and Big() and Small():#先判断小写字母,再判前后只有三个大写
  41.         list1.append(str1[i])
  42.                
  43.    
  44.      

  45. str2=''.join(list1)
  46. print(str2)
复制代码





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


这是python的课后题!
最佳答案
2021-1-17 13:01:05
本帖最后由 °蓝鲤歌蓝 于 2021-1-17 14:11 编辑
  1. str1 = "ABSabDKSbRIHcRHGdDIFeokj"

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

  5. for r in range(len(s)):
  6.     if s[r].islower():
  7.         if M - L == r - M == 4:
  8.             p += s[M]
  9.         L, M = M, r

  10. print(p)
复制代码


用下标判断不香吗?
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-17 11:08:52 | 显示全部楼层
       其实,这题的最大障碍,就是 str1 中含有无效字符 '\n' 了,去掉后,程序可以写的非常简单
  1. s , p = 'a' + '' . join(str1 . split('\n')) + 'a' , ''  # 去掉 str1 中的换行符,并在首尾各添加一个小写字母 'a'
  2. for k in range(4 , len(s) - 4):
  3.     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():
  4.         p += s[k]
  5. print(p)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样子的话。a不也是一个小写字母,会有干扰的吗?
你的思路给我很大的启发!
能不能帮我看一下,我这样子有什么问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. for i in range(len(str1)-6):
  3.     if (str1[i:i+3].isupper() and
  4.         str1[i+3].islower() and
  5.         str1[i+4:i+7].isupper()):
  6.         print(str1[i+3])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


好像是有点问题,等我改一改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-17 12:43:16 | 显示全部楼层
香喷喷的咸鱼 发表于 2021-1-17 12:27
这样不可以保证第四位数是小写哦。。题目要求只有!!!!只有!!!!只有!!!!前后三位是大写
  1. str1 = '''ABSaDKSbRIHcRHGcdDIF'''

  2. for i in range(len(str1)-6):
  3.     if i == 0:
  4.         if (str1[i:i+3].isupper() and
  5.             str1[i+3].islower() and
  6.             str1[i+4:i+7].isupper() and
  7.             (not str1[i+7].isupper())):
  8.             print(str1[i+3])
  9.     else:
  10.         if ((not str1[i-1].isupper()) and
  11.             str1[i:i+3].isupper() and
  12.             str1[i+3].islower() and
  13.             str1[i+4:i+7].isupper() and
  14.             (not str1[i+7].isupper())):
  15.             print(str1[i+3])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-17 13:01:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 °蓝鲤歌蓝 于 2021-1-17 14:11 编辑
  1. str1 = "ABSabDKSbRIHcRHGdDIFeokj"

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

  5. for r in range(len(s)):
  6.     if s[r].islower():
  7.         if M - L == r - M == 4:
  8.             p += s[M]
  9.         L, M = M, r

  10. print(p)
复制代码


用下标判断不香吗?
小甲鱼最新课程 -> https://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. 后面的没看了,我的眼睛受不了了。
小甲鱼最新课程 -> https://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循环。。我是想实现逆循环,从右往左,不可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


你的程序可以

但我也有些看不懂。。 尤其是最后一个  if判断 ==4  的意义
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的程序可以的!
  谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

密码之间有三个大写字母,所以两个密码的下标相减为4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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