Python真題案例之錯(cuò)位鍵盤(pán)?單詞長(zhǎng)度?字母重排詳解
前言
前面一篇分享了關(guān)于數(shù)值的一些處理方式,本篇呢進(jìn)行一下字符串處理的分享 題目也是超級(jí)簡(jiǎn)單,記錄一下對(duì)字符串處理的方式
錯(cuò)位鍵盤(pán)??(也就是錯(cuò)位字符串,使用錯(cuò)位的字符去匹配原字符)
單詞的長(zhǎng)度??(字符串的分割)
字母重排??(子串與主串的匹配,感覺(jué)這個(gè)匹配方式不錯(cuò))
Tex括號(hào)問(wèn)題(超級(jí)簡(jiǎn)單,下面見(jiàn)) 下面就步入正題開(kāi)始我們今天的內(nèi)容啦????

一、錯(cuò)位鍵盤(pán)??
??問(wèn)題描述
在我們打字的時(shí)候,往往會(huì)因?yàn)槭终`將A敲成S,將S敲成D
現(xiàn)在有一位程序員由于手誤輸入了一行字符串 請(qǐng)憑借你聰明的大腦將其還原 (鍵盤(pán)上的字符順序:"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./")
樣例輸入:
O S, GOMR YPFSU/
樣例輸出:
I AM FINE TODAY
??問(wèn)題分析
這類的問(wèn)題有事后想到的就是進(jìn)行字符的替換,但是一個(gè)鍵盤(pán)上字符那么多逐個(gè)替換的話非常的費(fèi)時(shí)費(fèi)力于是我們可以進(jìn)行一個(gè)下標(biāo)數(shù)組的編排,用于記錄字符在字符串中的位置,而為了不必要的轉(zhuǎn)換我們不妨將下標(biāo)數(shù)組開(kāi)辟到255個(gè)這樣每一種字符的ASCII值就可以直接作為下標(biāo)數(shù)組的下標(biāo)拿到他在原來(lái)字符串的索引。
然后根據(jù)輸入可以知道,輸入的有空格,給定的鍵盤(pán)內(nèi)沒(méi)有空格,所以需要進(jìn)行分詞處理。在Python中分詞有極為簡(jiǎn)便的方法,在C語(yǔ)言中可以開(kāi)辟一個(gè)字符型指針數(shù)組,用于存儲(chǔ)每一段單詞,處理方式與單詞的平均長(zhǎng)度無(wú)異。可以先往下看看。分完詞之后可以迭字符型指針數(shù)組。然后按序列輸出。輸出的時(shí)候先拿字符做下標(biāo)取原字符串中的索引,然后再拿索引-1去原字符中取字符。注意輸出時(shí)候的格式。
??代碼實(shí)現(xiàn)
老規(guī)矩先上運(yùn)行結(jié)果:

代碼如下:
import sys
s=sys.stdin.readline().strip().split()
indexarr=[0]*255
# 將所有數(shù)據(jù)存放進(jìn)一個(gè)數(shù)組,將鍵盤(pán)上相鄰的兩個(gè)字母在數(shù)組中以索引的形式相連
mystr="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"
# 將每一位字母的索引存儲(chǔ)起來(lái)。供以后遍歷輸入的數(shù)據(jù)使用
for i in range(len(mystr)):
indexarr[ord(mystr[i])]=i
flag=True
#遍歷輸入的n段字符串
for line in s:
if flag:
flag=False
for i in line:
print(mystr[indexarr[ord(i)]-1],end="")
else:
print(" ",end="")
for i in line:
print(mystr[indexarr[ord(i)]-1],end="")二、單詞的平均長(zhǎng)度??
這一題使用Python做超級(jí)簡(jiǎn)單
使用c語(yǔ)言做的話先進(jìn)行空格統(tǒng)計(jì),如果空格后面不為空格就進(jìn)行單詞數(shù)加1
如果空格后面依舊是空格向下遍歷,如果一個(gè)位置不為空格就進(jìn)行字母數(shù)加1
最終要將單詞數(shù)額外加1,因?yàn)槭孜矄卧~循環(huán)的時(shí)候只統(tǒng)計(jì)進(jìn)去了一個(gè)。
??問(wèn)題描述
輸入若干個(gè)單詞,單詞只包含字母,每個(gè)單詞由一個(gè)或多個(gè)空格組成
輸出單詞的平均長(zhǎng)度
樣例輸入:
qwe qwe qwe
樣例輸出:
3.0
??問(wèn)題分析
對(duì)字符串進(jìn)行分詞,然后求每一個(gè)字串的長(zhǎng)度,再將長(zhǎng)度和除以單詞的個(gè)數(shù)
??代碼實(shí)現(xiàn)
老規(guī)矩先上運(yùn)行結(jié)果:

代碼如下:
import sys
num=0
n=0
# 這里使用strip()去除輸入的末尾換行符
# 使用split()進(jìn)行字符串分段最后得到的是一個(gè)列表形式
mystr=sys.stdin.readline().strip().split()
for i in mystr:
num+=len(i)
n+=1
print(num/n)三、字母重排??
??問(wèn)題描述
輸入一個(gè)字典(*****結(jié)尾),然后再輸入若干單詞。每輸入一個(gè)單詞w,你都需要 在字典中找出所有可以用w的字母重排后得到的單詞,并按照字典序從小到大的順序在一 行中輸出(如果不存在,輸出:0。輸入單詞之間用空格或空行隔開(kāi),且所有輸入單詞都由 不超過(guò)6個(gè)小寫(xiě)字母組成。注意,字典中的單詞不一定按字典序排列。
樣例輸入:
第一行 tarp given score refund only trap work earn course pepper part
第二行 resco nfudre aptr sett oresuc
樣例輸出:
course part refund score tarp trap
??問(wèn)題分析
給出一個(gè)字典,所以我們?cè)谶M(jìn)行查找的時(shí)候可以先將字典進(jìn)行處理,然后依照字典的標(biāo)準(zhǔn)進(jìn)行查詞
這里我們可以先對(duì)字典進(jìn)行排序得到首字母有序的字典,然后對(duì)字典中每一個(gè)元素進(jìn)行排序。 對(duì)要查詢的子串進(jìn)行排序,然后遍歷有序字典進(jìn)行查找,找到直接輸出(也就是說(shuō)將標(biāo)準(zhǔn)的字典按 一定的方式處理,然后將所要查的詞經(jīng)過(guò)相同的轉(zhuǎn)換后與字典進(jìn)行比對(duì))
??代碼實(shí)現(xiàn)
老規(guī)矩先上運(yùn)行結(jié)果:

代碼如下:
import sys
# 元字典序字符串
mydic=list(sys.stdin.readline().strip().split())
mydic=sorted(mydic)
words=sys.stdin.readline().strip().split()
# 排序后的字符串
newdic=[]
newwords=[]
for i in mydic:
# 字符串不可以直接排序,先轉(zhuǎn)換成字典,然后進(jìn)行排序
newdic.append("".join(sorted(i)))
for i in words:
newwords.append("".join(sorted(i)))
flag=False
i=0
while i<len(newdic):
if newdic[i] in newwords:
if not flag:
print(mydic[i],end="")
flag=True
else:
print(" ",mydic[i],end="")
i+=1
if not flag:
print(0)四、Tex括號(hào)問(wèn)題??
??問(wèn)題描述
有一篇文章,在撰稿的時(shí)候,沒(méi)有按照指定格式編排,現(xiàn)在需要將包含’’ 的標(biāo)點(diǎn)符號(hào)轉(zhuǎn)換成為 只有中文雙引號(hào)的文章“”
樣例輸入:
"anksdn,'dasd,“hhihi”
樣例輸出:
“anksdn,”dasd,“hhihi”
??問(wèn)題分析
這里與前面提到的燈光模擬非常的類似,只需要記性標(biāo)記位的整頓就好
可以設(shè)計(jì)一個(gè)標(biāo)記flag,當(dāng)flag為T(mén)rue時(shí)遇見(jiàn)"進(jìn)行左引號(hào)“的輸出然后
立即將標(biāo)記變?yōu)榕c其相反的值當(dāng)flag為false時(shí)遇見(jiàn)"立即進(jìn)行右引號(hào)輸出。
然后將flag標(biāo)記為T(mén)rue
??代碼實(shí)現(xiàn)
老規(guī)矩先上運(yùn)行結(jié)果:

代碼如下:
import sys
s=sys.stdin.readline().strip()
flag=True
for i in s:
if i=="'" or i=="\"":
if flag:
print("“",end="")
else:
print("”",end="")
flag=not flag
continue
print(i,end="")??•??•??
???? ? ???? ??????
到此這篇關(guān)于Python真題案例之錯(cuò)位鍵盤(pán) 單詞長(zhǎng)度 字母重排詳解的文章就介紹到這了,更多相關(guān)Python 錯(cuò)位鍵盤(pán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中常用的數(shù)據(jù)結(jié)構(gòu)介紹
這篇文章主要介紹了python中常用的數(shù)據(jù)結(jié)構(gòu)介紹,幫助大家更好的理解和學(xué)習(xí)python的基礎(chǔ)知識(shí),感興趣的朋友可以了解下2021-01-01
Python將Excel轉(zhuǎn)換為多種圖片格式的方法(PNG, JPG, BMP, SVG)
有時(shí),你可能希望以圖片形式分享Excel數(shù)據(jù),以防止他人對(duì)數(shù)據(jù)進(jìn)行修改或編輯,將Excel轉(zhuǎn)換為圖片可以將數(shù)據(jù)鎖定為靜態(tài)圖片,確保數(shù)據(jù)的完整性和準(zhǔn)確性,這篇文章將探討如何使用Python實(shí)現(xiàn)將Excel工作表轉(zhuǎn)換為多種圖片格式,如PNG,JPG,BMP和SVG,需要的朋友可以參考下2025-03-03
Python使用reportlab將目錄下所有的文本文件打印成pdf的方法
這篇文章主要介紹了Python使用reportlab將目錄下所有的文本文件打印成pdf的方法,涉及reportlab模塊操作pdf文件的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Python實(shí)現(xiàn)的簡(jiǎn)單萬(wàn)年歷例子分享
這篇文章主要介紹了Python實(shí)現(xiàn)的簡(jiǎn)單萬(wàn)年歷例子分享,需要的朋友可以參考下2014-04-04
Python中使用裝飾器來(lái)優(yōu)化尾遞歸的示例
這里我們用典型的斐波那契數(shù)列作為例子,來(lái)展示Python中使用裝飾器來(lái)優(yōu)化尾遞歸的示例,需要的朋友可以參考下2016-06-06
更換Django默認(rèn)的模板引擎為jinja2的實(shí)現(xiàn)方法
今天小編就為大家分享一篇更換Django默認(rèn)的模板引擎為jinja2的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解
本文主要介紹了Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn),Django是重多Python人氣框架中最為知名的一個(gè),需要的朋友可以參考下2015-07-07
Python實(shí)現(xiàn)可獲取網(wǎng)易頁(yè)面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲(chóng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)可獲取網(wǎng)易頁(yè)面所有文本信息的網(wǎng)易網(wǎng)絡(luò)爬蟲(chóng)功能,涉及Python針對(duì)網(wǎng)頁(yè)的獲取、字符串正則判定等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01

