使用Python實現(xiàn)區(qū)分I和L
分不清的I和l
今天,朋友讓我在游戲里面加他為好友,并且,他發(fā)送了自己的游戲ID給我。不過,由于這個游戲中不支持復(fù)制粘貼,所以說,我只能手動輸入。
但是,當我看到這個ID的時候,我頓感非常無語,這個ID大概是這樣的:

全是小寫的l與大寫的I組成的,在一些字體中,I與l根本看不出什么差別,這我怎么知道這個名字是什么???
我非常困惑:“你起這種名字干嘛?故意整我嗎?”
朋友表示很委屈:“不是啊,因為游戲不支持匿名,但是高分段玩家又特別少,所以起一個正常名字很容易被認出來導(dǎo)致被針對,所以說,我們高分段玩家就達成了共識,全都起帶有1,I,l的名字,讓別人沒辦法輕松認出來,從而防止被針對。”
他好像說的也很有道理,但是,我該怎么區(qū)分出I與l呢?難道要一個一個復(fù)制下來去搜索對比嗎?
統(tǒng)計混淆字符
當然不可能一個一個搜啦,我們應(yīng)該用python程序,一次統(tǒng)計出所有的混淆字符。
import re
from collections import defaultdict
confusable_chars = {
'I': '大寫字母I',
'l': '小寫字母l',
'1': '數(shù)字1',
'0': '數(shù)字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("混淆字符統(tǒng)計分析:")
for char, positions in results.items():
print(f"字符 '{char}' ({confusable_chars[char]}) 出現(xiàn)次數(shù): {len(positions)}, 位置: {positions}")
return results
results = analyze_confusable_characters(text, confusable_chars)
現(xiàn)在,我們就可以輕松的看到,他們都是什么了

分別標記每個字符
標記了每個字符的位置,有的時候可能仍然不方便輸入,因為我總不能一個一個去數(shù)他們的位置吧(尤其是出現(xiàn)次數(shù)多的情況下),因此,為了方便輸入,我們應(yīng)該從頭到尾,把每一個字符依次標記清楚。
confusable_chars = {
'I': '大寫字母I',
'l': '小寫字母l',
'1': '數(shù)字1',
'0': '數(shù)字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)
很好,現(xiàn)在我們只需要根據(jù)程序提示,依次輸入內(nèi)容即可:

如果你還有更多的字符容易搞混,例如分不清數(shù)字5和字母S的話,也可以通過擴充混淆字符表,從而實現(xiàn)更多的混淆字符的區(qū)分,比如說:
confusable_chars = {
'S': '大寫字母S',
's': '小寫字母s',
'5': '數(shù)字5',
'u': '小寫字母u,不是變胖了的v',
'v': '小寫字母v',
'3': '數(shù)字3'
}
到此這篇關(guān)于使用Python實現(xiàn)區(qū)分I和L的文章就介紹到這了,更多相關(guān)Python區(qū)分I和L內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn)
本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
基于django和dropzone.js實現(xiàn)上傳文件
這篇文章主要介紹了基于django和dropzone.js實現(xiàn)上傳文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11
pytorch Dataset,DataLoader產(chǎn)生自定義的訓練數(shù)據(jù)案例
這篇文章主要介紹了pytorch Dataset, DataLoader產(chǎn)生自定義的訓練數(shù)據(jù)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
如何在Django中設(shè)置定時任務(wù)的方法示例
這篇文章主要介紹了如何在Django中設(shè)置定時任務(wù)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
Django+Celery實現(xiàn)動態(tài)配置定時任務(wù)的方法示例
這篇文章主要介紹了Django + Celery 實現(xiàn)動態(tài)配置定時任務(wù)的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05

