py语法07-字符串的操作

# encoding=utf-8
"""
1、定义
(1)就是由0~多个字符组成的,以引号包围的,不可修改的有序序列
(2)引号包含的一串字符,使用引号引起来的内容就是字符串,可以使用单引号、双引号或三引号
(3)不可修改:字符串中的内容一旦定义后就不能修改
(4)有序序列:成员(字符)有序排列,可通过下标访问
(5)字符串一定是有序的,是不可变的数据类型,不可修改
(6)声明方法:一对单引号''、一对双引号""、三对单引号''' '''、三对双引号"" ""
2、查找方法
(1)字符串.find(char,start,end):返回从左开始第一个指定字符的索引值,没找到返回-1
(2)字符串.rfind(char,start,end):返回从右开始第一个指定字符的索引值,没找到返回-1
(3)字符串.index(char,start,end):返回从左开始第一个指定字符的索引值, 没有找到报错ValueError
(4)字符串.rindex(char,start,end):返回从右开始第一个指定字符的索引值, 没有找到报错ValueError
(5)字符串.count(char):计数,返回指定字符在字符串中的个数
(6)字符串.encode(encoding):以指定的编码格式编码字符串
    A、str用于展示
    B、byte用于传输
    C、encode:编码,将字符串转换成字节码str-->byte
    D、decode:解码,将字节码转换成字符串byte-->str
    E、utf-8:英文占1个字节,中文占3个字节
    F、gbk:英文占1个字节,中文占2个字节
    G、转义字符:改变原有字符的意义,\特定字符
    H、原生字符:任意字符串之前添加字母r或者R
3、替换方法
(1)字符串.replace(旧,新,次数):按照指定次数替换字符串中的旧数据替换成新数据
(2)字符串.replace(旧,新):默认全部替换字符串中的旧数据替换成新数据
(3)字符串.maketrans(原字符,替换字符-个数相同):制作一个替换关系(字典)
(4)字符串.translate(trans):使用制作的替换关系替换字符串数据
4、拆分方法
(1)字符串.partition(子串):从左到右将字符串按照子串前后固定切割成三部分,返回元组类型
(2)字符串.rpartition(子串):从右到左将字符串按照子串前后固定切割成三部分,返回元组类型
(3)字符串.splitlines():将字符串按照换行符分隔,返回一个列表
(4)字符串.split(符号):按照给定符号切割字符串,默认空格、空行、制表符分隔,返回一个列表;可设置maxsplit指定切割次数
(5)字符串.rsplit(符号):通过指定分隔符对字符串进行拆分,默认空格、空行、制表符分隔,返回一个列表;可设置maxsplit指定切割次数
(6)符号.join(可迭代数据):将可迭代数据按照符号拼接成一个字符串
5、修饰方法
(1)字符串.center(num):将字符串按照给定的数目居中展示,默认按照空格填充,可设置填充字符
(2)字符串.ljust(num):将字符串按照给定的数目左对齐展示,默认按照空格填充,可设置填充字符
(3)字符串.rjust(num):将字符串按照给定的数目右对齐展示,默认按照空格填充,可设置填充字符
(4)字符串.zfill(num):将字符串填充到指定的字符长度,不足用0从左侧开始填充
(5)字符串.strip(字符):从字符串两端去除所给字符各个元素的内容,注意必须从两头开始去除,字符空时默认删除两边空格
(6)字符串.rstrip(字符):删除右边数据,从字符串右边去除所给字符各个元素的内容
(7)字符串.lstrip(字符):删除左边元素,从字符串左边去除所给字符各个元素的内容
6、变形方法
(1)字符串.upper():将字符串中的字母大写
(2)字符串.lower():将字符串中的字母小写
(3)字符串.swapcase():将字符串中的字母大小写互换
(4)字符串.title():将字符串中的单词首字母大写,其他字母小写
(5)字符串.capitalize():将字符串的首字母大写,其他字母小写
(6)字符串.expandtabs:将特殊字符串(\t)转换成空格,默认8个空格,可以设置转化的空格数目
(7)字符串.casefold():所有字母的小写,只转换ASCII字母
7、判断方法
(1)字符串.isalnum():判断字符串是否完全由字母或数字组成
(2)字符串.isalpha():判断字符串是否完全由字母组成
(3)字符串.isdigit():判断字符串是否完全由数字组成
(4)字符串.isupper():判断字符串当中的字母是否完全是大写
(5)字符串.islower():判断字符串当中的字母是否完全是小写
(6)字符串.istitle():判断字符串是否满足title 格式
(7)字符串.isspace():判断字符串是否完全由空格组成
(8)字符串.startswith():判断字符串的开头字符,也可以截取判断
(9)字符串.endswith():判断字符串的结尾字符,也可以截取判断
(10)字符串.isascii():判断字符串是否为ascii码
(11)字符串.isdecimal():判断字符是否只包含十进制字符串-二进制0b、八进制0o、十六进制0x
(12)字符串.isidentifier():判断字符串变量名是否合法
(13)字符串.isnumeric():判断字符串是否只由数字组成
(14)字符串.isprintable():判断是否为可打印字符串
8、%占位
(1)d-数值:给int类型的数据占位
(2)f-浮点数:给float类型的数据占位
    A、保留小数点后一位:%.1f或%.f
    B、保留小数点后两位:%.2f
(3)s-字符串:给str类型的数据占位
(4)当只有一个填充数据时,数据可以不使用括号包含
    {}.f(无参-不指定位置)
    {1}:{0}.f('无参-指定位置',1)
    {n}.f(**字典)
    {n}.f(n=数据)
    {0[0]}:{0[1]}.format(列表)
    {:.2f}.format(小数)
    {:.nf}—小数n位
    {:+.nf}—符号小数n位
    {:.n%}—百分制小数n位
    {:0>5d}—数字补零(右对齐)
    {:a<5d}—数字补a(左对齐)
    {:,}—逗号分隔数字
    {:.2e}—指数小数2位
    {:^10d}—中间对齐
9、位置赋值
(1){}{}.format(数据1,数据2):按照位置先后将数据1、数据2填入到对应位置的{}占位中
(2)占位的数目和和给定的数据数目必须一致
10、编号赋值
(1){1}{0}.format(数据1,数据2):按照标号将数据1、数据2填入到对应位置的{}占位中
(2)注意编号索引不可比数据个数大,编号和不编号不和混用
11、关键字赋值
(1){参数名}{参数名}.format(参数名=参数值):按照关键字名将对应数据填入到对应位置的{}占位中
(2)给定的参数个数可以不使用,但是不能没有
12、f-string格式化
(1)可以直接通过f{}的方式给位置填充数据
(2)可以直接填充数据,也可以填充变量
13、填充格式化
(1)格式:[填充字符][对齐方式<^>][宽度].[保留位数]
(2)对齐方式:<表示向左对齐,^表示居中对齐,>表示向右对齐
(3)按照填充字符、对齐方式为数据拓展为指定宽度的格式数据,保留指定的小数位数--保留方式使用四舍五入规则
(4)str{}.format(char)):字符串格式化
(5)字符串.format_map(dct):字符串格式化,只操作字典【字符串.format_map({'name':'杜迅','age':24})】
"""
import os
import time
import string
import hashlib

