1. 程式人生 > >python字串用法

python字串用法

一,資料型別的轉換

1常用的資料型別有int,str,bool三種;

int是整型:一般的操作是查詢資料的二進位制長度bit_length()

一般資料有:1)二進位制:逢二進一2)十進位制,(0-9)逢十進一3)八進位制,(0-7)蜂八進一4)十六進位制逢 (0-F)十六進一

例:

a=10 

print(a.bit_length())#就能得到a這個變數的值的二進位制長度

二,資料型別的轉換

結論1:把x轉換成y型別 y(x)

例子:print(bool(-1))#將布林值轉變成資料型別

print(int(a))#將a轉變成資料型別

print(str(a)#將a轉變成字元型別 
結論2:空的東西是False, 非空的東西是True,

false: False: 0,'',[],{},set(),tuple(),None(真空)

print(bool({}) #false

三,索引切片

1,在python和其他開發語言中我們的索引都是從零開始算的

 反向 -7 -6-5 -4 -3-2 -1
正向 0 1 2 3 4 5 6
s = "文 能 提 筆 安 天 下"
print(s[3])
print(s[7]) # index out of range 超過了索引的範圍
print(s[-8]) # 反向索引 - 反向
例子
切片 從字串中獲取新字串
s = "銀王喜歡和金王一起討論汙王"
s1 = s[5]+s[6]+s[7]+s[8]
print(s1)
s[start: end] 從start切到end。 但是不包含end. 顧頭不顧尾
s2 = s[5:9] # 從5-9 沒有9
print(s2)
print(s[3:7]) # 歡和金王
print(s[5:]) # 從5開始, 到末尾
print(s[:5]) # 從頭開始到5結束
print(s[:]) # 從頭到尾
print(s[5:3]) # 預設的方向是從左到右.


s[start: end: step] step如果是正數 從左到右。 如果是負數就是從右到左
s = "金毛獅王謝遜紫衫龍王黛綺絲"
print(s[3:1:-1]) # 可以從右往左切片
print(s[1:8:3]) #從左往右切且各三個取一個值

print(s[::-1])

總結:
s[start: end: step]
start: 起始位置
end: 結束為止。取不到
step: 步長。 每隔xx個取1個。 預設是1 如果step是-1 從右往左取值

四,字串操作
1.upper() 全部轉化成大寫字母,loswer全部轉換成小寫,capitalize()首字母大寫,title()每個單詞首字母大寫,swapcase()大寫變小寫小寫變大寫

2.strip() 去掉左右兩段的空白(空格,\n, \t)
3.replace(old, new) 字串替換
4.split() 切割. 得到的結果是一個列表.
5.startswith() 判斷是否以xxx開頭,endswith()判斷以什麼結尾
6.find() 查詢。如果找到了。 返回索引。如果找不到返回-1
7.len() 內建函式,求字串長度

8,count()計數計算字元或數字出現的次數

9isdigit(),判斷是否是數字

例子

2.有字串s = "123a4b5c"
1)通過對s切⽚形成新的字串s1,s1 = "123"
s="123a4b5c"
s1=s[0:3]
print(s1)
2)通過對s切⽚形成新的字串s2,s2 = "a4b"
s="123a4b5c"
s2=input(s[3:6])
print(s2)
3)通過對s切⽚形成新的字串s3,s3 = "1345"
s="123a4b5c"
s3=s[0:8:2]
print(s3)
4)通過對s切⽚形成字串s4,s4 = "2ab"
s="123a4b5c"
s4=s[1:7:2]
print(s4)
5)通過對s切⽚形成字串s5,s5 = "c"
s="123a4b5c"
s5=s[-1]
print(s5)
6)通過對s切⽚形成字串s6,s6 = "ba2"
s="123a4b5c"
s6=s[-3:-8:-2]
print(s6)
3.使⽤while和for迴圈分別列印字串s="asdfer"中每個元素。
#(while迴圈)
s="asdfer"
index=0
while index<len(s):
print(s[index])
index+=1
#(for迴圈)
# s="asdfer"
# for i in s:
# print(i)
4.使⽤for迴圈對s="asdfer"進⾏迴圈,但是每次列印的內容都是"asdfer"。
s="asdfer"
for i in s:
print(i,s)




