初學(xué)者的話確實(shí)可以通過(guò) ascii table?來(lái)判斷字母和數(shù)字的區(qū)別。Python?里面有兩個(gè)內(nèi)置函數(shù) ord?和 chr?可用。
創(chuàng)新互聯(lián)專注于巍山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供巍山營(yíng)銷型網(wǎng)站建設(shè),巍山網(wǎng)站制作、巍山網(wǎng)頁(yè)設(shè)計(jì)、巍山網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造巍山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供巍山網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
ascii table
通過(guò)判斷其字的范圍來(lái)確定是字母還是別的。確實(shí)可以達(dá)到你現(xiàn)在想要的目的。
不過(guò)我個(gè)人建議是,暫時(shí)不用太在意這種問(wèn)題。這個(gè)也不是解決這些問(wèn)題的理想方法。
當(dāng)你以后學(xué)會(huì)使用正則表達(dá)式之后,回頭看這個(gè)問(wèn)題就十分簡(jiǎn)單了!
正則表達(dá)式才是解決字符串這類問(wèn)題更理想的方法。這種方式的優(yōu)勢(shì)和能力之強(qiáng)等你學(xué)習(xí)到后就知道了。
代碼:
string = "T-shirt"
letters = []
for i in range(65, 91):
letters.append(chr(i))#A-Z
for i in range(97, 123):
letters.append(chr(i))#a-z
num = 0
for i in string:
if i in letters:#如果是字母
? num += 1
print(num)#輸出num
運(yùn)行效果:
6
備注:加粗部分的單詞可以自己改。
解析:
通過(guò)ASCII碼和chr函數(shù)查找到所有大小寫(xiě)字母,再逐一遍歷單詞,如果是字母就+1個(gè),這樣就可以得到統(tǒng)計(jì)數(shù)據(jù)了。
代碼如下:
text = "Hello Python,Hello 2021."
letter = 0
digital = 0
other = 0
for i in text:
if i.isalpha():
letter += 1
elif i.isdigit():
digital += 1
else:
other += 1
print('字母:{} 數(shù)字:{} 其他:{}'.format(letter,digital,other))
輸出:
字母:16 數(shù)字:4 其他:4
下面是Python內(nèi)置關(guān)于判斷字符串類型的方法介紹:
str.isalnum()
如果字符串中的所有字符都是字母或數(shù)字且至少有一個(gè)字符,則返回?True?, 否則返回?False?。 如果?c.isalpha()?,?c.isdecimal()?,?c.isdigit()?,或?c.isnumeric()?之中有一個(gè)返回?True?,則字符``c``是字母或數(shù)字。
str.isalpha()
如果字符串中的所有字符都是字母,并且至少有一個(gè)字符,返回?True?,否則返回?False?。字母字符是指那些在 Unicode 字符數(shù)據(jù)庫(kù)中定義為 "Letter" 的字符,即那些具有 "Lm"、"Lt"、"Lu"、"Ll" 或 "Lo" 之一的通用類別屬性的字符。 注意,這與 Unicode 標(biāo)準(zhǔn)中定義的"字母"屬性不同。
str.isascii()
如果字符串為空或字符串中的所有字符都是 ASCII ,返回?True?,否則返回?False?。ASCII 字符的碼點(diǎn)范圍是 U+0000-U+007F 。
3.7 新版功能.
str.isdecimal()
如果字符串中的所有字符都是十進(jìn)制字符且該字符串至少有一個(gè)字符,則返回?True?, 否則返回?False?。十進(jìn)制字符指那些可以用來(lái)組成10進(jìn)制數(shù)字的字符,例如 U+0660 ,即阿拉伯字母數(shù)字0 。 嚴(yán)格地講,十進(jìn)制字符是 Unicode 通用類別 "Nd" 中的一個(gè)字符。
str.isdigit()
如果字符串中的所有字符都是數(shù)字,并且至少有一個(gè)字符,返回?True?,否則返回?False?。 數(shù)字包括十進(jìn)制字符和需要特殊處理的數(shù)字,如兼容性上標(biāo)數(shù)字。這包括了不能用來(lái)組成 10 進(jìn)制數(shù)的數(shù)字,如 Kharosthi 數(shù)。 嚴(yán)格地講,數(shù)字是指屬性值為 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符。
str.isidentifier()
如果字符串是有效的標(biāo)識(shí)符,返回?True?,依據(jù)語(yǔ)言定義,?標(biāo)識(shí)符和關(guān)鍵字?節(jié)。
調(diào)用?keyword.iskeyword()?來(lái)檢測(cè)字符串?s?是否為保留標(biāo)識(shí)符,例如?def?和?class。
1. 字符串字母處理
2. 字符串填充
str.ljust(width, fillchar)、str.center(width, fillchar)、str.rjust(width, fillchar)
返回一個(gè)指定的寬度 width 「居左」/「居中」/「居右」的字符串,如果 width 小于字符串寬度直接返回字符串,否則使用 fillchar 去填充。
3,字符串計(jì)數(shù)
str.count(sub, start, end)
#統(tǒng)計(jì)字符串里某個(gè)字符出現(xiàn)的次數(shù)??蛇x參數(shù)為在字符串搜索的開(kāi)始與結(jié)束位置。
start, end遵循**“左閉右開(kāi)”**原則。
4. 字符串位置
str.endswith(suffix, start, end)和str.startswith(substr, beg, end)
#判斷字符串是否以指定后綴結(jié)尾/開(kāi)頭,如果以指定后綴「結(jié)尾」/「開(kāi)頭」返回 True,否則返回 False。
5. 字符串查找
6. 字符串判斷
7. 字符串拼接
str.join() #將序列中的元素以指定的字符連接生成一個(gè)新的字符串。
s1 = "-" s2 = "" seq = ("r", "u", "n", "o", "o", "b")
# 字符串序列 print (s1.join( seq )) print (s2.join( seq )) r-u-n-o-o-b runoob
8. 統(tǒng)計(jì)字符串長(zhǎng)度
str.len() #返回對(duì)象(字符、列表、元組等)長(zhǎng)度或項(xiàng)目個(gè)數(shù)。
9. 去除字符兩側(cè)空格
str.lstrip()、str.rstrip()、str.strip() #截掉字符串「左邊」/「右邊」/「左右」兩側(cè)的空格或指定字符。
str0 = ' Hello World!' str0.lstrip() 'Hello World!' str1 = 'aaaa Hello World!' str1.lstrip('a') ' Hello World!'
10. str.maketrans(intab, outtab)和str.translate(table)
str.maketrans()創(chuàng)建字符映射的轉(zhuǎn)換表
str.maketrans()根據(jù)參數(shù)table給出的表轉(zhuǎn)換字符串的字符。
str.maketrans()傳入的也可以是字典
tab = {'e': '3', 'o': '4'} trantab = str.maketrans(tab) str0.translate(trantab) 'H3ll4 W4rld!'
11. 字符串替換
str.replace(old, new, max)
12. 字符分割
str.split(str, num)
13. 字符填充
str.zfill(width)
返回指定長(zhǎng)度的字符串,原字符串右對(duì)齊,前面填充0。
用字符串count函數(shù)計(jì)算出現(xiàn)次數(shù),防止重復(fù),可以用字典來(lái)搜集結(jié)果:
代碼
運(yùn)行結(jié)果:
運(yùn)行結(jié)果
一、實(shí)現(xiàn)思路
需要統(tǒng)計(jì)字符串中每個(gè)字母出現(xiàn)的次數(shù);如果字母是第一次出現(xiàn)的話,就把次數(shù)置為1,如果字母非第一次出現(xiàn)的話,就需要在原字母已保存次數(shù)上加1;仔細(xì)思考一下,需要保存字母和出現(xiàn)次數(shù),然后相同字母出現(xiàn)多次的話,需要在原字母保存的次數(shù)加1;字典這種數(shù)據(jù)類型可以實(shí)現(xiàn)這種需求。
二、代碼實(shí)現(xiàn)
2.1 統(tǒng)計(jì)字母出現(xiàn)次數(shù)
統(tǒng)計(jì)字符串每個(gè)字母出現(xiàn)次數(shù)源碼:
def count_each_char(str):
dict = {}
for i in str:
if i not in dict:
dict[i] = 1
else:
dict[i] += 1
return dict
if __name__ == "__main__":
res = count_each_char("abdefdcsdf")
print(res)
簡(jiǎn)化版統(tǒng)計(jì)字符串字母出現(xiàn)次數(shù)源碼:
dict[i] 表示的是字典中字母對(duì)應(yīng)的value(出現(xiàn)次數(shù))
dict.get(i,0)+1 表示的是從字典獲取字母,如果字典中沒(méi)有查找到對(duì)應(yīng)字母,則將字母i,次數(shù)1存入字典
def count_each_char(str):
dict = {}
for i in str:
dict[i]=dict.get(i,0)+1
return dict
運(yùn)行結(jié)果:
2.2 按字母出現(xiàn)次數(shù)排序
根據(jù)字母出現(xiàn)次數(shù)倒序排列源碼:
def count_each_char_sort_value(str):
dict = {}
for i in str:
dict[i] = dict.get(i, 0) + 1
# sorted 方法會(huì)生成一個(gè)排序好的容器
# operator.itemgetter(1) 獲取字典第一維的數(shù)據(jù)進(jìn)行排序
# reverse 表示倒序排列
dict=sorted(dict.items(),key= operator.itemgetter(1),reverse=True)
return dict
if __name__ == "__main__":
res = count_each_char_sort_value("abdefdcsdf")
print(res)
運(yùn)行結(jié)果:
從運(yùn)行結(jié)果可以看出,通過(guò)調(diào)用sorted方法,已經(jīng)根據(jù)指定的key進(jìn)行倒序排序了