# 使用引号包含的数据就是字符串
sr1 = "   字符:~!@#$%^&*()-+字符ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789   字符串   大家庭中的一员   @@@@@"
sr2 = sr1.encode('utf-8')
sr3 = sr1.encode('gbk')
sr4 = sr2.decode(encoding="utf8")
sr5 = sr3.decode(encoding="gbk")

# 查找方法
# 字符串.find(子串)从左向右查询子串在字符串第一次出现的正向索引,不在字符串中返回-1
print("字符串.find(子串):从左向右查询子串,在字符串第一次出现的正向索引:", sr1.find("我"))
print("字符串.find(子串):从左向右查询子串,不在字符串中返回-1:", sr1.find("我们"))
# 字符串.rfind(子串)从右向左查询子串第一次出现的正向索引,不在字符串中返回-1
print("字符串.rfind(子串):从右向左查询子串,在字符串第一次出现的正向索引:", sr1.rfind("家庭"))
print("字符串.rfind(子串):从右向左查询子串,不在字符串中返回-1:", sr1.rfind("家中"))
# 字符串.index(子串)从左到右查询子串第一次出现的正向索引,不在字符串中则报错
print("字符串.index(子串):从左到右查询子串,在字符串第一次出现的正向索引:", sr1.index("字符"))
print("字符串.index(子串):从左到右查询子串,不在字符串中则报错")
# print(sr1.index("字符啊"))
# 字符串.rindex(子串)从右到左查询子串第一次出现的正向索引,不在字符串中则报错
print("字符串.rindex(子串):从右到左查询子串,在字符串第一次出现的正向索引:", sr1.rindex("字符"))
print("字符串.rindex(子串):从右到左查询子串,不在字符串中则报错")
# print(sr1.rindex("字符啊"))
# 字符串.count(子串)查询指定子串在字符串中出现的次数
print("字符串.count(子串):查询指定子串在字符串中出现的次数:", sr1.count("字符"))

# 替换
# 字符串.replace(旧数据,新数据,次数):将字符串中的旧数据替换成新数据,指定替换的次数,次数超过包含的数量时会全部替换
# 替换字符,指定替换次数
print("字符串.replace(旧,新,次数):按照指定次数替换字符串中的旧数据替换成新数据:", sr1.replace("   ", " ", 2))
# 替换字符,默认全部替换
print("字符串.replace(旧,新,次数):默认全部替换字符串中的旧数据替换成新数据:", sr1.replace("   ", " "))
# 按照对应的关系替换字符串
# 明确替换关系, 制作一个替换关系
print("使用str.maketrans(旧,新)制作一个替换关系:", "".maketrans(' ', '@'))
trans = "".maketrans(' ', '@')
# 使用替换关系函数进行替换
print("使用制作的替换关系替换字符串数据:", sr1.translate(trans))

