str字符串常用功能+python函数

一 字符串常用

1.1转换

代码演示:

#1.转换
#1.1字符串和整数之间的转换 :eval(xx);将字符串xx转换为有效的表达式
#str() int()
num1 = eval("123")
print(num1,type(num1))
num2 = int("123")
print(num2,type(num2))

#+和-可以被int()识别,只能出现在字符串的第一个字符
print(eval("+123"))
print(int("+123"))
print(eval("-123"))
print(int("-123"))

#+和-出现在字符串的中间字符位置,eval可以转换为有效的表达式计算出结果,但是int直接报错
print(eval("12+3"))
#print(int("12+3"))  #ValueError: invalid literal for int() with base 10: '12+3'
print(eval("12-3"))
#print(int("12-3"))  #ValueError: invalid literal for int() with base 10: '123'

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


#1.2大小写字母转换
str1 = "today Is A Good DAY"
#lower() :将大写字母转换为小写
print(str1.lower())

#upper():j将小写字母转换为大写
print(str1.upper())

#swapcase():大转小,小转大
print(str1.swapcase())

#capitalize():首个单词的首字母大写,其他字母小写
print(str1.capitalize())

#title():将每个单词的首字母大写
print(str1.title())

1.2填充

代码演示:

#2.填充
#center(width[,fillchar]):获取一个指定长度的的字符串,原字符串居中显示,
# 两边使用指定的字符进行填充,如果没有指定字符,则默认使用空格填充
str1 = "hello"
print(str1.center(20))
print(str1.center(20,"*"))


#ljust(width[,fillchar])  left,原字符串居左显示
print(str1.ljust(20))
print(str1.ljust(20,"*"))


#rjustwidth[,fillchar])  right,原字符串居右显示
print(str1.rjust(20))
print(str1.rjust(20,"*"))  #TypeError: The fill character must be exactly one character long

#注意;上面三个功能填充的时候,只能有一个字符


#zfill(width):获取一个指定长度的字符串,原字符串居右显示的,前面剩余的部分用0填充
print(str1.zfill(40))
1.3查找

代码演示:

#3.查找
str1 = "abcdefghhello123456"
#find(str[,start,end])  从左往右进行检测原字符串,str 是否在原字符串中,也可以指定查找的范围 
#注意:返回从左往右查找匹配到的第一个子字符串的位置,如果查找不到,则返回-1
print(str1.find("e"))   #4
print(str1.find("hello"))
print(str1.find("e",5,10))
print(str1.find("yyyy"))

#rfind()
print(str1.rfind("e"))   #9

print("**********")

#index()  ,和find的用法基本相同,区别:如果查找不到,find返回-1,index则直接报错 
print(str1.index("e"))   #4
print(str1.index("hello"))
print(str1.index("e",5,10))
#print(str1.index("yyyy"))  #ValueError: substring not found


#rindex
print(str1.rindex("e"))  #9

#max()
print(max([10,54,54,5])) #list
print(max(10,43,65,65)) #number
print(max("hello"))  #字典中的顺序或者ASCII码

#min()
print(min([10,54,54,5])) #list
print(min(10,43,65,65)) #number
print(min("hello"))  #字典中的顺序或者ASCII码
1.4提取

代码演示:

#4.提取
#strip(str):以str作为条件提取字符串,除了两头指定的字符串【去除一个字符串两头的指定字符】     trim
str1 = "************today is ****** a ****good day**********"
print(str1.strip("*"))


#lstrip()
print(str1.lstrip("*"))


#rstrip()
print(str1.rstrip("*"))
1.5分割和合并

列表和字符串之间的转换

代码演示:

#5.分隔和合并
#字符串-----》列表
#split(str[,num])  分隔,将str作为分隔符分隔元字符串,【结果为一个列表】,如果指定了num则表示仅使用num和字符串分隔
#注意:目前,字符串中的split只能分隔具有一定规律的字符串
str1 = "today is a good day"
print(str1.split(" "))
print(str1.split(" ",3))

#练习:将str1中每个单词的首字母改为大写,不能使用title()

