Python学习笔记(十五) python3内置函数的相关练习

举报
菜鸟级攻城狮 发表于 2021/06/14 22:36:37 2021/06/14
【摘要】 python3内置函数的相关练习

'''
第一部分:字符大小写相关
    capitalize()  title()  istitle()  

upper()  isupper()  lower()  islower()
'''

message = 'this is a string example...wow!'
msg = message.capitalize()      # 把字符串的字符大写
print(msg)

msg = message.title()           # 将所有单词字母都大写
print(msg)

result = msg.istitle()          # 判断一个字符串是否标题话,即所有单词字母是否大写,结果是布尔类型
print(result)

msg = message.upper()           # 将字符串所有字母转成大写
print(msg)

result = msg.lower()            # 将字符串所有字母转成小写
print(result)

'''
案例:生成验证码
'''

import random

s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
# print(len(s))     # 计算字符串长度函数,返回值是一个整型数值
code = ''   # 用一个空字符串变量存放生成后的验证码

# 循环4次,将4个不同的字符拼接后存放到code变量
for i in range(4):
    rand_num = random.randint(0, len(s) - 1)    # 所以范围应是(0, len(s) - 1),即0 - 61
    # print(rand_num)
    # print(s[rand_num])    # rand_num62时,下标越界,报错:IndexError: string index out of range

    code += s[rand_num]     # 将生成的字符拼接存放到变量code

print('验证码是:', code, sep = '')

# 用户信息输入
username = input('请输入用户名:')
password = input('请输入密码:')
user_input_code = input('请输入验证码:')

 

# 验证用户输入的信息
if username == 'admin' and password == '123456':
    if user_input_code.lower() == code.lower():     # 将验证码统一转成小写进行比较
        print('登陆成功!欢迎用户{}'.format(username))
    else:
        print('验证码输入错误,请重新输入:')
else:
    print('用户名或密码错误,请重新输入:')

'''
查找相关:
    find()  rfind()    index()  rindex()
    4者格式统一:string.find(str, beg=0, end=len(string))
'''
'''
find()函数:
    格式:string.find(str, beg=0, end=len(string))
    作用:检测 str 是否包含在 string 中,如果使用 beg  end 指定范围,则检查是否包含在指定范围内,如果在范围内,返回开始的索引值,否则返回-1
'''

s1 = 'this is a string example...wow!'
print('s1 --->', s1)

result = 'A' in s1      # in 只能返回TrueFalse,只能用于确定是否包含特定字符,不能确定其下标
print(result)

index = s1.find('A')    # -1表示没找到特定字符
print(index)

index = s1.find('i')    # 如果找到特定字符则返回第一次找到的字符所在下标
print('第一个i的下标:', index)

# find()格式:string.find(str, beg=0, end=len(string))
p = s1.find('i', index + 1)     # 可以指定开始查找的位置
print('第二个i的下标:', p)
p2 = s1.find('o', index + 1, len(s1) - 4)   # 也可以指定结束查找的位置
print('查找o的位置:', p2)

'''
rfind()小练习:
    https://www.baidu.com/img/bd_logo1.png
    1、获取文件名
    2、获取扩展名
'''

url = 'https://www.baidu.com/img/bd_logo1.png'

index = url.rfind('/')          # right find,从右侧检索/的位置
print(index)
file_name = url[index + 1 : ]   # 获取文件名bd_logo1.png
print(file_name)

index2 = url.rfind('.')         # 从右侧检索.的位置
print(index2)
expanded_name = url[index2 : ]  # 获取扩展名.png
print(expanded_name)

 

# 或者

filename = url[url.rfind('/') + 1:]  # # 获取文件名bd_logo1.png
print(filename)                      
expanded_name = url[url.rfind('.'):] # 获取扩展名.png
print(expanded_name)


'''
index()函数:
    格式:string.index(str, beg=0, end=len(string))
    作用:跟find()方法一样,只不过如果str不在 string中会报一个异常.
'''

# index()格式:string.index(str, beg=0, end=len(string))
index3 = 'hello'.index('x')     # 没有找到,报异常ValueError: substring not found
print(index3)

'''
替换相关:
replace()
    格式:string.replace(str1, str2,  num=string.count(str1))
    作用:把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num .
'''

s1 = 'this is a string example...wow!'
s2 = s1.replace(' ', '#')
print(s2)

s3 = s1.replace(' ', '', 3)     # 指定替换3
print(s3)

'''
编码与解码相关:
encode()  编码    
    格式:string.encode(encoding='UTF-8', errors='strict')
    作用:以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
decode()  解码    
    格式:string.decode(encoding='UTF-8', errors='strict')
    作用:以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 除非 errors  'ignore' 'replace'
应用场景:
    网络应用,中文一般会设计编码问题
'''

msg = '上课啦!认真听课!'   # 中文的字符串

# gbk:中文  gb2312:简体中文  unicode  utf-8unicode的升级版,国际通用
msg_encode = msg.encode('utf-8')            # 讲中文字符串以utf-8格式编码,默认是utf-8,可不写
print(msg_encode)                           # 编码后成为字节对象