# 拆分
# 字符串.partition(子串)从左到右将字符串按照子串前后固定切割成三部分,返回元组类型
print("字符串.partition(子串):从左到右将字符串固定切割成三部分,返回一个元组:", sr1.partition("字符串"))
# 字符串.rpartition(子串)从右到左将字符串按照子串前后固定切割成三部分,返回元组类型
print("字符串.rpartition(子串):从右到左将字符串固定切割成三部分,返回一个元组:", sr1.rpartition("字符串"))
# 字符串.splitlines()将字符串按照换行符分隔,返回一个列表
print("字符串.splitlines():将字符串按照换行符分隔,返回一个列表:", sr1.splitlines())
# 字符串.split(符号)按照给定符号切割字符串,默认空格、空行、制表符分隔,返回一个列表;可设置maxsplit指定切割次数
print("字符串.split(符号):按照给定符号切割字符串,默认空格、空行、制表符分隔,返回一个列表:", sr1.split())
print("字符串.split(符号,maxsplit):可设置maxsplit指定切割次数:", sr1.split("   ", maxsplit=1))
print("字符串.rsplit(符号):从右向左按照给定符号切割字符串,默认空格、空行、制表符分隔,返回一个列表:", sr1.rsplit())
print("字符串.rsplit(符号,maxsplit):从右向左切割字符串,可设置maxsplit指定切割次数:", sr1.rsplit("   ", maxsplit=1))
# 连接字符串
print("符号.join(可迭代数据):将可迭代数据按照符号拼接成一个字符串:", ",".join(['Brazil', 'Russia', 'India', 'China']))

# 修饰
# 字符串.center(num)将字符串按照给定的数目居中展示,默认按照空格填充,可设置填充字符
print("字符串.center(num):将字符串按照给定的数目居中展示,默认按照空格填充:", sr1.center(40))
print("字符串.center(num):将字符串按照给定的数目居中展示,可设置填充字符:", sr1.center(40, "-"))
# 字符串.ljust(num)将字符串按照给定的数目左对齐展示,默认按照空格填充,可设置填充字符
print("字符串.ljust(num):将字符串按照给定的数目左对齐展示,默认按照空格填充:", sr1.ljust(40))
print("字符串.ljust(num):将字符串按照给定的数目左对齐展示,可设置填充字符:", sr1.ljust(40, "~"))
# 字符串.rjust(num)将字符串按照给定的数目右对齐展示,默认按照空格填充,可设置填充字符
print("字符串.rjust(num):将字符串按照给定的数目右对齐展示,默认按照空格填充:", sr1.rjust(40))
print("字符串.rjust(num):将字符串按照给定的数目右对齐展示,可设置填充字符:", sr1.rjust(40, "·"))
# 字符串.zfill(num)将字符串填充到指定的字符长度,不足用0从左侧开始填充
print("字符串.zfill(num):将字符串填充到指定的字符长度,不足用0从左侧开始填充:", sr1.zfill(40))
# strip参数表示去除所给字符各个元素的内容,注意必须从两头开始去除
print("字符串.strip():从字符串两端去除所给字符各个元素的内容,默认删除空格:", sr1.strip())
print("字符串.strip():从字符串两端去除所给字符各个元素的内容,可以删除各个元素:", sr1.strip("@ "))
# 删除右边元素
print("字符串.rstrip():从字符串右边去除所给字符各个元素的内容:", sr1.rstrip("@ "))
# 删除左边元素
print("字符串.lstrip():从字符串左边去除所给字符各个元素的内容:", sr1.lstrip("@ "))

# 变形
print("字符串.upper()将字符串中的字母大写:", sr1.upper())
print("字符串.lower()将字符串中的字母小写:", sr1.lower())
print("字符串.swapcase()将字符串中的字母大小写互换:", sr1.swapcase())
print("字符串.title()将字符串中的单词首字母大写,其他字母小写:", sr1.title())
print("字符串.capitalize()将字符串的首字母大写,其他字母小写:", sr1.capitalize())
# \t转化,默认8个空格
print("\\t默认8个空格\t".expandtabs())
# \t转化,转化为给定数目的空格
print("\\t指定5个空格\t".expandtabs(5))
# 判断
print("字符串.isalnum():判断字符串是否完全由字母或数字组成:", sr1.isalnum())
print("字符串.isalpha():判断字符串是否完全由字母组成:", sr1.isalpha())
print("字符串.isdigit():判断字符串是否完全由数字组成:", sr1.isdigit())
print("字符串.isupper():判断字符串当中的字母是否完全是大写:", sr1.isupper())
print("字符串.islower():判断字符串当中的字母是否完全是小写:", sr1.islower())
print("字符串.istitle():判断字符串是否满足title格式:", sr1.istitle())
print("字符串.isspace():判断字符串是否完全由空格组成:", sr1.isspace())
print("字符串.startswith(str):判断字符串的开头字符:", sr1.startswith("字符"))
print("字符串.startswith(str,start,end):截取判断片段字符串的开头字符:", sr1.startswith("字符", 16, 25))
print("字符串.endswith():判断字符串的结尾字符,也可以截取判断:", sr1.endswith("字符"))