5.使⽤for迴圈對s="abcdefg"進⾏迴圈,每次列印的內容是每個字元加上sb,
s="abcdefg"
for i in s:
print(i +"sb")
day3作業及默寫
1.有變數name = "aleX leNb" 完成如下操作:
1)移除 name 變數對應的值兩邊的空格,並輸出處理結果
name = "alex leNb"
print(name.strip())
2)移除name變數左邊的"al"並輸出處理結果
name = "alex leNb"
print(name.strip("al"))
3)移除name變數右⾯的"Nb",並輸出處理結果
name= "alex leNb"
print(name.strip("Nb"))
4)移除name變數開頭的a"與最後的"b",並輸出處理結果
name="alex leNb"
print(name.strip("a"+"b"))
5)判斷 name 變數是否以 "al" 開頭,並輸出結果
name="alex leNb"
n=name.startswith("al")
if n == True:
print("name is al start")
else:
print("is not al start")
6)判斷name變數是否以"Nb"結尾,並輸出結果
name = "alex leNb"
n=name.endswith("Nb")
if n== True:
print("是以Nb結尾")
else:
print("不是以Nb結尾")
7)將 name 變數對應的值中的 所有的"l" 替換為 "p",並輸出結果
name = "alex leNb"
print(name.replace("l","p"))
8)將name變數對應的值中的第⼀個"l"替換成"p",並輸出結果
name="alex leNb"
n=name.replace("al","ap")
print(n)
9)將 name 變數對應的值根據 所有的"l" 分割,並輸出結果。
name="alex leNb"
print(name.split("l"))
10)將name變數對應的值根據第⼀個"l"分割,並輸出結果。
print(name.replace("al","ap").split("p"))
11)將 name 變數對應的值變⼤寫,並輸出結果
name="alex leNb"
print(name.upper())
12)將 name 變數對應的值變⼩寫,並輸出結果
name="alex leNb"
print(name.lower())
13)將name變數對應的值⾸字⺟"a"⼤寫,並輸出結果
name="alex leNb"
print(name.capitalize())
print(name.title())
print(name.swapcase())
大寫變小寫,小寫變大寫
name="alex leNb"
print(name.upper())

14)判斷name變數對應的值字⺟"l"出現⼏次,並輸出結果
name="alex leNb"
print(name.count("l"))
15)如果判斷name變數對應的值前四位"l"出現⼏次,並輸出結果
name="alex leNb"
i=name[0:4]
print(i.count("l"))
16)從name變數對應的值中找到"N"對應的索引(如果找不到則報錯),並輸出結果
name="alex leNb"
print(name.index("N"))


17)從name變數對應的值中找到"N"對應的索引(如果找不到則返回-1)輸出結果
name="alex leNb"
print(name.find("N"))


18)從name變數對應的值中找到"X le"對應的索引,並輸出結果
name="alex leNb"
print(name.find("x le"))
19)請輸出 name 變數對應的值的第 2 個字元?
name="alex leNb"
print(name.find("l"))
20)請輸出 name 變數對應的值的前 3 個字元?
name = "alex leNb"
print(name.find("a"),name.find("l"),name.find("e"))
21)請輸出 name 變數對應的值的後 2 個字元?
name="alex leNb"
print(name.find("N"),name.find("b"))
22)請輸出 name 變數對應的值中 "e" 所在索引位置?
name="alex leNb"
print(name.find("e"))
例如:asb, bsb,csb,...gsb。
6.使⽤for迴圈對s="321"進入迴圈,列印的內容依次是:"倒計時3秒","倒計時
2秒","倒計時1秒","出發!"。
s="321"

