Python字符串

一、string字符串

1.常用功能

1.1獲取長(zhǎng)度和次數(shù)

代碼演示:

#1.計(jì)算字符串長(zhǎng)度  len
#類(lèi)似于list和tuple的中獲取長(zhǎng)度的用法
str1 = "hfufhja"
l = len(str1)
print(l)

#2,計(jì)算某個(gè)字符或者子字符串在原字符串中出現(xiàn)的次數(shù)   count
str2 = "this is a good day good day"
#count(str,[start,end])
#在整個(gè)字符串中進(jìn)行查找
print(str2.count("day"))
#在指定區(qū)間內(nèi)進(jìn)行查找
print(str2.count("day",3,10))
1.2大小寫(xiě)轉(zhuǎn)換

代碼演示:

#注意:使用字符串中的功能,一般情況下,都是生成一個(gè)新的字符串,原字符串沒(méi)有發(fā)生任何變化
#3.大小寫(xiě)字母轉(zhuǎn)換
#lower()   將字符串中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)
str31 = "Today Is a Good day"
astr31 = str31.lower()
print(astr31)

#uppper()   將字符串中小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)
str32 = "Today Is a Good day"
astr32 = str2.upper()
print(astr32)

#swapcase()     將字符串中小寫(xiě)字母轉(zhuǎn)換為大寫(xiě),大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)
str33 = "Today Is a Good day"
astr33 = str33.swapcase()
print(astr33)

#capitalize()   將一句英文中首單詞的首字母轉(zhuǎn)化為大寫(xiě),其他小寫(xiě)
str34 = "today Is a Good day"
astr34 = str34.capitalize()
print(astr34)

#title()       將一句英文中每個(gè)單詞的首字母大寫(xiě)
str35 = "today is a good day"
astr35 = str35.title()
print(astr35)
1.3整數(shù)和字符串轉(zhuǎn)換

代碼演示:

4.字符串和數(shù)字之間的轉(zhuǎn)換
#int()     float()      str()
#eval(str)   將str轉(zhuǎn)換為有效的表達(dá)式,參與運(yùn)算,并返回運(yùn)算結(jié)果
num1 = eval("123")
print(num1)
#print("123")
print(type(num1))
print(int("123"))

#eval和int將+和-當(dāng)做正負(fù)號(hào)處理
print(eval("+123"))
print(int("+123"))
print(eval("-123"))
print(int("-123"))

#將12+3字符串轉(zhuǎn)換為了有效的表達(dá)式,并運(yùn)算了結(jié)果
print(eval("12+3"))    #15
#不成立
#print(int("12+3"))   #ValueError: invalid literal for int() with base 10: '12+3'

print(eval("12-3"))   #9
#print(int("12-3"))    #ValueError: invalid literal for int() with base 10: '12-3'

#print(eval("a123"))  #NameError: name 'a123' is not defined
#print(int("a123"))  #ValueError: invalid literal for int() with base 10: 'a123'

#總結(jié):注意區(qū)分eval和int【eval:轉(zhuǎn)換有效的表達(dá)式   int:將字符串轉(zhuǎn)換為整型】
1.4填充

代碼演示:

#5.填充【了解】
#center(width[,fillchar])  返回一個(gè)指定寬度的居中字符串,width是填充之后整個(gè)字符串的長(zhǎng)度,fillchar為需要填充的字符串,默認(rèn)使用空格填充
str1 = "hello"
print(str1.center(20))
print(str1.center(10,"*"))

#ljust(width[,fillchar]) 返回一個(gè)指定寬度的字符串,將原字符串居左對(duì)齊,width是填充之后整個(gè)字符串的長(zhǎng)度
print(str1.ljust(40,"%"))

#rjust width[,fillchar])  返回一個(gè)指定寬度的字符串,將原字符串居右對(duì)齊,width是填充之后整個(gè)字符串的長(zhǎng)度
print(str1.rjust(40,"%"))

#zfill(width)   返回一個(gè)指定寬度的字符串,將原字符串居右對(duì)齊,剩余的部分使用的數(shù)字0填充
print(str1.zfill(40))
1.5查找

代碼演示:

#6.查找【掌握】
str2 = "abcdefhello123hello"
#find(str[,start,end])  從左到右依次檢測(cè),str是否在原字符串中,,也可以指定查找的范圍
#特點(diǎn);得到的子字符串第一次出現(xiàn)的開(kāi)始字符的下標(biāo),如果查找不到則返回-1
print(str2.find("hello"))    #6
print(str2.find("e"))
print(str2.find("yyy"))    #-1
print(str2.find("e",3,10))

#rfind(str[,start,end])   類(lèi)似于find,從右向左進(jìn)行檢測(cè)
print(str2.rfind("hello"))  #14

#index   和find的使用基本相同,唯一的區(qū)別在于如果子字符串查找不到,find返回-1,而index則直接報(bào)錯(cuò)
print(str2.index("hello"))
#print(str2.index("yyy"))   #ValueError: substring not found

