鱼C论坛

 找回密码
 立即注册
查看: 885|回复: 16

[技术交流] 灌水,哪位兄台能看下这代码的怎么编写的?

[复制链接]
最佳答案
0 
发表于 2019-7-27 11:15:35 | 显示全部楼层 |阅读模式
1鱼币
超高难度的编程,源自某道Python课后习题,帮忙看下咯!!!

#  找出小甲鱼藏在下边这个长字符串中的密码,密码的埋藏点符合以下规律:

#  a) 每位密码为单个小写字母

#  b) 每位密码的左右两边均有且只有三个大写字母



str1 = '''ABSaDKSbRIHcRHGcdDIF'''

countA = 0  # 统计前边的大写字母
countB = 0  # 统计小写字母
countC = 0  # 统计后边的大写字母
length = len(str1)

for i in range(length):
    if str1[i] == '\n':
        continue

    """
    |如果str1[i]是大写字母:
    |-- 如果已经出现小写字母:
    |-- -- 统计后边的大写字母
    |-- 如果未出现小写字母:
    |-- -- 清空后边大写字母的统计
    |-- -- 统计前边的大写字母
    """
    if str1[i].isupper():
        if countB:
            countC += 1
        else:
            countC = 0
            countA += 1

    """
    |如果str1[i]是小写字母:
    |-- 如果小写字母前边不是三个大写字母(不符合条件):
    |-- -- 清空所有记录,重新统计
    |-- 如果小写字母前边是三个大写字母(符合条件):
    |-- -- 如果已经存在小写字母:
    |-- -- -- 清空所有记录,重新统计(出现两个小写字母)
    |-- -- 如果该小写字母是唯一的:
    |-- -- -- countB记录出现小写字母,准备开始统计countC
    """
    if str1[i].islower():
        if countA != 3:
            countA = 0
            countB = 0
            countC = 0
        else:
            if countB:
                countA = 0
                countB = 0
                countC = 0
            else:
                countB = 1
                countC = 0
                target = i

    """
    |如果前边和后边都是三个大写字母:
    |-- 如果后边第四个字母也是大写字母(不符合条件):
    |-- -- 清空记录B和C,重新统计
    |-- 如果后边仅有三个大写字母(符合所有条件):
    |-- -- 打印结果,并清空所有记录,进入下一轮统计
    """
    if countA == 3 and countC == 3:
        if i+1 != length and str1[i+1].isupper():
            countB = 0
            countC = 0
        else:
            print(str1[target], end='')
            countA = 3
            countB = 0
            countC = 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
23 
发表于 2019-7-29 18:44:11 | 显示全部楼层
那啥……b)条件我不是很明白,可以解释一下么……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-7-31 14:40:33 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-7-29 18:44
那啥……b)条件我不是很明白,可以解释一下么……

我也不会耶!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
38 
发表于 2019-7-31 14:57:08 From FishC Mobile | 显示全部楼层
用正则吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
38 
发表于 2019-7-31 14:58:57 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
23 
发表于 2019-7-31 15:08:24 | 显示全部楼层

这题目咱也看不明白……怎么做啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-7-31 15:20:42 | 显示全部楼层

不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
9 
发表于 2019-7-31 19:51:24 | 显示全部楼层
正则表达式简单的一批
  1. import re

  2. with open('string2.txt') as f:
  3.         content = f.read()

  4. match = re.search(r'[A-Z]{3}[a-z][A-Z]{3}', content)
  5. print(match.group(0))
复制代码


这种问题你硬做也很简单的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2019-7-31 20:23:48 | 显示全部楼层
正则表达式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-7-31 21:06:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
2 
发表于 2019-7-31 21:15:54 | 显示全部楼层
057讲,论一只爬虫的自我修养5,正则表达式 ~ 060讲,论一只爬虫的自我修养8,正则表达式 4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
88 
发表于 2019-8-1 09:51:32 | 显示全部楼层
本帖最后由 XiaoPaiShen 于 2019-8-1 10:13 编辑
  1. source = 'ABSaDKSbRIHcRHGcdDIF'
  2. target = ''
  3. pre_flag = ''
  4. pre_check = False
  5. suf_flag = ''
  6. suf_check = False

  7. length = len(source)
  8. for index in range(3, length-3):
  9.     if not source[index].islower():
  10.         continue

  11.     prefix = source[index-3 : index]
  12.     suffix = source[index+1 : index+4]

  13.     if index > 3:
  14.         pre_flag = source[index-4]
  15.    
  16.     if index+4 < length:
  17.         suf_flag = source[index+4]

  18.     if not pre_flag.isupper() or pre_flag == '':
  19.         pre_check = True
  20.     if not suf_flag.isupper() or suf_flag == '':
  21.         suf_check = True   

  22.     if prefix.isupper() and suffix.isupper() and pre_check and suf_check:
  23.         target += source[index]

  24. print(target)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2019-8-1 20:12:17 | 显示全部楼层
回忆浅离 发表于 2019-7-31 21:15
057讲,论一只爬虫的自我修养5,正则表达式 ~ 060讲,论一只爬虫的自我修养8,正则表达式 4

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2019-8-1 20:30:55 | 显示全部楼层
DT_Nelson 发表于 2019-7-31 19:51
正则表达式简单的一批

真是牛人啊,我得赶紧往下学了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1 
发表于 2019-8-12 13:07:37 | 显示全部楼层
  1. str1 = "字符串内容"
  2. import re
  3. result = re.findall("[^A-Z][A-Z]{3}[a-z][A-Z]{3}[^A-Z]", str1)
  4. for each in result:
  5.     print(each[4], end="")

  6. 输出:ilovefishc

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
发表于 2019-8-14 10:06:56 | 显示全部楼层
回忆浅离 发表于 2019-7-31 21:15
057讲,论一只爬虫的自我修养5,正则表达式 ~ 060讲,论一只爬虫的自我修养8,正则表达式 4

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
16 
发表于 2019-8-16 17:17:39 | 显示全部楼层

新版教材里(第二版)小甲鱼单独把正则表达式分出了一个章节专门来讲。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-12-15 01:52

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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