#b'\xe4\xb8\x8a\xe8\xaf\xbe\xe5\x95\xa6\xef\xbc\x81\xe8\xae\xa4\xe7\x9c\x9f\xe5\x90\xac\xe8\xae\xb2\xef\xbc\x81'



msg_decode = msg_encode.decode('utf-8')     # 将字节对象以utf-8格式解码,默认是utf-8,可省略不写
print(msg_decode)

 

'''
检查字符串开头结尾相关:
startswith()    
    格式:string.startswith(obj, beg=0, end=len(string))
    作用:检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg  end 指定值,则在指定范围内检查.
endswith()      
    格式:string.endswith(obj, beg=0, end=len(string))
    作用:检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
    
    两者返回值类型为布尔类型TrueFalse
    
应用场景:
    文件上传,限定只能上传图片(jpg, png, gif, bmp)
'''

s = 'hello'

result = s.startswith('H')
print(result)
result2 = s.startswith('he')
print(result2)

print('-------------------')

file_name = '笔记.doc'

result = file_name.endswith('txt')
print(result)
result2 = file_name.endswith('.doc')
print(result2)

'''
小案例:完成文件上传的验证功能,限定只能上传图片(jpg, png, bmp, gif)
    1、给定一个路径,上传文件
    2、如果不是对应的格式,允许重新指定上传文件
    3、如果符合上传的规定则提示上传成功
'''

while True:
    path = input('请选择要上传的文件:')      # 获取路径D:\picture\desk_background.jpg
    index = path.rfind('\\')        # 获取文件名下标
    file_name = path[index + 1 :]   # 截取文件名
    # print(index, file_name)
    # 判断是否是图片类型,使用正则表达式会更简洁

    if file_name.endswith('.jpg') or file_name.endswith('.png') or file_name.endswith('.gif'):
        print('是图片,允许上传,上传成功!')
        break
    else:
        print('格式错误,只允许上传图片,上传失败')

 

'''
判断字符串是字母还是数字:
isalpha()
    格式:string.isalpha()
    作用:如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
isdigit()
    格式:string.isdigit()
    作用:如果 string 只包含数字则返回 True 否则返回 False.

isalnum()
    格式:string.isalnum()
    作用:如果string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
'''

s = 'abcde'
result = s.isalpha()
print(result)

s2 = 'abcde56'
result2 = s2.isalpha()
print(result2)

print(s2.isalnum())     # True

d = '6688'
result = d.isdigit()
print(result)

d2 = '6688ee'
result2 = d2.isdigit()
print(result2)

print(d2.isalnum())     # True

'''
小练习:输入3个数,相加求和
    1、判断输入的是否是数字
    2、判断输入的是正数还是负数
    3、强转为int后求和
'''

i = 1
sum = 0

while i <= 3:
    num = input('请输入第{}个数:'.format(i))

    if num.startswith('-'):     # 负数情况
        num = num.replace('-', '')
        if num.isdigit():
            sum -= int(num)
            print('负数:第{}个数字累加成功!'.format(i))
            i += 1
            print('sum =', sum)
            continue    # 累加成功,跳过本次循环,继续下次循环输入
        else:
            print('不是数字,请重新输入。')
    elif num.isdigit():     # 正数情况
        sum += int(num)
        print('正数:第{}个数字累加成功!'.format(i))
        i += 1
        print('sum =', sum)
        continue
    else:
        print('不是数字,请重新输入')


print('最终结果sum =', sum)

'''
join()函数:
    格式:string.join(seq)
    作用:以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
    示例:'-'.join('abc')     abc-连接构成一个新的字符串
'''

new_str = '-'.join('abc')
print(new_str)

# join()函数用途:字符串拼接,比+号更灵活,可指定拼接符
list1 = ['a', 'v', 'o', '9']
result = ''.join(list1)     # 使用空字符拼接列表内容
print(result)

result = ' '.join(list1)    # 使用空格拼接列表内容
print(result)

 

'''
strip()
    格式:string.strip([obj])
    作用:在 string 上执行 lstrip() rstrip()
lstrip()
    格式:string.lstrip()
    作用:截掉 string 字符串左边的空格及tab
rstrip()
    格式:string.rstrip()
    作用:删除 string 字符串右边的空格及tab
'''

s = '    hello    '

s = s.strip()
print(s + '8')      # 添加一个8方便观察

s = s.lstrip()
print(s + '8')

s = s.rstrip()
print(s + '8')

 

'''
split()
    格式:string.split(str="", num=string.count(str))
    作用:以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串
'''

s = 'hello world hello python'
print('原字符串:', s, '\n')

result = s.split(' ')       # 以空格作为分割符,将切割后的个体字符串保存到列表中
print(result)

n = s.count(' ')    # 计算字符串s中空格的个数
print('字符串s中的空格个数:', n)

result = s.split(' ', 2)    # 以空格作为分割符,切割两次,将切割后的个体字符串保存到列表中
print(result)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。