# 字符串转义
print(f"原有字符串:{sr1},数据类型:{type(sr1)}")
# 编码数据
print(f"utf-8编码:{sr2},数据类型:{type(sr2)}")
print(f"gbk编码:{sr3},数据类型:{type(sr3)}")
# 解码数据
print(f"utf-8解码:{sr4},数据类型:{type(sr4)}")
print(f"gbk编码:{sr5},数据类型:{type(sr5)}")
# 转义:将字符以原本形式的语义输出
# 直接输出
print("直接输出数据,符号有特殊意义:", "这是数据\t这段数据有点。。。")
# 转义输出
print("转义输出数据:", "这是数据\\t这段数据优点。。。")
# 特殊字符输出
print("换行符直接输出:\\n")
print("制表符直接输出:\\t")
print("反斜杠知己恩输出:\\")
# 直接输出'数据--会看做半个单引号
# 'tom's 电话号码是:110'
print("直接输出'数据--会看做半个单引号")
# 转义输出'数据
print("转义输出'数据:", 'tom\'s 电话号码是:110')
# 双引号输出
# "我说:"你好吗?""
print("转义双引号输出:", "我说:\"你好吗?\"")
# r阻止转义:保留字符串中每个字符最原始的意义
print(r"我要输出制表符:\t")
print(r"我要输出双引号\"你好啊\"")

# %占位
# 数值填充
print("%d * %d = %d" % (2, 3, 6))
# 自我介绍:姓名小米,年龄18,使用字符串格式化将内容输出到控制台
name = "小米"
print("我叫%s,今年%d岁" % (name, 24))
# 只有一个占位符时, 此括号可以省略
print('我最大的愿望是:%s' % '发大财')
# 乘法算式
print('%d * %d = %d' % (106, 9, 106 * 9))
# 除法算式
print('%d / %d = %f' % (333, 17, 333 / 17))
print('%d / %d = %.3f' % (333, 17, 333 / 17))
# format位置参数
# 位置赋值
print("{}.format(参数):位置参数给字符串空缺部位赋值:", "我叫{},今年{}岁了".format("杜迅", 20))
print('我的名字是{},{}是一个温柔美丽漂亮大方的女孩'.format('李雪', '李雪'))
# 编号赋值
print("{1}{0}.format(参数1,参数2):为位置参数标号,按照序号为空缺部位赋值:", "我叫{0},{0},{0},{1}岁了".format("杜迅", 20))
print('我的名字是{0},{0}是一个温柔美丽漂亮大方的女孩'.format('李雪'))
# 关键字赋值
print("{参数名}.format(参数名=参数值):关键字参数按照对应参数名给字符串空缺部位赋值:", "我叫{name},今年{age}岁了".format(name="杜迅", age=20))
print('我女神的名字是:{name}, 年龄是:{age}, 男友是:{friend}'.format(name='李雪', age=18, friend='王思聪'))
# f-string可以直接为空缺部位赋值
name = "杜迅"
print(f"我叫{name},{20}岁了")
iden = "学生"
print(f"我们都是{'好'}{iden}")
# 填充与格式化
print("{:$>10} * {:#<3} = {}".format(5, 2, 10))
print('我的姓名是:{:~^4}, 我现任男神的名字是:{:*<4}'.format('李雪', '李现'))
# 将字符串填充长度为10, 右对齐, 填充字符为p
print('我喜欢{:p>10}'.format('python'))
# 精度控制
print("{:#^10.2f}".format(2.34246546))
print('2除以3保留小数点后2位的结果是:{:.2f}'.format(2 / 3))
# 将十进制数转换为二进制
print('将十进制数4转换为二进制的结果是:{:b}'.format(4))
# 将十进制数转换为八进制
print('将十进制数9转换为八进制的结果是:{:o}'.format(9))
# 将十进制数转换为十六进制
print('将十进制数10转换为十六进制的结果是:{:x}'.format(10))
# 查看方法、说明
print("查看字符串的所有方法:", dir(str))
print("查看函数的说明文档:", help(str.isdigit))

# 求列表中每个字符串的首字母大写组成的新列表:str.capitalize有参数有返回值
print("列表中每个字符串的首字母大写组成的新列表:", list(map(str.capitalize, ["python", "i", "love", "you"])))

# 统计大写字母的个数,小写字母的个数,非字母的个数
big_num = small_num = not_alpha = 0
# 大写字母   小写字母      非字母
for c in sr4:
    if c.isupper():
        big_num += 1
    elif c.islower():
        small_num += 1
    else:
        not_alpha += 1