for t in s:
print("倒計時" + t + "s")
else:
print("出發")
7,實現⼀個整數加法計算器(兩個數相加):
如:content = input("請輸⼊內容:") ⽤戶輸入:5+9或5+ 9或5 + 9,然後進
行分割再進⾏計算。
content=input("請輸入內容")
n=content.split("+")
s=0
for i in n:
s += int(i)
print(s)
8,升級題:實現⼀個整數加法計算器(多個數相加):
如:content = input("請輸⼊內容:") 使用者戶輸入:5+9+6 +12+ 13,然後進行計算
content=input("請輸入內容")
n=content.split("+")
s=0
for i in n:
s += int(i)
print(s)
分割再進⾏計算。
9,計算⽤戶輸⼊的內容中有⼏個整數(以個位數為單位)。
如:content = input("請輸入內容:") # 如fhdal234slfh98769fjdla
content=input("請輸入內容")
count=0
for b in content:
if b.isdigit()==1:
count=count+1
print(count)

五迭代
for 變數 in 可迭代物件:
迴圈體(break,continue)
else:

例子

寫程式碼,完成下列需求:
使用者可持續輸出(用while迴圈),使用者使用的情況:
輸⼊A,則顯示走大路回家,然後在讓使用者戶進二步選擇:
是選擇公交車,還是步⾏?
選擇公交車,顯示10分鐘到家,並退出整個程式。
選擇步⾏,顯示20分鐘到家,並退出整個程式。
輸⼊B,則顯示⾛⼩路回家,並退出整個程式。
輸⼊C,則顯示繞道回家,然後在讓使用者進行步選擇:
是選擇遊戲廳玩會,還是⽹吧?
選擇遊戲廳,則顯示 ‘一個半⼩時到家,爸爸在家,拿棍等你。’並讓其
重新輸⼊A,B,C選項。
選擇⽹吧,則顯示‘兩個⼩時到家,媽媽已做好了戰鬥準備。’並讓其重
新輸⼊A,B,C選項。
while True:
user=input("請輸入一個字母A或B或C:")
if user=="C":
print("繞道回家")
use1 = input("請問是遊戲廳還是網咖玩會:")
if use1 =="遊戲廳":
print("一個半小時到家,爸爸在家,拿棍等你。")
elif use1 == "網咖":
print("兩個小時到家,媽媽已做好了戰鬥準備。")
elif user=="A":
print("走大路回家")
use2=input("請問坐公交還是步行:")
if use2 == "公交車" :
print("10分鐘到家")
break
elif use2 =="步行":
print("20分鐘到家")
break
else:
print("走小路回家")
break
寫程式碼:計算 1 - 2 + 3 ... + 99 中除了88以外所有數的總和?
i=1
sumi=0
j=1
sumj=0
while i<99 and j<99:
sumi=sumi+i
j = i + 1
i += 2
if j==88:
continue
sumj = sumj + j
print(sumi-sumj)(升級題)判斷⼀句話是否是回⽂. 回⽂: 正著念和反著念是⼀樣的. 例如, 上海
⾃來⽔來⾃海上(升級題)
while True:
wen = input("請輸入一句話:")
if wen[0:] == wen[-1::-1] :
print("這句話是迴文")
else:
print("不是迴文")


