Python字符串切片及内建函数使用

# 复习字符串

# m ="abc"
# n ='abc'
# p = '''abc'''
#
# print(m is n)  # 比较 id
# print(m == n)  # 比较value
# print(m==p)
# print(m is p)

'''
# % 字符串的格式化占位符
name = "stevn"
print('%s说:%s' % (name, "好好学习!"))

# r 保留原格式,有r则不发生转义 没有r则发生转义(例如:\')
print(r"%s说:\'哈哈哈\'" % name)

# [ ]  [start:end:方向或者步长] 切片、取值
filename = "picture.png"
# 位置都是从零开始,位置也会称作“下标”,或者“索引”
print(filename[5])     # 通过[]可以结合位置获取字母 特点: 只能获取一个字母

# range(1,10) ----类似----> [1:10]
print(filename[0:7])  # 包头不包尾
print(filename[3:7])  # 截取字符串
print(filename[3:])   # 省略的是后面的,表示一直取到字符串的结尾
print(filename[:7])   # 省略的是前面的,表示从0开始取值

# 负数
print(filename[8:-1])  # 8是头,-1是尾,-1是g -1是逆序表示数字
print(filename[:-2])
print(filename[-1:])
print(filename[-5:-1])

# [::-1] 倒序 与 [:]相反 只能用-1表示倒序
print(filename[::-1])

str1 = "abcdefg"
print(str1[-1:-5:-1])
print("------>",str1[0:5:-1])    # 取不到值,因为-1表示倒序取值,那么从0开始往左没有字符串,所以取不到值
print(str1[5:0:-1])    # 能取到值,-1表示倒序,从第5个取到第0个,当然有值

print("------>",str1[5:0:1])

print(str1[:])

# 非-1的负数,在第二个冒号后面表示“倒序的步长”
print(str1[::-2])  # 倒序步长
print(str1[::2])   # 正序步长
'''

'''
# 字符串的内建函数:声明一个字符串,默认可以调用内建函数(系统准备好的一些函数)
# 第一部分: 大小写相关的
# capitalize(), 将字符串的第一个字符串转成大写的标识形式
# title(),      返回的是,每个单词的首字母大写的字符串(驼峰原则)  istitle.(),   返回的结果是布尔类型,True or False
# upper(),      将字符串征程全部大写的表示形式                   isupper(),
# lower(),      将大写全部转成小写                             islower(),
message = "zhaorui is a beautiful girl"
msg = message.capitalize()
print(msg)

msg = message.title()
print(msg)
result = msg.istitle()
print(result)
result = message.istitle()
print(result)

msg = message.upper()
print(msg)

result = msg.lower()
print(result)
'''

'''
# 案例: 产生验证码
s = "ABCDEFGHIJKLMNOPQRSTUVWXZYabcdefghijklmnopqrstuvwxyz1234567891"
print(len(s))
# 四个随机数
code = ""
import random
# IndexError: string index out of range, 例如 s = "abc", print(s[3]) 下标超范围会报错
# Index: 0~ len(s)-1  0~61

for i in range(4):
    ran = random.randint(0, len(s) - 1)
    code += s[ran]  # 连续拼接取得的字母或者数字4次

print("验证码:",code)

# 提示输入验证码
user_input = input("请输入验证码:")

if user_input.lower() == code.lower():
    print("验证码正确!")
else:
    print("验证码错误!")
'''


# 查找和替换字符串
# find(), rfind(), lfind(), index(), rindex(), lindex(), replace()
s1 = "index lucy lucky goods"
result = "r" in s1
print(result)

# find("要查找的字符",start,end)
position = s1.find("R")  # 返回值是-1,则表示没找到
print(position)
position = s1.find("l")
print(position)  # 如果可以找到,则返回字母第一次出现的位置
# p =s1.find("l", beg=position)  #  TypeError: find() takes no keyword arguments
p = s1.find("l", position + 1)  # 也符合包头不包尾原则,所以+1跳过第6位
# 可以从指定位置开始,到指定位置结束
p1 = s1.find("o", position + 1, len(s1) - 5)
print(p1)

# http://www.ahtcm.edu.cn/images/20/07/10/17ylf7mft3/list-bg.jpg

url = "http://www.ahtcm.edu.cn/images/20/07/10/17ylf7mft3/list-bg.jpg"
p2 = url.rfind("/")     # rfind:表示从右侧开始检索字符串"/"位置
filename = url[p2+1:]
print(filename)


'''
index(str, beg = 0, end = len(string))
跟find 方法一样,只不过如果str不在字符串时,index会报一个异常, 如下:
p = "hello".index("x")
print(p)
'''

# 替换 replace(old, new, max), max指替换的最大次数
'''
s1 = "index lucy lucky goods"

s2 = s1.replace(" ", "#")
print(s2)

s2 = s1.replace(" ", "")
print(s2)

s2 = s1.replace(" ", "#", 2)
print(s2)
'''


