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

全是小寫(xiě)的l與大寫(xiě)的I組成的,在一些字體中,I與l根本看不出什么差別,這我怎么知道這個(gè)名字是什么???
我非常困惑:“你起這種名字干嘛?故意整我嗎?”
朋友表示很委屈:“不是啊,因?yàn)橛螒虿恢С帜涿?,但是高分段玩家又特別少,所以起一個(gè)正常名字很容易被認(rèn)出來(lái)導(dǎo)致被針對(duì),所以說(shuō),我們高分段玩家就達(dá)成了共識(shí),全都起帶有1,I,l的名字,讓別人沒(méi)辦法輕松認(rèn)出來(lái),從而防止被針對(duì)。”
他好像說(shuō)的也很有道理,但是,我該怎么區(qū)分出I與l呢?難道要一個(gè)一個(gè)復(fù)制下來(lái)去搜索對(duì)比嗎?
統(tǒng)計(jì)混淆字符
當(dāng)然不可能一個(gè)一個(gè)搜啦,我們應(yīng)該用python程序,一次統(tǒng)計(jì)出所有的混淆字符。
import re
from collections import defaultdict
confusable_chars = {
'I': '大寫(xiě)字母I',
'l': '小寫(xiě)字母l',
'1': '數(shù)字1',
'0': '數(shù)字0',
'O': '大寫(xiě)字母O',
'o': '小寫(xiě)字母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)計(jì)分析:")
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)在,我們就可以輕松的看到,他們都是什么了

分別標(biāo)記每個(gè)字符
標(biāo)記了每個(gè)字符的位置,有的時(shí)候可能仍然不方便輸入,因?yàn)槲铱偛荒芤粋€(gè)一個(gè)去數(shù)他們的位置吧(尤其是出現(xiàn)次數(shù)多的情況下),因此,為了方便輸入,我們應(yīng)該從頭到尾,把每一個(gè)字符依次標(biāo)記清楚。
confusable_chars = {
'I': '大寫(xiě)字母I',
'l': '小寫(xiě)字母l',
'1': '數(shù)字1',
'0': '數(shù)字0',
'O': '大寫(xiě)字母O',
'o': '小寫(xiě)字母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}個(gè)字符是:{confusable_chars[char]}\n"
else:
results += f"第{idx + 1}個(gè)字符是:{char}\n"
return results
results = analyze_confusable_characters(text, confusable_chars)
print(results)
很好,現(xiàn)在我們只需要根據(jù)程序提示,依次輸入內(nèi)容即可:

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

