Python字符串

一、string字符串

1.常用功能

1.1获取长度和次数

代码演示:

#1.计算字符串长度  len
#类似于list和tuple的中获取长度的用法
str1 = "hfufhja"
l = len(str1)
print(l)

#2,计算某个字符或者子字符串在原字符串中出现的次数   count
str2 = "this is a good day good day"
#count(str,[start,end])
#在整个字符串中进行查找
print(str2.count("day"))
#在指定区间内进行查找
print(str2.count("day",3,10))
1.2大小写转换

代码演示:

#注意:使用字符串中的功能,一般情况下,都是生成一个新的字符串,原字符串没有发生任何变化
#3.大小写字母转换
#lower()   将字符串中的大写字母转换为小写
str31 = "Today Is a Good day"
astr31 = str31.lower()
print(astr31)

#uppper()   将字符串中小写字母转换为大写
str32 = "Today Is a Good day"
astr32 = str2.upper()
print(astr32)

#swapcase()     将字符串中小写字母转换为大写,大写字母转换为小写
str33 = "Today Is a Good day"
astr33 = str33.swapcase()
print(astr33)

#capitalize()   将一句英文中首单词的首字母转化为大写,其他小写
str34 = "today Is a Good day"
astr34 = str34.capitalize()
print(astr34)

#title()       将一句英文中每个单词的首字母大写
str35 = "today is a good day"
astr35 = str35.title()
print(astr35)
1.3整数和字符串转换

代码演示:

4.字符串和数字之间的转换
#int()     float()      str()
#eval(str)   将str转换为有效的表达式,参与运算,并返回运算结果
num1 = eval("123")
print(num1)
#print("123")
print(type(num1))
print(int("123"))

#eval和int将+和-当做正负号处理
print(eval("+123"))
print(int("+123"))
print(eval("-123"))
print(int("-123"))

#将12+3字符串转换为了有效的表达式,并运算了结果
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'

#总结:注意区分eval和int【eval:转换有效的表达式   int:将字符串转换为整型】
1.4填充

代码演示:

#5.填充【了解】
#center(width[,fillchar])  返回一个指定宽度的居中字符串,width是填充之后整个字符串的长度,fillchar为需要填充的字符串,默认使用空格填充
str1 = "hello"
print(str1.center(20))
print(str1.center(10,"*"))

#ljust(width[,fillchar]) 返回一个指定宽度的字符串,将原字符串居左对齐,width是填充之后整个字符串的长度
print(str1.ljust(40,"%"))

#rjust width[,fillchar])  返回一个指定宽度的字符串,将原字符串居右对齐,width是填充之后整个字符串的长度
print(str1.rjust(40,"%"))

#zfill(width)   返回一个指定宽度的字符串,将原字符串居右对齐,剩余的部分使用的数字0填充
print(str1.zfill(40))
1.5查找

代码演示:

#6.查找【掌握】
str2 = "abcdefhello123hello"
#find(str[,start,end])  从左到右依次检测,str是否在原字符串中,,也可以指定查找的范围
#特点;得到的子字符串第一次出现的开始字符的下标,如果查找不到则返回-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])   类似于find,从右向左进行检测
print(str2.rfind("hello"))  #14

#index   和find的使用基本相同,唯一的区别在于如果子字符串查找不到,find返回-1,而index则直接报错
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.分割和合并【掌握:正则表达式】
#split(str[,num)]   将str作为分隔符切割原字符串,结果为一个列表,如果制定了num,则仅使用num个字符串截取原字符串
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】分隔,结果为列表
#flag:False或者不写,则表示忽略换行符;如果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)    将原字符串作为连接符号,将列表中的元素分别连接起来,结果为字符串,作用和split是相反的
str5 = "*"
list1 = ["shangsan","lisi","jack"]
print(str5.join(list1))
1.8替换

代码演示:

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

#使用场景:在一定情境下,可以实现字符串的简单加密,加密规则可以自定义
#maketrans()   创建字符映射的转换表,结果为字典,通过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()   如果字符串中至少包含一个字符并且所有的字符都是字母,才返回True
print("".isalpha())
print("abc".isalpha())
print("abc123".isalpha())   #False

#isalnum   如果字符串中至少包含一个字符并且所有字符都是字母或者数字的时候才返回True
print("".isalnum())   #False
print("abc".isalnum())
print("abc123".isalnum())
print("123".isalnum())
print("1abc".isalnum())
print("1abc¥".isalnum())  #False