# 字符串内建函数: encode:编码    decode:解码
# 编码 网络应用 (中文一般涉及到编码,英文无需使用)
msg = "上课啦,认真听课!"
# gbk 中文  gb2312 简体中文  incode
result = msg.encode("utf-8")
print(result)

# 解码 用什么编码,就用什么解码
m = result.decode("utf-8")  # result 已经不是字符串,是b开头的一些被编码的字节,所以真正属于字符串的方法是endode()
print(m)

# 字符串内建函数:startswith()  endswith()  返回值都是布尔类型True or False
# startswith判断是否以xxx开头的,endswith判断是否以xxx结尾的
# 应用:文件上传功能  只能上传图片(jpg,png,bmp,gif)
filename = "笔记本.doc"
result = filename.endswith("doc")
print(result)

s = "hello"
result = s.startswith("he")
print(result)

# 文件上传功能  只能上传图片(jpg,png,bmp,gif)
path = input("请选择文件:")  # C:\roo\bar\desk_background.jpg
# 分析:要上传文件的路径path----> 文件名 ----> 通过文件名再判断是否图片类型
p = path.rfind("\\")   # 不能单用"\",这样系统会认为有转义字符,也不能用r'\'保留格式,都会报错,r'\tabc'斜杠后有字符串则不会报错。 通过rfind函数找到文件名位置
print(p)
filename = path[p+1:]  # 找到位置后切片,取出文件名
print(filename)
# 判断是否为图片格式
if filename.endswith("jpg") or filename.endswith("png") or filename.endswith("bmp") or filename.endswith("gif"):
    print("是图片文件,允许上传!")
else:
    print("不是图片格式,只能上传图片!")

# 练习:
# 给定一个路径,允许上传文件(记事本txt或者图片文件jpg、png等等)
# 如果不是对应格式,允许重新指定上传文件
# 如果符合规则,则提示上传成功
# 复习转义字符: \n 换行    \t 四个空格一个制表位   \r 回车    \' 保留单引号    \" 保留双引号    \\ 保留一根\  见177行解释
'''
while True:
    path = input("请选择文件:")  # C:\roo\bar\desk_background.jpg
    p = path.rfind("\\")
    filename = path[p+1:]

    if filename.endswith("jpg") or filename.endswith("png") or filename.endswith("txt"):
        print("是规定格式文件,上传成功!")
        break
    else:
        print("不是规定格式文件,请重新上传!")
'''

# isalpha() 判断是否是字母    isdigit() 判断是否是数字, 如下:
# s = "abcd6"
# result = s.isalpha()
# print('result = ', result)
#
# s = "8866"
# result = s.isdigit()
# print('result = ', result)

# 输入数字经常用,但一般会加判断是否是数字,才能int后进行运算,如下:
# sum = 0
# for i in range(3):
#     num = input("请输入一个数字:")  # 经常遇到输错,输入的不是数字,例如10输入成1o
#
#     if num.isdigit():
#         num = int(num)
#
#         sum += num
#
# print("sum = ", sum)
# 但是for已经固定三次循环,不论你输入正确还是错误,都循环三次,所以这样不合理,输错了判断出来应该不计入计算提示重新输入
# ,所以这个代码不好,用while循环代替,如下:
'''
sum = 0
i = 1
while i<=3:
    num = input("请输入一个数字:")  # 经常遇到输错,输入的不是数字,例如10输入成1o

    if num.isdigit():
        num = int(num)
        sum += num
        print("输入的是数字,第{}累加成功!".format(i))
        i += 1   # 如果输入的不是数字,则跳到else语句,i就不会加1,循环不会往前走
    else:
        print("输入的不是数字,请重新输入!")

print("sum = ", sum)
'''
'''
# join() : "-".join("abc")   将abc用-连接构成一个新的字符串
new_str = "-".join("abc")
print(new_str)    # 结果产生新的字符串:a-b-c

# python列表 list1 = ['a','v','e','o','9'] 数组
list1 = ['a','v','e','o','9']
result = "".join(list1)
print(result)

#  lstrip  rstrip strip
s = "     hello    "
# s = s.lstrip()    # 去除左侧空白
# print(s+"8")
# s = s.rstrip()    # 去除右侧空白
# print(s+"8")
s = s.strip()       # 同时出去两侧的空白
print(s+"6")

# split() 分割字符串,将分割后的字符串保存到列表中
s = "hello world hello kitty"
result = s.split(" ")   # 括号里的空格是切割的依据,表示遇到空格就切割
print(result)    # 切割结果:['hello', 'world', 'hello', 'kitty']
result = s.split(" ", 2)  # 括号里的数字表示分割的数量
print(result)

result = s.split("o")
print(result)    # 切割结果:['hell', ' w', 'rld hell', ' kitty']

# count(args) 求字符串里的args的个数
n = s.count(" ")   # 求s里空格的个数
print(n)

m = s.count("h")   # 求s里h的个数
print(m)
'''

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值