print(f"大写字母个数为:{big_num},小写字母个数:{small_num},非字母个数:{not_alpha}")

# 数据过长,截断显示
# 打印全部原始数据,导致界面上空间不足,展示数据出现混乱
# 将数据截取一部分[切片],在界面上打印提示数据,点击”查看更多”查看隐藏部分
data = "大家好,我叫杜迅,现就读于北京中公五方桥教育基地,正在进行python全栈学习"
if (len(data) > 30):
    info = f"{data[:29]}..."
else:
    info = data
print("数据截断显示:",info)


# 转义换行
print("我是杜迅, \
我爱python")
num_list = [1, 2, 3]
for i in num_list:
    print(i)
    if (i > 1) or (1 > i) \
            or (2 < i):
        print("if 中的代码")

# 未知路径长度的文件地址的查找
urls = r"C:/Users/yg/Desktop/笔记/my_header.jpg"
print("文件完整路径:", urls)
path = urls.split("/")[:-1]
print("文件目录路径:", path)
file = urls.split("/")[-1]
print("文件名称:", file)
# 获取最后一个/符号出现的位置
m = urls.rindex("/")
print("rindex查找图片名称:", urls[m + 1:])
n = urls.rfind("/")
print("rfind查找图片名称:", urls[n + 1:])
# 获取图片的后缀名
p = urls.rindex(".")
print("rindex查找图片后缀名:", urls[p:])
q = urls.rfind(".")
print("rfind查找图片后缀名:", urls[q:])

# 敏感词替换
introduct = "Py是一种计算机程序设计语言,可以视之为一种改良的LISP。Python的设计哲学强调代码的可读性和简洁的语法。Python让开发者能够用更少的代码表达想法。Python是一种解释型脚本语言,Python语言诞生至今,已被逐渐广泛应用于系统管理任务的处理和Web编程。Python的创始人为Guido van Rossum。Python是从ABC发展起来。Python已经成为最受欢迎的程序设计语言之一。Python的使用率呈线性增长。Python语言的简洁性、易读性以及可扩展性。Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。Python在设计上坚持了清晰划一的风格,Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。Python的作者有意的设计限制性很强的语法。Python的缩进规则。Python确实使得程序更加清晰和美观。Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其绝大多数扩展库。Python是一门更易学、更严谨的程序设计语言。Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。Python的设计哲学是“优雅”、“明确”、“简单”。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。在Python解释器内运行import this可以获得完整的列表。Python是完全面向对象的语言。Python支持重载运算符和动态类型。Python可被粗略地分类为“脚本语言”(script language)。Python的支持者较喜欢称它为一种高级动态编程语言。Python本身被设计为可扩充的。Python提供了丰富的API和工具。Python编译器本身可以被集成到其它需要脚本语言的程序内。Python作为一种“胶水语言”(glue language)使用。"
# 查询关键词第一次出现的位置
print("find查找关键词的位置:", introduct.find("Python"))
# 替换关键词
introduction = introduct.replace("Python", "******")
print(introduction)

# 敏感词查询:判断字符串中,是否包含指定敏感数据
# index / find / rindex / rfind
introduce = "白衣执甲,新冠肺炎滚出中国"
# 判断字符串中是否包含关键词
print("index查找--返回位置:", introduce.index("肺炎"))
# print("index查找不到--报错:",introduce.index("肺0炎"))
print("find查找--返回位置:", introduce.find("肺炎"))
print("find查找不到--返回-1:", introduce.find("肺0炎"))

# 要求输出字符串最少一个最多八个的所有组合(向后连续字母)
sr5 = "ABCDEFGH"
for x in range(0, len(sr5)):  # 0 ~ 10 遍历出来切片的start  [start::]
    for y in range(x + 1, x + 9):  # 8 遍历获取stop值
        if y > len(sr5):  # 如果stop结束值 > 字符串的长度
            break  # 结束内层循环
        print(sr5[x:y:])

# 加密解密,通常后台存储的密码都是加密后保存的:maketrans制作密码表;translate加密
# 加密字典映射关系表
connect1 = {"a": "1", "b": "2", "c": "3"}
# 制作加密密码表
table1 = str.maketrans(connect1)
# 明文密码
exist1 = "abc"
# 加密:使用密码表 table1 加密
encrypt1 = exist1.translate(table1)
print("明文:", exist1, "; 加密后的密文:", encrypt1)
# --------------------------------------
# 解密字典映射关系表
connect2 = {"1": "a", "2": "b", "3": "c"}
# 制作解密密码表
table2 = str.maketrans(connect2)
# 密文密码
encrypt2 = encrypt1
# 解密:使用密码表 table2 解密
exist2 = encrypt2.translate(table2)
print("密码:", encrypt2, "; 解密后:", exist2)