str2 = "zhangsan@lisi@jack"
print(str2.split("@"))


#列表------》字符串
#join(list):将指定的字符串作为连接符,将列表中的元素连接起来,得到一个新的字符串,作用和split相反
list1 = ['today', 'is', 'a', 'good', 'day']
str3 = "123"
newStr = str3.join(list1)
print(newStr)



#splitlines(flag) 按照换行符【\n,\r,\r\n】分隔,结果为列表
#flag:可以省略或者赋值为False,则表示忽略换行符,如果True,则表示保留换行符
str4 = '''today
is
a
good
day
'''
print(str4.splitlines())
print(str4.splitlines(True))
1.6替换和字符串映射

代码演示:

#6.替换
#replace(old,new[,max])
"""
使用新的字符串替换掉原字符串,而且可以指定替换的最大次数
注意;默认替换原字符串中所有的子字符串
"""
str1 = "today is a good good good day"
print(str1.replace("good","bad"))
print(str1.replace("good","nice",2))


#7.字符串映射
#maketrans():创建一个字符映射的关系表
#参数;第一个:表示需要转换字符串   第二个:表示转换的目标字符串
#得到的结果为一个字典,字典中的键值对就是映射关系
table = str.maketrans("abc","%#@")
print(table)        #{97: 54, 99: 56}

#translate(table)
str2 = "today is a good day"
print(str2.translate(table))  #tod%y is % good d%y
1.7判断

代码演示:

#8.判断
#isalpha():如果一个字符串非空并且所有的字符都为字母,则返回True
print("".isalpha())
print("abc".isalpha())
print("abc123".isalpha())

print("*********")

#isalnum():如果一个字符串非空并且所有的字符都为字母或者数字,则返回True
print("".isalnum())
print("abc".isalnum())
print("abc123".isalnum())

print("*********")

#isupper():如果一个字符串中出现的字母全部是大写的话,则返回True
print("a".isupper())
print("Abc".isupper())
print("ABC".isupper())
print("ABC123".isupper())


#islower()如果一个字符串中出现的字母全部是小写的话,则返回True


#istitle():结合title()的用法,将一个字符串中每个单词的首字母大写【通过空格区分】
print("this is".istitle())
print("This is".istitle())
print("This Is".istitle())

#isdigit()  【掌握】判断一个字符串是否是由全数字组成的
print("abc".isdigit())
print("123".isdigit())
print("abc1234".isdigit())

#应用:int()
while True:
    num = input("请输入一个数字:")

    if num.isdigit():
        num = int(num)
        print(type(num))
        break
    else:
        print("输入有误,请重新输入")

print("*******")

#isnumeric(),类似与isdigit的用法
print("abc".isnumeric())
print("123".isnumeric())
print("abc1234".isnumeric())


#isdecimal():检测字符串是否只包含十进制字符[字符串中是否只包含0~9的数字]
print("4324".isdecimal())
print("4324abc".isdecimal())

#isspace():检测字符串中是否只包含空格
print(" ".isspace())
print("fh".isspace())
print("f h ".isspace())


#isXxxx    hasXxxx;判断,结果为布尔值

1.8前缀和后缀

代码演示:

#9.前缀和后缀
#前缀一定包含,但是包含不一定是前缀
url = "http://www.baidu.com"

#startswith(subStr,start,end):判断subStr是否是指定字符串的前缀
print(url.startswith("http"))

#endswith(subStr):判断subStr是否是指定字符串的后缀
print(url.endswith("com"))

1.9编解码

代码演示:

#10.字符串的编码和解码
"""
https://www.baidu.com/s?wd=%E5%8D%83%E9%94%8B&rsv_spt=1&rsv_iqid=0xb8e5907d00014e93&issp=1
"""
#%E5%8D%83%E9%94%8B
#encode():编码,将字符串类型-----》字节类型
s1 = "this is 千锋"
s2 = s1.encode("utf-8")  #b'this is \xe5\x8d\x83\xe9\x94\x8b'
s3 = s1.encode("gbk")  #b'this is \xc7\xa7\xb7\xe6'
print(s2)
print(s3)
print(type(s2),type(s3))


