截至正则表达式等高级部分,从1开始记录学习python的历程(之前学过一遍,都忘记了)
# n = 3
# m = 2
# print("m+n=", m + n)
# print("********")
# print("+ hello Python")
# print("/")
#
# import math
# print(math.sqrt(10))
# from math import *
# print(sqrt(8))
# print(bin(20)) #二进制
# print(oct(20)) #八进制
# print(hex(20)) #十六进制
#
# print(int("10100",2))
# print(int("24",8))
# print(int("14",16))
#格式化输出
# x = 13.1415926
# y = 1314520
# print(format(x,'0.2f'))
# print(format(x,'>12.3f')) #12个字符长度向右对齐,保留三位小数
# print(format(x,'0>12.2f'),format(x,'>12.1f'))
# print(format(x,'^12.2f')) #居中
# print(format(y,',')) #每千位以 , 隔开 千,百万
# print(format(y,'e')) #科学记数法
#格式化输出 多行注释
'''
name = input("请输入姓名:")
age = int(input("请输入年龄:"))
salary = float(input("请输入收入:"))
print("姓名:",name,"年龄",age,"收入",format(salary,','))
'''
# 转移字符 \
# print('Let\'s go ',"\" \我是转义字符\"")
# 不转义
#转字符串
# print(str(123))
# print("你好\n强月城")
# print(repr("你好\n强月城"))
# print(r"你好\n强月城")
# print("你好\\h强月城")
'''
print("你好\\h强月城")
'''
#长字符串
'''
print("""
你好
Python
我是
强月城
""")
print("hello\
word")
'''
# print("a","b","c",sep="*",end="")
# print("取消换行")
# if 判断
# x = 3;
# if x>=3:
# print("大于等于3")
# if x==4:
# print("等于4")
# elif x<10:
# print("不等于4且小于10")
# else:
# print("小于3")
#
# print("结束判断")
# 断言
# a = 30
# assert a<10 or a>20
# print("--**--")
# 循环
# i = 1
# while i<=10:
# print(i)
# i+=1;
# char = ["123","456","789","abc"]
# for s in char:
# print(format(s))
#
# for i in range(1,11):
# print(i)
# import random
# for i in range(1,20):
# print(random.randint(1,20)) #包括1 20
# import math
# i = int(input("请输入一个奇数:"))
# j = math.floor(i/2)+1
# z = 1+2*(j-1)
# print(j)
# for a in range(0,j):
# x = 1 + 2 * (a)
# y = (j)-a
# for c in range(0,y):
# print(" ",end="")
# for b in range(0,x):
# print("*", end="")
# print()
# for a in range(1,j):
# x = z-(a)*2
# for c in range(0,a+1):
# print(" ",end="")
# for b in range(0,x):
# print("*", end="")
# print()
# -----------*********序列**********--------------------
# a = ["a",1,True]
# b = ["b",2,False]
# c = ["c",3,["d",4]]
# e = [a,b,c]
# for val in e:
# print(val)
# print(a[2])
# a = "hello qyc"
# # 第一个 倒数第一个
# # print(a[1])
# # print(a[-1])
# print(a[2:7]) #区间 不包括索引7
# print(a[2:]) #省略结尾
# print(a[:5]) #省略开始
# print(a[0::2]) #指定步长
# print(a[::-1]) #倒序 起始要大于结尾 步长不能为0
#
# b = [10]*10
# print(b)
# c = [1,2,3,4,5,6]
# print(2 in c) #判断值是否在序列
# d = [["qyc","123456"],["qy","123"],"qc","12"]
# username = input("用户名:")
# password = input("密码:")
# if([username,password] in d):
# print("登陆成功")
# else:
# print("登陆失败")
# e = [1,2,3,4,5,6,7,8,9]
# # print(len(e)) 求序列长度
# del e[3] 删除元素
# print(e)
#分片赋值
# s = ["abc","def","ghi","jkl"]
# print(s)
# s[1:] = ["qyc","ssg"]
# print(s)
# name = list("qyc") #把字符串转换成字符组成的列表
# print(name)
# name[1:] = list("ssg")
# print(name)
# a = [1,2,3,4,6]
# a.append(6)
# print(a)
# a.append([6,7,8,9]) #在后面添加数据
# print(a)
#
# b = a.copy() #拷贝
# print(b)
#
# print(a.count(6)) #出现次数
#
# a.extend(b) #改变a表
# print(a)
#
# print(a.index(2)) #计算索引位置
#
# a.insert(2,10) #插入
# print(a)
#
# #弹出
# a.pop()
# print(a)
# a.pop(0)
# print(a)
#
# a.clear() #清除序列
# print(a)
# a = [5,8,4,1,9,6,7,3]
# a.sort()
# print(a)
# a.sort(reverse=True) #降序排序
# print(a)
#
# b = "asdjkjasdih" #对任何序列进行排序
# c = sorted(b)
# print(c)
#
# d = ["a","d","e","c"]
# f = sorted(d)
# print(f)
# # for i in range(1,10):
# # print(i)
# --------********元组********------------
# 与序列的区别:元组是只读的,不能修改 ( , ) 内建方法返回值为元组,在映射中作为键值使用
# value = tuple([1,2,3]) #序列替换成元组 tuple函数
# print(value)
#练习
# a = []
# while(1):
# b = input("请输入一个整数:")
# if b == "end":
# break
# a.append(b)
# print(a)
# a = [1,5,4,2,3]
# b = [10,9,8]
#
# b.extend(list(a[1:3]))
# b.sort(reverse=True)
# print(b)
#反转序列
# a = int(input("请输入一个整数:"))
# b = 1
# c = []
# for i in range(1,a+1):
# d = []
# for j in range(1,a+1):
# d.append(b)
# b = b+1
# c.append(d)
#
# for n in range(0,a):
# print(c[n])
#
# for k in range(0,a):
# for l in range(k,a):
# if k != l:
# print(c[k][l])
# m = c[k][l]
# c[k][l] = c[l][k]
# c[l][k] = m
#
# for n in range(0,a):
# print(c[n])
# ---------------********字符串********------------
#格式化
# a = "你好%s,我是%s!!!"
# values = ("python","强月城")
# print(a % values)
# from math import pi
# b = "圆周率Π为:%.4f(保留%d位有效数字)"
# values = (pi,4)
# print(b % values)
# c = "及格率%d%%" #当传入的参数的数量与格式化参数的数量不匹配是报错
# values = (60)
# print(c % values)
# 模板字符串
# from string import Template
# tem = Template("$val很简单,$name很喜欢!")
# print(tem.substitute(val='python',name='强月城'))
# data = {} #字典
# data['val'] = "java"
# data['name'] = "qyc"
# print(tem.substitute(data))
#
# a = Template("$money$$美元")
# b = Template("${s}substitute")
# print(a.substitute(money = 20))
# print(b.substitute(s = "qyc"))
#format方法
# a = "{}是一种高级的面向对象编程语言,{}正在学习"
# b = "{lange}是一种高级的面向对象编程语言,{name}正在学习"
# print(a.format("python","qyc"))
# print(b.format(name = "qyc",lange = "python"))
# import math
# c = "{mod.__name__} is {mod.pi}"
# print(c.format(mod = math))
# 3.141592653589793
# 原样输出/通过repr输出/Unicode码输出
# s = "{val:s} {val!r} {val!a}" r a 要加! 其他加: b o x 2 8 16 %
# print(s.format(val = "强月城"))
#
# print("{num:10}".format(num=10))
# from math import pi
# print("{pi:.2f}".format(pi = pi))
# print("{pi:10.2f}".format(pi = pi))
# print("{name:.2}".format(name = "强月城"))
# print("{num:,}".format(num = 10**100))
#
# print("{num:02}".format(num = 4)) 02 的意思是 补0 长度为2
# print("{num:*^20}".format(num = "强月城")) < ^ > 左 中 右
# print("{0:#=10.2f}".format(-2.5)) -#####2.50
# print("{:#b}".format(8))
# print("{0:=^10.2f}".format(-3.1415)) # ==-3.14===
# print("{0:*=10.2f}".format(-3.1415)) # -*****3.14
# 字符串函数
# print("强月城".center(10,"*")) #***强月城****
# print("abcdefg".find("c")) 从0开始 索引 2
# print("abcdefg".find("h")) -1 未找到
# print("hello word".find("o",5,8)) 索引 第二个参数为开始 包括,第三个参数为结尾 不包括
# join方法用于连接序列中的元素,是split的逆方法
# s = ["c","user","log"]
# a = '','c','d','f'''
# c = "/"
# d = "\\"
# print(c.join(s)) #join必须是字符串
# print(d.join(s))
# print(d.join(a))
# split拆分成序列
# s = "a/b/c/d"
# print(s.split("/")) # split无参数代表为空格
# import string
# print("HEllo".lower())
# print("HEllo".upper())
# print(string.capwords("HEllo word")) Hello Word
# print("hello qyc".replace("qyc","强月城")) 替换
# print(" qyc ".strip()) 截取前后空格
# print("****&&& q*y&c ***&&".strip(" *&")) q*y&c
# translate maketrans 替换单个字符
# s = "i love python and java"
# table = s.maketrans("ao","*#"," ") #第三个参数为删掉指定字符
# print(s.translate(table))
# 练习
# a = ""
# while(1):
# a = input("请输入字符串:")
# if (a == "end"):
# break
# b = input("请输入要统计的字符串")
# a = a.replace(" ","")
# print(a)
# b = a.replace(b,"")
# c = len(a)-len(b)
# print(c)
#
# a = int(input("请输入一个数:"))
# b = 1+2*(a-1)
# for i in range(1,a+1):
# c = "*"*(1+2*(i-1))
# # print(c.center(b))
# print("{val:^{num}}".format(val=c,num=b))
# a = [["name","qyc"],["age","22"],("sex","man")]
# a = dict(a)
# b = {"name":"qyc","age":22,"sex":"man"}
# print(b)
# print(a)
# print(len(a))
# print(b["age"])
# del b["age"]
# print(b)
# print("sex" in b)
#
# e = {}
# f = []
# while True:
# c = input("key:")
# if c == "end":
# break
# d = input("value:")
#
# f.append([c,d])
# e = dict(f)
# print(e)
# format_map 格式化字符串
# value = {"name":"qyc","age":"22"}
# a = "姓名:{name},年龄:{age}"
# print(a.format_map(value))
# 序列与迭代
# value = {"name":"qyc","age":"22"}
# # for val in value:
# # print(val)
# for key,val in value.items():
# print(key,val)
# 压缩序列
# a = ["name","age","sex"]
# b = ["qyc",22]
# for value in zip(a,b):
# print(value)
# 反转序列迭代
# c = reversed(a)
# print(a)
# copy deepcopy
# from copy import deepcopy
# a = {"name":"qyc","age":"22","aihao":["吃饭","睡觉"]}
# b = deepcopy(a)
# b = a.copy() #如果序列被替换,则b无影响,如果只是替换一个值,则b有影响
# a["aihao"][0] = "mly"
# a["aihao"][1] = "mlya"
# copy
# {'name': 'qyc', 'age': '22', 'aihao': ['mly', 'mlya']}
# {'name': 'qyc', 'age': '22', 'aihao': ['mly', 'mlya']}
# deepcopy
# {'name': 'qyc', 'age': '22', 'aihao': ['mly', 'mlya']}
# {'name': 'qyc', 'age': '22', 'aihao': ['吃饭', '睡觉']}
# a["aihao"] = "mly"
# {'name': 'qyc', 'age': '22', 'aihao': 'mly'}
# {'name': 'qyc', 'age': '22', 'aihao': ['吃饭', '睡觉']}
# print(a)
# print(b)
# fromkeys
# a = ["qyc",22,"man"]
# c = ["name","age","sex"]
# b = {}.fromkeys(c,"未定义")
# print(b)
# a = {"name": "qyc", "age": "22"}
# print(a["name"])
# print(a["aihao"]) 字典没有报错
# Traceback (most recent call last):
# File "D:/自编程序/studyPython/lean1.py", line 465, in <module>
# print(a["aihao"])
# KeyError: 'aihao'
# print(a.get("name"))
# print(a.get("aihao")) None
# print(a.get("aihao","没有")) 没有
# a = {"name": "qyc", "age": "22"}
# keys values 键值 遍历全部
# for key,value in a.items():
# print(key,"=",value)
# a = {"name": "qyc", "age": "22","sex":"man"}
# print(a.pop("age")) 弹出指定的一个
# print(a)
# print(a.popitem()) #弹出最后一个
# print(a)
# setdefault 默认值
# a = {"age":22}
# a.setdefault("name",1)
# print(a)
# {'age': 22, 'name': 1}
# update 以b更新a 有则替换,无则添加
# a = {"name":"qyc","age":1}
# b = {"name":"强月城","sex":"man"}
# a.update(b)
# print(a)
# {'name': '强月城', 'age': 1, 'sex': 'man'}
# values 与keys values 有重复的 keys没有重复的 items输出后者 相同的key被替换
# a = {"name":"qyc","age":22,"name":"强月城","aihao":22}
# for val in a.values():
# print(val)
# 强月城
# 22
# 22
# for val in a.keys():
# print(val)
# name
# age
# aihao
# for val in a.items():
# print(val)
# ('name', '强月城')
# ('age', 22)
# ('aihao', 22)
# -----------********练习
# import random
# a = {}
# b = []
# for j in range(0,10):
# for i in range(0, 90):
# b.append([random.randint(0, 99), "1"])
# # a.setdefault(random.randint(0,99),1)
# print(b)
# a = dict(b)
# print(a)
# print(len(a))
# print("{num:010}".format(num = 41))
# a = input("请输入:")
# ------------********函数*********-----------
# def show(name):
# print("你好{name}".format(name = name))
# print("你好"+name)
#
# show(input("输入:"))
# 斐波那契数列
# def fbnqsl(num):
# "斐波那契数列"
# a = [0, 1]
# for i in range(0,num-2):
# a.append(a[-2]+a[-1])
# return a
#
# def show():
# """
# 显示函数方法
# :return:1
# """
# return 1
#
# b = fbnqsl(10)
# print(b)
#
# print(show.__doc__)
# help(show)
# def show(*p):
# for a in p:
# print(a)
# print(p[0])
# print(p)
#
# show("qyc",11)
# def show(**a):
# print(a)
# for i,j in a.items():
#8u8/ print(i+" = "+j)
#
# show(**{"name":"qyc","age":"13"})
#
# def show(a):
# print(a)
# for i,j in a.items():
# print(i+" = "+j)
#
# show({"name":"qyc","age":"13"})
# -----------------***********类************-------------
# class qyc:
# # name = "qqqyyyccc"
# def getName(self):
# # self.name = self.name+1
# return self.name
#
# # def __setName(self,name): 相当于私有化
# def setName(self, name):
# # 定义了类变量
# self.name = name
#
#
# q1 = qyc()
# q2 = qyc()
#
# q1.setName("qiangyuecheng")
# q2.setName("强月城")
#
# print(q1.getName())
# print(q2.getName())
# class People:
# def show(self):
# print("People")
#
# class Student(People):
# def show1(self):
# print("Student")
#
# p1 = Student()
# p2 = People()
# p1.show()
# p2.show()
#
# # issubclass 判断是否有继承关系 子类 父
# print(issubclass(Student, People))
#
# #__bases__ 查看父类
# print(Student.__bases__)
#
# # isinstance 判断是否为实例
# print(isinstance(p1,Student))
# 多继承 用 ,隔开 如果类中没有任何代码需要 pass 否则编译出错
# class People:
# def show(self):
# print("people")
#
# class Student:
#
# # 没有重载,后面的方法会覆盖前面的方法
# def show(self,name):
# print("student"+name)
# def show(self):
# print("studentssss")
#
#
# class qyc(Student,People):
# # 前面的Student会覆盖People的show方法
# pass
#
# q = qyc()
# q.show()
# class People:
# def show1(self):
# print("shou()1")
#
# def method(self):
# print("默认method方法")
#
# class Student(People):
# pass
#
# class qyc(Student):
# pass
#
# print(People.__bases__)
# p1 = People()
# p2 = Student()
# p3 = qyc()
#
# print(issubclass(qyc,People))
# print(isinstance(p3,Student))
# p1 = People()
# # / 判断是否有 show1方法
# print(hasattr(p1,"show1"))
#
# m1 = getattr(p1,"show2",p1.method) #p1.method不能有小括号
# m1()
#
# def show2():
# print("show2")
# setattr(p1,"show2",show2) #动态添加方法 setattr
# p1.show2()
# class People:
# def show(self):
# print("people-show()")
#
# class Student:
# def method(self):
# p = People()
# if hasattr(p,"method"):
# p.method
# else:
# print("没有这个方法")
# def method1():
# print("method1")
# setattr(p,"method",method1)
# p.method()
#
# s = Student()
# s.method()
# ------------------********异常**********----------------------
# raise Exception("这是强月城的第一个异常")
'''
Traceback (most recent call last):
File "D:/自编程序/studyPython/lean1.py", line 714, in <module>
raise Exception("这是强月城的第一个异常")
Exception: 这是强月城的第一个异常
'''
# raise ArithmeticError("数值有关的异常")
"""
Traceback (most recent call last):
File "D:/自编程序/studyPython/lean1.py", line 721, in <module>
raise ArithmeticError("数值有关的异常")
ArithmeticError: 数值有关的异常
"""
# 异常总结
"""
Exception 所有异常的基类
AttributeError 属性引用或继承失败
OSError 操作系统无法执行任务时
IndexError 使用序列中不存在的索引
KeyError 使用映射中不存在的键值
NameError 找不到名字(变量)时抛出的异常
SyntaxError 代码为错误形式时
TypeError 当内建操作或函数应用于错误类型的对象时抛出的异常
ValueError 当内建操作或函数应用于错误类型的对象时抛出的异常,但对象使用了不合适的值时抛出的异常
ZeroDivisionError 当除法或取模操作的第二个参数值为0时抛出的异常
"""
# 自定义异常
#
# class qycException(Exception):
# pass
# # 加注、举起、提高、饲养
# class qyc:
# "自定义异常"
# def show(self):
# raise qycException("强月城自定义的异常")
#
# "method"
# def method(self):
# print("method")
# def doc(self):
# help(self.show)
#
# q = qyc()
# # q.show()
# help(q.show)
'''Traceback (most recent call last):
File "D:/自编程序/studyPython/lean1.py", line 753, in <module>
q.show()
File "D:/自编程序/studyPython/lean1.py", line 750, in show
raise qycException("强月城自定义的异常")
__main__.qycException: 强月城自定义的异常
'''
# -------------------------***********捕获异常************------------------
# try:
# a = 10
# b = 0
# c = a/b
# print(c)
# except AttributeError:
# print("捕获异常")
# # -----------***************捕获对象**********------------
# except (TypeError,ZeroDivisionError) as e: #起别名
# print("多个异常")
# print(e)
# except:
# print("其他异常")
# else:
# print("正常运行")
# finally:
# print("兜底方法")
# ----------------------***************构造方法*************----------------
#
# class qyc:
# def __init__(self,name = "huangyan"):
# self.name = name
# print("构造方法"+self.name)
# def show(self):
# print("show"+self.name)
#
# # 构造函数指定name的默认值时,初始化对象时可以没有参数,否则需要参数 TypeError: __init__() takes 1 positional argument but 2 were given
# q = qyc("qyc")
# q.show()
# ----------*************super*********-------
# 子类在重写__init__后不会调用父类的构造方法(AttributeError: 'student' object has no attribute 'name'),
# 当调用super()时会调用父类的构造方法
# class people:
# def __init__(self):
# self.name = "qyc"
# print("父类的构造方法")
# def show(self):
# print(self.name)
# class student(people):
# def __init__(self):
# super().__init__()
# print("子类的构造方法")
# def show(self):
# super().show()
# print("子类的show方法")
#
# stu = student()
# stu.show()
# #------------------*******特殊的成员方法******-------------
# a = [1,2,3,4,5]
# print(a.__len__()) #返回序列中的元素个数
# b =(1,2,3,4,5)
# print(b.__len__())
# c = {"name":"qyc","age":22}
# print(c.__len__())
#
# class itemss:
# def __init__(self,map):
# self.a = map
# print("构造方法")
# def __getitem__(self, item):
# print("调用getitem")
# def __setitem__(self, key, value):
# print("调用setitem")
# def __delitem__(self, key):
# print("调用delitem")
# def show(self,name):
# print(self.a[name])
#
# c = {"name":"qyc","age":22}
# b = itemss(c)
# (b.show("name"))
# b["age"] = 11
# (b.show("age"))
# 绑定方法
# class list:
#
# def get(self):
# print("调用get")
#
# def set(self,yz):
# self.a = yz
# print("调用set")
#
# def delt(self):
# print("调用delt")
#
# def de(self):
# self.a
# position = property(get,set,delt)
#
# c = (10,22)
# b = list()
# del b.position
# b.position = 11,12
# print(b.position)
# 监控对象所有属性 getattr()
# 静态方法 类方法
# class qyc:
# name = "hy"
# def __init__(self):
# self.age = 22
# print(self.name+" "+self.name)
#
# def show(self):
# print("show")
#
# @staticmethod
# def run():
# print("静态方法")
# print("静态name"+qyc.name)
# # qyc.read()
#
# @classmethod
# def read(cls):
# print("类方法")
# print(cls.name)
#
#
# qyc.run()
# qyc.read()
# print(qyc.name)
# # qyc.show() TypeError: show() missing 1 required positional argument: 'self'
# q = qyc()
# q.show()
#------------****************迭代器*****----
# class fbnq:
# def __init__(self):
# self.a = 0
# self.b = 1
#
# def __next__(self):
# result = self.a
# self.a,self.b = self.b,self.a+self.b
# return result
#
# def __iter__(self):
# return self
#
# fb = fbnq()
# for fib in fb:
# print(fib,end=" ")
# if fib > 20:
# break
# yield 生成器 冻结当前函数 处理多维列表
# def ebunList(nested):
# try:
# for subList in nested:
# for element in ebunList(subList):
# yield element
# except TypeError:
# yield nested
#
# list = [1,2,[3,4,[5,6,7],8,9],10]
#
# for i in ebunList(list):
# print(i,end=" ")
# 1 2 3 4 5 6 7 8 9 10