#isupper  如果字符串中至少包含一个字符并且出现的字母必须是大写字母才返回True,数字的出现没有影响
print("".isupper())
print("aBC".isupper())
print("123A".isupper())   #True
print("abc".isupper())

#islower

#istitle   每个单词的首字母必须全部大写才返回True
print("Good Day".istitle())
print("good Day".istitle())

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

#需求:将用户从控制台输入的字符串转化为整型【全数字】
str = input()
if str.isdigit():
    int(str)
    print("yes")

1.10前缀和后缀

代码演示:

#11.前缀和后缀【掌握】  子字符串是连续的
#startswith
str1 = "helloPython"
print(str1.startswith("hello"))

#endswith
print(str1.endswith("on"))
1.11编解码

代码演示:

#12.字符串编码和解码
#注意:主要针对的是中文
#encode()   默认的编码格式为utf-8
str2 = "this is 千锋教育"
print(str2.encode())
print(str2.encode("utf-8"))
print(str2.encode("gbk"))

#decode()   bytes对象
#\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())    错误
1.12ASCII码转换

代码演示:

#13。ASCII吗的转换
#ord()
print(ord("A"))
print(ord("0"))

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

2.练习

需求一:

#需求1:统计下面字符串中每个单词的出现次数,并生成一个字典,单词为key,次数为value
"""
实现思路:
1.以空格为切割符切割字符串
2.遍历第一步中得到的list
3.将单词提取出来,去一个字典中判断
4.如果单词不存在,就以该单词作为key,1作为value存储到字典中
5.如果单词存在,将对应key的value递增1【修改指定key的value】
"""
str1 = "tomorrow is sunny day tomorrow is sunny day tomorrow is wind day"
dict1 = {}    #创建一个空字典,备用
list1 = str1.split(" ")    #切割字符串
#方式一:get()
"""
for word in list1:      #遍历列表
    value = dict1.get(word)    #None
    if value == None:
        dict1[word] = 1      #往字典中添加键值对
    else:
        dict1[word] += 1     #给字典中指定key的value修改值

print(dict1)
"""
#方式二:成员运算符
for word in list1:      #遍历列表
    if word not in dict1:
        dict1[word] = 1
    else:
        dict1[word] += 1
print(dict1)

需求二:


#需求2:从控制台输入一个字符串,表示时间,编写程序,获取这个时间的下一秒
#例如输入:12:23:33    输出12:23:34
"""
思路分析:
1.将字符串切割,得到时分秒的数据
2.得到时间的下一秒:给秒加1
3.12:23:59----》12:24:00    当秒数增加完之后为60的时候,分钟需要增加1,秒数应该置为0
4.12:59:59----》13:00:00   当分钟增加完之后为60的时候,时钟需要增加1,分钟置为0
5.当时钟增加完之后为24的时候,时钟置为0
"""
timeStr = input("请输入正确格式的时间:")

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:实现简单的购物车功能
"""
思路分析
1.引导用户选择商品【提供】
2.引导用户输入金额
3.加入购物车
4.查看购物车,计算余额
"""
product_list  = [
    ("Mac",10000),
    ("kindle",500),
    ("iphone x",8000),
    ("bike",3000)
]

saving = input("请输入金额:")

#定义一个列表,充当购物车
shopping_car  = []

#判断金额是否是数字
if saving.isdigit():
    #将saving转换为整数
    saving = int(saving)

    while True:
        #打印商品信息,提供给用户选择
        for index,p in enumerate(product_list):
            print(index,":",p)

        #引导用户选择商品
        choice = input("请输入商品的编号[输入q退出]:")

        #判断编号是否合法
        if choice.isdigit():
            choice = int(choice)

            if choice >= 0 and choice < len(product_list):
                #将用户选择的商品从product_list取出来
                item = product_list[choice]   #元组

                #item[0] :商品名称   item[1]:商品的价格
                if item[1] <= saving:

                    #saving减少
                    saving -= item[1]

                    #需要将商品添加到购物车对应的list中
                    shopping_car.append(item)

                else:
                    print("余额不足")

            else:
                print("不存在的编号")
        elif choice == "q":
            print("-------你已经购买如下商品:-------")
            for i in shopping_car:
                print(i)

            print("你还剩余%d元钱"%(saving))

            break
        else:
            print("不合法的编号")
else:
    print("invalid input")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,387评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,845评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,091评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,308评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,662评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,795评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,008评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,466评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,687评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,181评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,531评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,177评论 3 239
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,126评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,862评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,734评论 2 274

推荐阅读更多精彩内容