# string方式制作密码表,进行密码加密、解密
# 真密码
password_t = string.ascii_letters + string.digits
# 假密码
password_f = string.digits + string.ascii_letters
# 真-->假
table_t = str.maketrans(password_t, password_f)
# 假-->真
table_f = str.maketrans(password_f, password_t)
pass1 = input("请输入您的密码:")
# 通过对应关系,加密密码
pass2 = pass1.translate(table_t)
print(f"密码加密:{pass2}")
# 通过对应关系,解密密码
pass3 = pass2.translate(table_f)
print(f"密码解密:{pass3}")

# 制作映射表并替换字符串中内容:制作用于字符串替换的映射表【字符串名.maketrans(‘查找字符’,‘替换字符’)】,返回一个字典(一一对应的ASCII码值)
trans = str.maketrans('abcdefg', 'ABCDEFG')
print(trans)
# 字符串替换:按照映射表替换字符串【字符串名:translate(映射表)】,返回替换完成的字符串
data = 'i am a little boy , but oneday became the man .'
print("数据加密:",data.translate(trans))

# 用户登陆
username = input("请输入登陆账号:")
password = input("请输入登陆密码:")
print(f"加密前的密码:{password}")
# 密码加密存储
result = hashlib.md5(password.encode("UTF-8")).hexdigest()
print(f"加密后的密码:{result}")  #
# 使用加密的数据,和存储的用户密码进行比较    判断账号和密码是否正确
if username == '杜迅':
    if result == '202cb962ac59075b964b07152d234b70':
        print("登陆成功")
    else:
        print("密码有误,登陆失败")
else:
    print("账号有误,登陆失败")

# 字符串的占位符
# 占位符中填充一个字符数据
name = "杜迅"
print("我的姓名是:%s" % name)
# 占位符中填充多个字符数据
name = "杜迅"
sex = "男"
age = 24
print("我的姓名是:%s,性别是:%s,年龄是:%d" % (name, sex, age))
# 格式化输出
name = "杜迅"
# 直接输出
print("我的姓名是:%s" % name)
# 占位输出,默认右对齐
print("我的姓名是:%8s" % name)
# 占位输出,左对齐
print("我的姓名是:%-8s" % name)
age = 24
# 占位输出,空白0补齐----s不能用
print("我的年龄是:%08d" % age)
height = 1.666666
# 输出小数
print("我的身高是:%f" % height)
# 占位输出
print("我的身高是:%10f" % height)
# 保留两位小数,占位输出
print("我的身高是:%10.2f" % height)
# 保留两位小数,占位输出,用0补齐
print("我的身高是:%010.2f" % height)

# 拼接网址
base_url = "https://www.tuchong.com/car/index_{i}.html"
for j in range(5):
    if j == 0:
        url = "https://www.tuchong.com/car/index.html"
    else:
        url = base_url.format(i=j)
    # print("https://www.tuchong.com/car/index_{}.html".format(j))
    print(url)

# 练习:自我介绍,姓名小米,年龄 18, 身高1.75米,体重70kg,目前的学习进度为80%。使用字符串格式化将内容输出到控制台
name = "小米"
age = 18
height = 1.75
weight = 70
print("我叫%s,我今年%d,我的身高是%.2f,我的体重是%d,学习进度是%d%%" % (name, age, height, weight, 80))

# 2 给占位符起名字
m4 = "{num1}*{num2}={value}"  # ValueError
print(m4.format(5, 2, 10))
print(m4.format(num2=5, num1=2, value=10))
print(m4.format(num2=5, value=10, num1=2, ))

# 3 填充与格式化
# 格式: :[填充字符][对齐方式 <^>][最小宽度]
# < 表示向左对齐, ^表示居中对齐, >表示向右对齐
m = "{:$>10}*{:#<3}={}"
print(m.format(5, 2, 10))

# 4 精度控制
# 字符串长度为10位,居中对齐,不够用# 填充,小数点后保留两位
print("{:#^10.2f}".format(2.34246546))
print("{:#^10.2f}".format(2.34946546))  # 四舍五入规则

# f-string
m = "{2}*{3}={6}"
m2 = f"{6}*{3}={18}"
num = 100
num2 = 55
print(m)
print(m2)
print(f"{num}*{num2}={num * num2}")

# 打印九九乘法表对比
for i in range(1, 10):
    for j in range(1, i + 1):
        # print(j,"*",i,"=",i*j,end='\t') # 不使用格式化
        # print("%d*%d=%d"%(j,i,i*j),end='\t')  # 使用%方式
        # print("{}*{}={}".format(j,i,i*j),end='\t') # 使用format形式
        print(f"{j}*{i}={i * j}", end='\t')  # 使用f-string形式
    print()

# 展示菜单
# 进度条的函数
def progress_bar():
    print("跳转中,请稍等~~")
    for i in range(11):
        if i != 10:
            print("==", end="")
        else:
            os.system("cls")
        time.sleep(0.1)
    print()

