使用Python實(shí)現(xiàn)區(qū)分I和L
分不清的I和l
今天,朋友讓我在游戲里面加他為好友,并且,他發(fā)送了自己的游戲ID給我。不過,由于這個(gè)游戲中不支持復(fù)制粘貼,所以說,我只能手動(dòng)輸入。
但是,當(dāng)我看到這個(gè)ID的時(shí)候,我頓感非常無語(yǔ),這個(gè)ID大概是這樣的:
全是小寫的l與大寫的I組成的,在一些字體中,I與l根本看不出什么差別,這我怎么知道這個(gè)名字是什么?。?/p>
我非常困惑:“你起這種名字干嘛?故意整我嗎?”
朋友表示很委屈:“不是啊,因?yàn)橛螒虿恢С帜涿?,但是高分段玩家又特別少,所以起一個(gè)正常名字很容易被認(rèn)出來導(dǎo)致被針對(duì),所以說,我們高分段玩家就達(dá)成了共識(shí),全都起帶有1,I,l的名字,讓別人沒辦法輕松認(rèn)出來,從而防止被針對(duì)。”
他好像說的也很有道理,但是,我該怎么區(qū)分出I與l呢?難道要一個(gè)一個(gè)復(fù)制下來去搜索對(duì)比嗎?
統(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中使用numpy包的向量矩陣相乘np.dot和np.matmul實(shí)現(xiàn)
本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02基于django和dropzone.js實(shí)現(xiàn)上傳文件
這篇文章主要介紹了基于django和dropzone.js實(shí)現(xiàn)上傳文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11pytorch Dataset,DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例
這篇文章主要介紹了pytorch Dataset, DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03如何在Django中設(shè)置定時(shí)任務(wù)的方法示例
這篇文章主要介紹了如何在Django中設(shè)置定時(shí)任務(wù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01Django+Celery實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法示例
這篇文章主要介紹了Django + Celery 實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05