# 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("您的输入有误,请检查后重新输入")
01-17
376
09-21
4584
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交