# 存放用户信息的字典
users_dict = {
    "a": {"nickname": "dudu", "realname": "杜迅", "password": "a", "gender": "男", "age": 18,
          "QQEmail": "3477960883@qq.com", "phone": 18810629376, "course": [], "role": "学生"},
    "d": {"password": "a", "role": "管理员"}
}
courses_list = ["Python", "java", "web", "unity", "UI"]
progress_bar()
print("加载完成,进入系统。。。")
os.system("cls")
while True:
    # 进入系统展示登录/注册
    print("~~~~~~~~~~欢迎来到学生选课系统~~~~~~~~~~~~")
    print("          本系统现有以下功能")
    print("            1  注册")
    print("            2  登录")
    print("            3  退出")
    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    # 用户输入选择
    num = input("请选择输入标号:")
    # 注册页面
    if num == "1":
        print("~~~~~~~~欢迎来到选课系统~~注册页面~~~~~~~~")
        print("            1  继续注册")
        print("            2  返回选择")
        print("            3  退出系统")
        print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
        choice = input("请输入您的选择编号:")
        if choice == "1":
            while True:
                print("~~~~~~~~欢迎来到选课系统~~注册页面~~~~~~~~")
                u_name = input("请输入您的用户名:")
                u_psd = input("请输入您的密码:")
                d_psd = input("请确认您的密码:")
                if u_name in users_dict:
                    print("该用户已存在,请更换用户名~")
                    continue
                else:
                    print("检测中,请稍等~")
                    if len(u_name) < 3:
                        print("用户名至少3位,请检查后重新输入!")
                        continue
                if u_psd == d_psd:
                    if len(u_psd) < 6:
                        print("密码至少6位,请重新注册~")
                        continue
                    else:
                        if u_psd.isdigit():
                            print("密码不能全部由数字组成,请检查后重新输入~")
                            continue
                        else:
                            print("密码符合注册规则,注册中,请稍等~")
                            users_dict[u_name] = {"password": u_psd, "role": "学生"}
                            print(users_dict)
                            progress_bar()
                            print("注册完成!")
                            os.system("cls")
                            break
                else:
                    print("两次密码不一致,请检查后重新输入~")
                    continue
        elif choice == "2":
            print("正在跳转,请稍等~")
            progress_bar()
        elif choice == "3":
            print("正在退出系统,请稍等~")
            progress_bar()
            exit()
        else:
            print("输入有误,正在跳转上级菜单,请稍等~")
    # 登录界面
    elif num == "2":
        while True:
            # 展示登录界面
            print("~~~~~~欢迎来到学生选课系统~~登录页面~~~~~~")
            print("            1  学生登录")
            print("            2  管理员登录")
            print("            3  返回选择")
            print("            4  退出系统")
            print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
            choose = input("请输入您的选择:")
            if choose == "1":
                username = input("请输入您的用户名:")
                password = input("请输入您的密码:")
                if username not in users_dict:
                    print("您输入的用户名不存在,请先注册!!!")
                    break
                if users_dict[username]["role"] == "管理员":
                    print("这是管理员账号,请使用管理员登录~")
                    continue
                else:
                    if password != users_dict[username]["password"]:
                        print("您的用户名或密码有误,请重新输入!!!")
                        continue
                    print("登录成功~正在跳转首页菜单,请等候~")
                    progress_bar()
                    while True:
                        print("~~~~~~欢迎来到学生选课系统~~首页页面[学]~~~~~~")
                        print("            1  查看已选课程")
                        print("            2  选择课程")
                        print("            3  退选课程")
                        print("            4  学习课程")
                        print("            5  修改密码")
                        print("            6  完善资料")
                        print("            7  修改资料")
                        print("            8  退出系统")
                        print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
                        ch = input("请输入您的选择:")
                        if ch == "1":
                            courses = users_dict[username]["course"]
                            if courses == []:
                                print("请先选择课程")
                                input("任意键继续")
                                continue
                            else:
                                print("################################")
                                print("您已选的课程有:")
                                for number, course in enumerate(courses, start=1):
                                    print(f"{number}>>>>{course}")
                                print("################################")
                                input("查看完毕,任意键继续~")
                        elif ch == "2":
                            print("################################")
                            for number, course in enumerate(courses_list, start=1):
                                print(f"         {number}>>>>{course}")
                            print("################################")
                            course_num = int(input("请输入你要选择的课程编号:"))
                            if courses_list[course_num - 1] not in users_dict[username]["course"]:
                                users_dict[username]["course"].append(courses_list[course_num - 1])
                                print("课程已添加")
                                continue
                            else:
                                print("你已选择该课程~")
                                continue
                        elif ch == "3":
                            courses = users_dict[username]["course"]
                            if courses == []:
                                print("请先选择课程")
                                input("任意键继续")
                                continue
                            else:
                                print("################################")
                                print("您已选的课程有:")
                                for number, course in enumerate(courses, start=1):
                                    print(f"         {number}>>>>{course}")
                                print("################################")
                                n = int(input("请输入您要退选的课程编号:"))
                                if n > number:
                                    print("您的输入有误!")
                                else:
                                    users_dict[username]["course"].remove(courses[n - 1])
                                    print("退选成功!")
                                continue
                        elif ch == "4":
                            courses = users_dict[username]["course"]
                            if courses == []:
                                print("请先选择课程")
                                input("任意键继续")
                                continue
                            else:
                                print("################################")
                                print("您已选的课程有:")
                                for number, course in enumerate(courses, start=1):
                                    print(f"         {number}>>>>{course}")
                                print("################################")
                                n = int(input("请输入您要学习的课程编号:"))
                                if n > number:
                                    print("您的输入有误!")
                                else:
                                    users_dict[username]["course"].remove(courses[n - 1])
                                    print("学习完成!")
                                continue
                        elif ch == "5":
                            print("功能正在完善中,请稍后再来~~")
                            continue
                        elif ch == "6":
                            print("功能正在完善中,请稍后再来~~")
                            continue
                        elif ch == "7":
                            print("功能正在完善中,请稍后再来~~")
                            continue
                        elif ch == "8":
                            print("即将退出系统,请稍等~~")
                            progress_bar()
                            exit()
                        else:
                            print("功能正在完善中,请稍后再来~~")
                            continue
            elif choose == "2":
                username = input("请输入您的用户名:")
                password = input("请输入您的密码:")
                if username not in users_dict:
                    print("您的账号不存在,请先注册!!!")
                    progress_bar()
                    break
                elif users_dict[username]["role"] != "管理员":
                    print("这不是管理员账号,无法登录~")
                    progress_bar()
                    continue
                elif password == users_dict[username]["password"]:
                    print("登录成功~正在跳转首页菜单,请等候~")
                    progress_bar()
                while True:
                    print("~~~~~~欢迎来到学生选课系统~~首页页面[管]~~~~~~")
                    print("            1  查看课程")
                    print("            2  查看学生")
                    print("            3  增加课程")
                    print("            4  删除课程")
                    print("            5  删除学生")
                    print("            6  退出系统")
                    print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
                    ch = input("请输入您的选择:")
                    if ch == "1":
                        print("################################")
                        print("现已有课程有:")
                        for number, course in enumerate(courses_list, start=1):
                            print(f"{number}>>>>{course}")
                        print("################################")
                        input("查看完毕,任意键继续~")
                        progress_bar()
                    elif ch == "2":
                        print("################################")
                        print("现已有学生有:")
                        for number, user in enumerate(users_dict, start=1):
                            if users_dict[user]["role"] == "学生":
                                print(f"         {number}>>>>{user}")
                        print("################################")
                        input("查看完毕,任意键继续~")
                        progress_bar()
                        continue
                    elif ch == "3":
                        print("################################")
                        print("现已有课程有:")
                        for number, course in enumerate(courses_list, start=1):
                            print(f"{number}>>>>{course}")
                        print("################################")
                        course_name = input("请输入您要添加的课程名称:")
                        if course_name in courses_list:
                            print("课程已存在,添加失败")
                        else:
                            courses_list.append(course_name)
                            print("课程添加完毕")
                        input("任意键继续~")
                        progress_bar()
                        continue
                    elif ch == "4":
                        print("################################")
                        print("现已有课程有:")
                        for number, course in enumerate(courses_list, start=1):
                            print(f"{number}>>>>{course}")
                        print("################################")
                        nu = int(input("请输入您要删除的课程编号:"))
                        courses_list.pop(nu)
                        print("课程已删除")
                        input("任意键继续~")
                        progress_bar()
                        continue
                    elif ch == "5":
                        print("################################")
                        print("现已有学生有:")
                        for number, user in enumerate(users_dict, start=1):
                            if users_dict[user]["role"] == "学生":
                                print(f"         {number}>>>>{user}")
                        print("################################")
                        name = input("请输入您要删除的学生姓名:")
                        if name in users_dict:
                            users_dict.pop(name)
                            print(f"已成功删除学生{name}的信息")
                        else:
                            print(f"{name}不在名单中,请检查输入!!")
                        input("任意键继续")
                        progress_bar()
                        continue
                    elif ch == "6":
                        print("即将退出系统,请稍等~~")
                        progress_bar()
                        exit()
                    else:
                        print("功能正在完善中,请稍后再来~~")
                        input("任意键继续~")
                        progress_bar()
                        continue
            elif choose == "3":
                print("即将返回上级,请稍等~")
                progress_bar()
                break
            elif choose == "4":
                print("正在退出系统,请稍等~")
                progress_bar()
                exit()
            else:
                print("没有这个选项,请重新选择~~")
    # 退出界面
    elif num == "3":
        print("即将退出系统,请稍等。。。")
        progress_bar()
        exit()
    # 输入的不是1、2、3
    else:
        print("您的输入有误,请检查后重新输入")
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值