广告位联系
返回顶部
分享到

使用Python实现区分I和L介绍

python 来源:互联网 作者:佚名 发布时间:2024-11-29 21:05:26 人浏览
摘要

分不清的I和l 今天,朋友让我在游戏里面加他为好友,并且,他发送了自己的游戏ID给我。不过,由于这个游戏中不支持复制粘贴,所以说,我只能手动输入。 但是,当我看到这个ID的时候,我

分不清的I和l

今天,朋友让我在游戏里面加他为好友,并且,他发送了自己的游戏ID给我。不过,由于这个游戏中不支持复制粘贴,所以说,我只能手动输入。

但是,当我看到这个ID的时候,我顿感非常无语,这个ID大概是这样的:

全是小写的l与大写的I组成的,在一些字体中,I与l根本看不出什么差别,这我怎么知道这个名字是什么啊?

我非常困惑:“你起这种名字干嘛?故意整我吗?”

朋友表示很委屈:“不是啊,因为游戏不支持匿名,但是高分段玩家又特别少,所以起一个正常名字很容易被认出来导致被针对,所以说,我们高分段玩家就达成了共识,全都起带有1,I,l的名字,让别人没办法轻松认出来,从而防止被针对。”

他好像说的也很有道理,但是,我该怎么区分出I与l呢?难道要一个一个复制下来去搜索对比吗?

统计混淆字符

当然不可能一个一个搜啦,我们应该用python程序,一次统计出所有的混淆字符。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import re

from collections import defaultdict

  

  

confusable_chars = {

    'I': '大写字母I',

    'l': '小写字母l',

    '1': '数字1',

    '0': '数字0',

    'O': '大写字母O',

    'o': '小写字母o'

}

  

  

text = "IllllIl111llI11111"

  

  

def analyze_confusable_characters(text, confusable_chars):

    results = defaultdict(list)

     

    for i, char in enumerate(text):

        if char in confusable_chars:

            results[char].append(i)

  

    print("混淆字符统计分析:")

    for char, positions in results.items():

        print(f"字符 '{char}' ({confusable_chars[char]}) 出现次数: {len(positions)}, 位置: {positions}")

     

    return results

  

  

results = analyze_confusable_characters(text, confusable_chars)

现在,我们就可以轻松的看到,他们都是什么了

分别标记每个字符

标记了每个字符的位置,有的时候可能仍然不方便输入,因为我总不能一个一个去数他们的位置吧(尤其是出现次数多的情况下),因此,为了方便输入,我们应该从头到尾,把每一个字符依次标记清楚。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

confusable_chars = {

    'I': '大写字母I',

    'l': '小写字母l',

    '1': '数字1',

    '0': '数字0',

    'O': '大写字母O',

    'o': '小写字母o'

}

  

  

text = "IllllIl111llI11111"

  

  

def analyze_confusable_characters(text, confusable_chars):

    results = ""

    for idx, char in enumerate(text):

        if char in confusable_chars:

            results += f"第{idx + 1}个字符是:{confusable_chars[char]}\n"

        else:

            results += f"第{idx + 1}个字符是:{char}\n"

  

    return results

  

  

results = analyze_confusable_characters(text, confusable_chars)

print(results)

很好,现在我们只需要根据程序提示,依次输入内容即可:

如果你还有更多的字符容易搞混,例如分不清数字5和字母S的话,也可以通过扩充混淆字符表,从而实现更多的混淆字符的区分,比如说:

1

2

3

4

5

6

7

8

confusable_chars = {

    'S': '大写字母S',

    's': '小写字母s',

    '5': '数字5',

    'u': '小写字母u,不是变胖了的v',

    'v': '小写字母v',

    '3': '数字3'

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计