#decode():解码,将字节类型------》字符串
s4 = s2.decode("utf-8")
s5 = s3.decode("gbk")
print(s4,s5)
print(type(s4),type(s5))

#注意:编码和解码的类型必须一致
#encode是字符串的功能,decode是bytes的功能
1.10ASCII码转换

代码演示:

#chr():将编码转换为字符串
print(chr(65))
print(chr(48))

#ord():将字符串转换为编码
print(ord("e"))
print(ord("2"))

#需求:将hello转换为大写
s1 = "hello"
#定义一个空字符串,用于拼接最后得到的结果
s2 = ""

#遍历字符串,将每个字符获取出来
for c in s1:
    #将其转换为ASCII表中的数值
    num = ord(c)
    #将num-32获取的对应的小写字母在ASCII码表中的数值
    num -= 32
    #将减之后的结果转换为字符串
    s2 += chr(num)

print(s2)
1.11掌握的功能
转换:int()  str()   title()   capitalize()
填充:center()
提取:strip()
查找:find()  index()
分割和合并:split和join
替换:replace()
判断:isdigit()
前缀和后缀:startswith()   endswith()

2.做一个简单的购物车

代码演示:

#1.从控制台输入一句英文,判断每个单词出现的次数
str1 = "hello today is a good day hello today is a nice day"
"""
实现思路:
1.使用空格作为分隔符将字符串分割,得到的结果为list
2.遍历list,将单词从列表中提取出来
3.将获取的单词到一个字典中去判断
4.如果单词不存在,则以单词作为key,1作为value添加到字典中;如果单词已经存在,将该单词的value递增1
"""
list1 = str1.split(" ")

#方式一:成员运算符
dict1 = {}
for word in list1:
    if word not in dict1:
        dict1[word] = 1
    else:
        dict1[word] += 1
print(dict1)

#方式二:get()
dict2 = {}
for word in list1:
    value = dict2.get(word)
    if value == None:
        dict2[word] = 1
    else:
        dict2[word] += 1
print(dict2)


#2.获取指定时间的下一秒
"""
11:45:45----->11:45:46
11:45:59----->11:46:00
11:59:59-----》12:00:00
23:59:59-----》00:00:00

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("%d:%.2d:%.2d" % (h,m,s))
"""


#3.实现简单的购物车功能
"""
a.引导用户选择商品
b.引导用户输入金钱
c.加入购物车
d.查看购物车,计算余额
"""
#商品列表
productList = [("book",50),("kindle",500),("iphone xs",10000),("自行车",888)]
#购物车
shoppingCar = []

#引导用户输入金额
saving = input("请输入金额:")

if saving.isdigit():
    #将savin转换为整型
    saving = int(saving)

    #并不是添加一件商品就结束
    while True:
        #打印商品信息,提供给用户进行选择
        for i,p in enumerate(productList):
            print(i,":",p)

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

        if choice.isdigit():
            choice = int(choice)

            #检验编号的正确性
            if choice >= 0 and choice <= len(productList) - 1:
                #根据用户输入的编号从productList中获取商品
                item = productList[choice]   #item是一个元组

                #item[0]:商品名称  item[1]:商品价格
                #判断用户的余额够不够
                if saving >= item[1]:

                    #减少用户的余额
                    saving -= item[1]

                    #将商品添加到购物车中
                    shoppingCar.append(item)

                else:
                    print("余额不足")

            else:
                print("该商品不存在")
        elif choice == "q":
            print("-----购物车中有如下商品------")
            for i in shoppingCar:
                print(i)

            print("还剩下%d钱" % (saving))

            #退出循环,停止购买
            break

        else:
            print("编号输入有误")
else:
    print("输入有误")

二、函数

1.概述

案例

#需求:半径分别为r1 = 10,r2 = 13,r3 = 20,求圆的面积
r1 = 10
s1 = 3.14 * r1 ** 2

r2 = 13
s2 = 3.14 * r2 ** 2

r3 = 20
s3 = 3.14 * r3 ** 2


#使用函数进行优化
def area(radius):
  s = 3.14 * radius *2
  
