鱼C论坛

 找回密码
 立即注册
查看: 878|回复: 4

[已解决]python 20讲课后练习

[复制链接]
发表于 2020-5-20 19:37:08 | 显示全部楼层 |阅读模式

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

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

x
请用已学过的知识编写程序,找出藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:
    a) 每位密码为单个小写字母
    b) 每位密码的左右两边均有且只有三个大写字母

string='''KpjvGnFipjswgjetRtniMagakbCXAjpzWTtMlgZGCJwGyglpcLebrKWhgwJfWV
qGifWNEpCtjuejHoyVCdIxzMYGnfoslgTNAJdtVBWDVoGLzHSAVBTnhNIvAOExQNiJOIPPiHkdaRbfaP
ixDDoCDOOeAqvQJFxLWDICfGmuf'''
length=len(string)
for i in (4,length-5):
    if string[i-4].islower() and string[i+4].islower() and string[i-3:i].isupper() and string[i+1:i+4].isupper() and string[i].islower():
        print(string[i,sep='',end='')


哪有问题,程序没报错,就是运行之后完全没结果
      
最佳答案
2020-5-20 19:50:51
小甲鱼的题意是:
本身是小写字母,
从上一个小写字母到本身有且仅有3个大写字母 和 从本身字母到下一个小写字母之间也有且只有3个大写字母

如果你想用切片的方法可以参考下下面代码:
  1. str1 = """小甲鱼准备的txt文件内容"""
  2. a = []   # 用于统计小写字母的索引值
  3. b = 0    # 初始化b的数值

  4. for i in str1:  # 遍历出所有小写字母的下标,添加入 a 列表,用于为下面索引做准备条件
  5.     if i.islower():
  6.         a.append(str1.index(i,b,len(str1)))
  7.     b += 1

  8. c = 1     # 初始化代表第第二个 小写字母的下标
  9. b = 0     # 初始化b 用于当作开始或上一个小写字母的下标

  10. count_left = 0  # 用于计算小写字母左边的大写字母数量
  11. count_right = 0 # 用于计算小写字母右边边的大写字母数量

  12. while c+1 < len(a):  # 只需要c的索引大于 a 的列表长度即可退出循环

  13.     d = str1[b:a[c]]   # 记录小写字母左边的所有字母
  14.     f = str1[(a[c]+1):a[c+1]]  # 记录小写字母右边的所有字母

  15.     for i in d:   # 遍历左边的大写字母出现的次数
  16.         if i.isupper():
  17.             count_left += 1
  18.     for i in f:   # 遍历右边的大写字母出现的次数
  19.         if i.isupper():
  20.               count_right += 1

  21.     if count_left == count_right == 3: # 如果等于 3 即是符合题意 打印字母
  22.         print(str1[a[c]],end='')

  23.     count_right,count_left = 0,0  # 重新初始化记数参数,为下一次循环计数做准备

  24.     b = a[c] # b为赋值为下一个小写字母的索引值

  25.     c += 1 # c为b的下一个小写字母的索引
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 19:39:33 | 显示全部楼层
字符串有问题...没这么短吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 19:41:18 | 显示全部楼层
这里:
  1. print(string[i,sep='',end='')
复制代码


为什么没有右中括号?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 19:45:06 | 显示全部楼层
你的代码也有问题,是打印不出来的东东的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 19:50:51 | 显示全部楼层    本楼为最佳答案   
小甲鱼的题意是:
本身是小写字母,
从上一个小写字母到本身有且仅有3个大写字母 和 从本身字母到下一个小写字母之间也有且只有3个大写字母

如果你想用切片的方法可以参考下下面代码:
  1. str1 = """小甲鱼准备的txt文件内容"""
  2. a = []   # 用于统计小写字母的索引值
  3. b = 0    # 初始化b的数值

  4. for i in str1:  # 遍历出所有小写字母的下标,添加入 a 列表,用于为下面索引做准备条件
  5.     if i.islower():
  6.         a.append(str1.index(i,b,len(str1)))
  7.     b += 1

  8. c = 1     # 初始化代表第第二个 小写字母的下标
  9. b = 0     # 初始化b 用于当作开始或上一个小写字母的下标

  10. count_left = 0  # 用于计算小写字母左边的大写字母数量
  11. count_right = 0 # 用于计算小写字母右边边的大写字母数量

  12. while c+1 < len(a):  # 只需要c的索引大于 a 的列表长度即可退出循环

  13.     d = str1[b:a[c]]   # 记录小写字母左边的所有字母
  14.     f = str1[(a[c]+1):a[c+1]]  # 记录小写字母右边的所有字母

  15.     for i in d:   # 遍历左边的大写字母出现的次数
  16.         if i.isupper():
  17.             count_left += 1
  18.     for i in f:   # 遍历右边的大写字母出现的次数
  19.         if i.isupper():
  20.               count_right += 1

  21.     if count_left == count_right == 3: # 如果等于 3 即是符合题意 打印字母
  22.         print(str1[a[c]],end='')

  23.     count_right,count_left = 0,0  # 重新初始化记数参数,为下一次循环计数做准备

  24.     b = a[c] # b为赋值为下一个小写字母的索引值

  25.     c += 1 # c为b的下一个小写字母的索引
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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