#rindex  和rfind的使用基本相同

#max(str)   獲取str中最大的字母【在字典中的順序】
#"abcdefhello123hello"
print(max(str2))

str3 = "46732647"
print(max(str3))

#min(str)  獲取str中最小的字母【在字典中的順序】
1.6提取

代碼演示:

#7.提取字符串
#strip(str)    使用str作為條件提取字符串,除了兩頭指定的字符串
str1 = "********today is *********a good day*******"
print(str1.strip("*"))   #today is *********a good day

#lstrip(str)    提取字符串,除了左邊的指定字符串
str11 = "********today is *********a good day*******"
print(str11.lstrip("*"))

#rstrip()
str12 = "********today is *********a good day*******"
print(str12.rstrip("*"))
1.7分割和合并

代碼演示:

#8.分割和合并【掌握:正則表達(dá)式】
#split(str[,num)]   將str作為分隔符切割原字符串,結(jié)果為一個(gè)列表,如果制定了num,則僅使用num個(gè)字符串截取原字符串
str3 = "today is a good day"
print(str3.split(" "))   #['today', 'is', 'a', 'good', 'day']
print(str3.split(" ",2))   #['today', 'is', 'a good day']

#splitlines(flag)   按照換行符【\n,\r,\r\n】分隔,結(jié)果為列表
#flag:False或者不寫(xiě),則表示忽略換行符;如果True,則表示保留換行符
str4 = """today
is
a
good
day
"""
print(str4.splitlines(True))   #['today', 'is', 'a', 'good', 'day']    ['today\n', 'is\n', 'a\n', 'good\n', 'day\n']

#join(list)    將原字符串作為連接符號(hào),將列表中的元素分別連接起來(lái),結(jié)果為字符串,作用和split是相反的
str5 = "*"
list1 = ["shangsan","lisi","jack"]
print(str5.join(list1))
1.8替換

代碼演示:

#9.替換
#replace(old,new[,max])   用new的字符串將old的字符串替換掉.max表示可以替換的最大次數(shù)【從左到右】
str1 = "this is a easy test test test test"
print(str1.replace("test","exam"))
print(str1.replace("test","exam",2))

#使用場(chǎng)景:在一定情境下,可以實(shí)現(xiàn)字符串的簡(jiǎn)單加密,加密規(guī)則可以自定義
#maketrans()   創(chuàng)建字符映射的轉(zhuǎn)換表,結(jié)果為字典,通過(guò)key:value的方式
#translate(table)

t = str.maketrans("aco","123")
print(t)   #{97: 49, 99: 50, 111: 51}

str2 = "today is a good day"
print(str2.translate(t))  #t3d1y is 1 g33d d1y
1.9判斷

代碼演示:

#10.判斷
#isalpha()   如果字符串中至少包含一個(gè)字符并且所有的字符都是字母,才返回True
print("".isalpha())
print("abc".isalpha())
print("abc123".isalpha())   #False

#isalnum   如果字符串中至少包含一個(gè)字符并且所有字符都是字母或者數(shù)字的時(shí)候才返回True
print("".isalnum())   #False
print("abc".isalnum())
print("abc123".isalnum())
print("123".isalnum())
print("1abc".isalnum())
print("1abc¥".isalnum())  #False

#isupper  如果字符串中至少包含一個(gè)字符并且出現(xiàn)的字母必須是大寫(xiě)字母才返回True,數(shù)字的出現(xiàn)沒(méi)有影響
print("".isupper())
print("aBC".isupper())
print("123A".isupper())   #True
print("abc".isupper())

#islower

#istitle   每個(gè)單詞的首字母必須全部大寫(xiě)才返回True
print("Good Day".istitle())
print("good Day".istitle())

#isdigit() 【掌握】   如果字符串中只包含數(shù)字,則返回True
print("abc123".isdigit())
print("2364".isdigit())

#需求:將用戶(hù)從控制臺(tái)輸入的字符串轉(zhuǎn)化為整型【全數(shù)字】
str = input()
if str.isdigit():
    int(str)
    print("yes")

1.10前綴和后綴

代碼演示:

#11.前綴和后綴【掌握】  子字符串是連續(xù)的
#startswith
str1 = "helloPython"
print(str1.startswith("hello"))

#endswith
print(str1.endswith("on"))
1.11編解碼

代碼演示:

#12.字符串編碼和解碼
#注意:主要針對(duì)的是中文
#encode()   默認(rèn)的編碼格式為utf-8
str2 = "this is 千鋒教育"
print(str2.encode())
print(str2.encode("utf-8"))
print(str2.encode("gbk"))

#decode()   bytes對(duì)象
#\xe5\x8d\x83\xe9\x94\x8b\xe6\x95\x99\xe8\x82\xb2
#print(r"\xe5\x8d\x83\xe9\x94\x8b\xe6\x95\x99\xe8\x82\xb2".decode())    錯(cuò)誤
1.12ASCII碼轉(zhuǎn)換