13. 輸⼊一個字串,要求判斷在這個字串中⼤寫字⺟,小寫字⺟,數字,
其它字元共出現了多少次,並輸出出來
content=input("請輸入內容")
count=0
cont1=0
cont2=0
cont3=0
for a in content:
if a.isdigit()==1:
count=count+1
# print(count)
elif a.islower()==1:
cont1 += 1
# print(count1)
elif a.isupper()==1:
cont2 +=1
#print(cont2)
else:
cont3 +=1
print("數字",count,"個")
print("小寫字母",cont1,"個")
print("大寫字母",cont2,"個")
print("其他字元", cont3,"個")
給出百家姓. 然後使用者輸入一個人的名字. 判斷這個姓是否是百家
姓中的姓氏
first_name=\
'''趙錢孫李,周吳鄭王。
馮陳褚衛,蔣沈韓楊。
朱秦尤許,何呂施張。
孔曹嚴華,金魏陶姜。
戚謝鄒喻,柏水竇章。
雲蘇潘葛,奚範彭郎。
魯韋昌馬,苗鳳花方。
俞任袁柳,酆鮑史唐。
費廉岑薛,雷賀倪湯。
滕殷羅畢,郝鄔安常。
樂於時傅,皮卞齊康。
伍餘元卜,顧孟平黃。
和穆蕭尹,姚邵湛汪。
祁毛禹狄,米貝明臧。
計伏成戴,談宋茅龐。
熊紀舒屈,項祝董樑。
杜阮藍閔,席季麻強。
賈路婁危,江童顏郭。
梅盛林刁,鍾徐邱駱。
高夏蔡田,樊胡凌霍。
虞萬支柯,昝管盧莫。
經房裘繆,幹解應宗。
丁宣賁鄧,鬱單杭洪。
包諸左石,崔吉鈕龔。
程嵇邢滑,裴陸榮翁。
荀羊於惠,甄曲家封。
芮羿儲靳,汲邴糜鬆。
井段富巫,烏焦巴弓。
牧隗山谷,車侯宓蓬。
全郗班仰,秋仲伊宮。
寧仇欒暴,甘鈄厲戎。
祖武符劉,景詹束龍。
葉幸司韶,郜黎薊薄。
印宿白懷,蒲邰從鄂。
索鹹籍賴,卓藺屠蒙。
池喬陰鬱,胥能蒼雙。
聞莘黨翟,譚貢勞逄。
姬申扶堵,冉宰酈雍。
卻璩桑桂,濮牛壽通。
邊扈燕冀,郟浦尚農。
溫別莊晏,柴瞿閻充。
慕連茹習,宦艾魚容。
向古易慎,戈廖庾終。
暨居衡步,都耿滿弘。
匡國文寇,廣祿闕東。
歐殳沃利,蔚越夔隆。
師鞏厙聶,晁勾敖融。
冷訾辛闞,那簡饒空。
曾毋沙乜,養鞠須豐。
巢關蒯相,查後荊紅。
遊竺權逯,蓋益桓公。
万俟司馬,上官歐陽。
夏侯諸葛,聞人東方。
赫連皇甫,尉遲公羊。
澹臺公冶,宗政濮陽。
淳于單于,太叔申屠。
公孫仲孫,軒轅令狐。
鍾離宇文,長孫慕容。
鮮于閭丘,司徒司空。
丌官司寇,仉督子車。
顓孫端木,巫馬公西。
漆雕樂正,壤駟公良。
拓跋夾谷,宰父穀梁。
晉楚閆法,汝鄢塗欽。
段幹百里,東郭南門。
呼延歸海,羊舌微生。
嶽帥緱亢,況郈有琴。
樑丘左丘,東門西門。
商牟佘佴,伯賞南宮。
墨哈譙笪,年愛陽佟。
第五言福,百家姓終。'''
# name = input("請輸入使用者名稱")
# for i in first_name :
# if i == name[0] :
# break
# print(i,"在百家姓中")
# else:
# print("不在百家姓中")
# while迴圈
while True:
name = input("請輸入使用者名稱")
if name[0] in first_name :
print("在百家姓中")
continue
else:
print("不在百家姓中")

六,格式化輸出
製作趣味模板程式需求:等待⽤戶輸⼊名字、地點、愛好,根據⽤戶的名
字和愛好進⾏任意現實 如:敬愛可親的xxx,最喜歡在xxx地⽅⼲xxx
aihao="和藹可親的%s,最喜歡在%s,幹%s" %("劉傳盛","小樹林","談戀愛")
love="{}的演的電影,是{},{}很喜歡" .format("周星馳","幽默的","大家")
AV="{0},{1},{2},{3},都是{4},受廣大{5}喜歡" .format\
("蒼井空","瀧澤蘿拉","小澤瑪麗牙","波多野結衣","日本明星","宅男")
print(AV)
print(love)
print(aihao)