【西普实验吧】字典

本文介绍了一个CTF挑战赛中的题目,详细分析了如何从给定的字典文件中找出所有包含'ctf'字符串的单词,并计算这些单词的总字符数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典分值:10
来源: Ph0enix 难度:易参与人数:1324人Get Flag:304人答题人数:371人解题通过率:82%
包含ctf的单词的总字符有多少?
格式:CTF{}
解题链接: http://ctf5.shiyanbar.com/ppc/dictionary.zip 通过

解题过程:
一开始看到题目以为是求本文中’ctf’字符串出现的次数,写了如下代码:

import re
fo = open("dictionary.txt")
fo.seek(0,0)
list1=re.findall("ctf",fo.read())
print(len(list1))

输出:

30
[Finished in 0.2s]

果然too young too simple啊。看了题解,发现是文本中存在若干单词中包含着’ctf’字符串,要我们求的是单词的总字符个数。这也不难解释刚开始print(fo.read())时,程序竟然一个单词一个单词的输出(我还以为我电脑崩了= =!请原谅我的…天真),这说明题目给的文件是一个一个单词的,而且这些单词中间是有回车或者空格啥的。所以这就好办了。
正确的源代码如下:

import re
fo = open("dictionary.txt")
fo.seek(0,0)
length=0
for str in fo:
    if 'ctf' in str:
        length=length+len(str.strip()) #strip() 方法用于移除字符串头尾指定的字符(默认为空格)。

print(length)

输出:

310
[Finished in 0.4s]

注:= =本人已经很久没写python了,有点生疏。这里提示的是…for str in fo: 这里是fo而不是 fo.read()
用type(f.read())显示的是字符串类型…可能for这种要用迭代类型,string不行…具体记不清了= =希望我有空能再好好学一下….虽然希望渺茫= =。

我看到了我原来写的笔记:这就是问题的了
.什么是可迭代对象?可迭代对象可以使用for in

内部有iter方法的对象就是可迭代对象

可迭代对象有:列表,元组,字符串,字典,生成器对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值