代碼演示:

#13。ASCII嗎的轉(zhuǎn)換
#ord()
print(ord("A"))
print(ord("0"))

#chr()
print(chr(65))
print(chr(110))

2.練習(xí)

需求一:

#需求1:統(tǒng)計(jì)下面字符串中每個(gè)單詞的出現(xiàn)次數(shù),并生成一個(gè)字典,單詞為key,次數(shù)為value
"""
實(shí)現(xiàn)思路:
1.以空格為切割符切割字符串
2.遍歷第一步中得到的list
3.將單詞提取出來(lái),去一個(gè)字典中判斷
4.如果單詞不存在,就以該單詞作為key,1作為value存儲(chǔ)到字典中
5.如果單詞存在,將對(duì)應(yīng)key的value遞增1【修改指定key的value】
"""
str1 = "tomorrow is sunny day tomorrow is sunny day tomorrow is wind day"
dict1 = {}    #創(chuàng)建一個(gè)空字典,備用
list1 = str1.split(" ")    #切割字符串
#方式一:get()
"""
for word in list1:      #遍歷列表
    value = dict1.get(word)    #None
    if value == None:
        dict1[word] = 1      #往字典中添加鍵值對(duì)
    else:
        dict1[word] += 1     #給字典中指定key的value修改值

print(dict1)
"""
#方式二:成員運(yùn)算符
for word in list1:      #遍歷列表
    if word not in dict1:
        dict1[word] = 1
    else:
        dict1[word] += 1
print(dict1)

需求二:


#需求2:從控制臺(tái)輸入一個(gè)字符串,表示時(shí)間,編寫(xiě)程序,獲取這個(gè)時(shí)間的下一秒
#例如輸入:12:23:33    輸出12:23:34
"""
思路分析:
1.將字符串切割,得到時(shí)分秒的數(shù)據(jù)
2.得到時(shí)間的下一秒:給秒加1
3.12:23:59----》12:24:00    當(dāng)秒數(shù)增加完之后為60的時(shí)候,分鐘需要增加1,秒數(shù)應(yīng)該置為0
4.12:59:59----》13:00:00   當(dāng)分鐘增加完之后為60的時(shí)候,時(shí)鐘需要增加1,分鐘置為0
5.當(dāng)時(shí)鐘增加完之后為24的時(shí)候,時(shí)鐘置為0
"""
timeStr = input("請(qǐng)輸入正確格式的時(shí)間:")

timeList = timeStr.split(":")
h = int(timeList[0])
m = int(timeList[1])
s = int(timeList[2])

s += 1

if s == 60:
    m += 1
    s = 0
    if m == 60:
        h += 1
        m = 0
        if h == 24:
            h = 0

print("%.2d:%.2d:%.2d"%(h,m,s))

#%.2f

需求三:

#需求3:實(shí)現(xiàn)簡(jiǎn)單的購(gòu)物車(chē)功能
"""
思路分析
1.引導(dǎo)用戶(hù)選擇商品【提供】
2.引導(dǎo)用戶(hù)輸入金額
3.加入購(gòu)物車(chē)
4.查看購(gòu)物車(chē),計(jì)算余額
"""
product_list  = [
    ("Mac",10000),
    ("kindle",500),
    ("iphone x",8000),
    ("bike",3000)
]

saving = input("請(qǐng)輸入金額:")

#定義一個(gè)列表,充當(dāng)購(gòu)物車(chē)
shopping_car  = []

#判斷金額是否是數(shù)字
if saving.isdigit():
    #將saving轉(zhuǎn)換為整數(shù)
    saving = int(saving)

    while True:
        #打印商品信息,提供給用戶(hù)選擇
        for index,p in enumerate(product_list):
            print(index,":",p)

        #引導(dǎo)用戶(hù)選擇商品
        choice = input("請(qǐng)輸入商品的編號(hào)[輸入q退出]:")

        #判斷編號(hào)是否合法
        if choice.isdigit():
            choice = int(choice)

            if choice >= 0 and choice < len(product_list):
                #將用戶(hù)選擇的商品從product_list取出來(lái)
                item = product_list[choice]   #元組

                #item[0] :商品名稱(chēng)   item[1]:商品的價(jià)格
                if item[1] <= saving:

                    #saving減少
                    saving -= item[1]

                    #需要將商品添加到購(gòu)物車(chē)對(duì)應(yīng)的list中
                    shopping_car.append(item)

                else:
                    print("余額不足")

            else:
                print("不存在的編號(hào)")
        elif choice == "q":
            print("-------你已經(jīng)購(gòu)買(mǎi)如下商品:-------")
            for i in shopping_car:
                print(i)

            print("你還剩余%d元錢(qián)"%(saving))

            break
        else:
            print("不合法的編號(hào)")
else:
    print("invalid input")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容