area(10)

在实际的项目开发中,某些功能会被反复使用,哪么可以将该功能对应的代码封装起来,封装成函数,当需要再次使用该功能时,不需要再次书写相应的代码,只需要使用函数

本质:对某个特殊功能的封装

优点:

​ a.简化代码结构,提高代码的可读性和可维护性

​ b.方便使用某些特殊的功能,被当做工具使用

注意:函数也被称为方法

2.使用

函数的定义

语法:

def 函数名(参数1,参数2.。。。):

​ 函数体

​ return 返回值

说明:

1.一个完整的函数由两部分组成:函数的声明部分和实现部分

2.def:definition,定义,函数使用def关键字定义

3.函数名:标识符,只需要遵循标识符的规则和规范即可

4.(参数1,参数2.。。。):()表示参数的开始和结束,被称为参数列表【形式参数列表,简称形参】,本质上其实就是一个个变量,当然,形参列表也可以为空【根据具体的需求决定】

5.函数体:需要被封装的特殊功能

6.return 返回值:return关键字用于结束函数,并且将后面的返回值返回给调用者

​ 返回值:变量,常量,表达式等,返回值也可以被省略

设计一个函数:两个要素

参数:需求里面有没有未知项参与运算

返回值:函数运行结束之后需要将结果在后面的代码中执行

2.1简单的函数

无参无返回值的函数

代码演示:

#定义无参无返回值的函数
def myPrint():
    print("hello")

#注意:函数被定义完成之后,不会自动执行,需要手动执行,这个过程被称为函数的调用
"""
调用格式:函数名(实际参数,简称实参)
说明:
a.出现在函数声明部分的参数被称为形式参数,简称形参,本质是一个变量
b.出现在函数调用部分的参数被称为实际参数,简称实参,本质是一个数据【常量,带有值的变量】
c.形参和实参之间的关系:形参 = 实参
d.函数的调用实际上是传参的过程:实参给形参赋值的过程

注意:
a.进行传参的时候,实参和形参需要进行匹配【数量和类型】
b.如果形参为空,则调用函数的时候,实参也不需要写,但是()不能省略
"""

myPrint()
myPrint()
myPrint()
myPrint()
myPrint()


#注意:在同一个py文件中,如果出现同名的函数,则后出现的会覆盖掉先出现的【类似于变量的重新赋值】
def myPrint():
    print("hello~~~~~~")

myPrint()
2.2函数的调用

代码演示:

#函数的调用
def show1():
    print("show~~~1")
    num = 10
    print(num)   #10

def show2():
    print("show~~~2")
    show1()

def show3():
    print("show~~~3")
    show2()
    print("over")


show3()

#函数的函数体部分可以调用其他的函数,注意函数的调用顺序
#函数入栈和出栈

#在函数内部定义的变量,在函数的外部无法访问,因为没有访问权限【函数被调用完成之后会出栈】
#print(num)

#注意:函数之间尽量不要相互调用,或者函数尽量不要自己调用自己
"""
def fun1():
    print("func1")
    fun2()

"""
def fun2():
    print("fun2")
    fun2()

fun2()
2.3函数的参数

代码演示:

#1
#定义一个有参数的函数
def myFunc(name,age):
    print(name,age)

#传参
#注意1;形参的类型取决于实参的类型【Python是动态类型的语言】
myFunc("zhangsan",10)   #name = "zhangsan"  age = 10

#2
def myFunc(name,age):
    age += 1
    print(name,age)

#注意2:传参的过程中,一定要保证实参和形参的一一匹配【顺序,类型,数量】
myFunc("lisi",18)


#需求:求1~某个数之间的偶数
def fun(num):
    for i in range(1,num + 1):
        if i % 2 == 0:
            print(i)

fun(100)
fun(1000)

#需求;比较任意两个数的大小
def compare(num1,num2):
    if num1 > num2:
        print(num1)
    elif num1 < num2:
        print(num2)
    else:
        print("相等")

compare(10,20)
compile(34,67)

猜你喜欢

转载自blog.csdn.net/herogxw4/article/details/88779054