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

全是小寫的l與大寫的I組成的,在一些字體中,I與l根本看不出什么差別,這我怎么知道這個(gè)名字是什么?。?/p>
我非常困惑:“你起這種名字干嘛?故意整我嗎?”
朋友表示很委屈:“不是啊,因?yàn)橛螒虿恢С帜涿歉叻侄瓮婕矣痔貏e少,所以起一個(gè)正常名字很容易被認(rèn)出來導(dǎo)致被針對,所以說,我們高分段玩家就達(dá)成了共識(shí),全都起帶有1,I,l的名字,讓別人沒辦法輕松認(rèn)出來,從而防止被針對。”
他好像說的也很有道理,但是,我該怎么區(qū)分出I與l呢?難道要一個(gè)一個(gè)復(fù)制下來去搜索對比嗎?
統(tǒng)計(jì)混淆字符
當(dāng)然不可能一個(gè)一個(gè)搜啦,我們應(yīng)該用python程序,一次統(tǒng)計(jì)出所有的混淆字符。
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)計(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': '大寫字母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}個(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的話,也可以通過擴(kuò)充混淆字符表,從而實(shí)現(xiàn)更多的混淆字符的區(qū)分,比如說:
confusable_chars = {
'S': '大寫字母S',
's': '小寫字母s',
'5': '數(shù)字5',
'u': '小寫字母u,不是變胖了的v',
'v': '小寫字母v',
'3': '數(shù)字3'
}
到此這篇關(guān)于使用Python實(shí)現(xiàn)區(qū)分I和L的文章就介紹到這了,更多相關(guān)Python區(qū)分I和L內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python入門:argparse淺析 nargs=''+''作用
這篇文章主要介紹了python入門:argparse淺析 nargs='+'作用,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
python進(jìn)程管理工具supervisor的安裝與使用教程
supervisor是用python寫的一個(gè)進(jìn)程管理工具,用來啟動(dòng),重啟,關(guān)閉進(jìn)程。下面這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)的進(jìn)程管理工具supervisor的安裝與使用的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09
python utc datetime轉(zhuǎn)換為時(shí)間戳的方法
今天小編就為大家分享一篇python utc datetime轉(zhuǎn)換為時(shí)間戳的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python獲取秒級時(shí)間戳與毫秒級時(shí)間戳的示例代碼
這篇文章主要介紹了Python獲取秒級時(shí)間戳與毫秒級時(shí)間戳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作詞袋模型
本文是Python機(jī)器學(xué)習(xí)NLP自然語言處理系列文章,帶大家開啟一段學(xué)習(xí)自然語言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語言處理基本操作之詞袋模型2021-09-09

