"""
#汉诺塔迭代函数(递归)
def move(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b)
print(a,'-->',c)
move(n-1,b,a,c)
move(4,'A','B','C')"""
"""
#九九乘法表
for i in list(range(1,10)):
for j in list(range(i,10)):
print("%s*%s=%s"%(i,j,i*j),end=' ')
print()
"""
"""
#九九乘法表
#1、
for i in list(range(1,10)):
for j in list(range(1,10)):
if i>j:
print("%s %s %s"%(' ',' ',' ')+"\t",end=' ')
else:
print("%s*%s=%s"%(i,j,i*j)+"\t",end=' ')
print("\t"*(i-1))
#2、
for i in list(range(1,10)):
for j in list(range(1,10)):
if i>j:
line = "%s %s %s"%(' ',' ',' ')+"\t"
else:
line = "%s*%s=%s"%(i,j,i*j)+"\t"
print(line,end=' ')
print("\t"*(i-1))
"""
"""
#判断输入的数字是几位数且打印出
num = int(input("请输入数字:"))
countnum = 0
while True:
print(num%10)
num = num//10
countnum += 1
if num == 0:
print("这是",countnum,"数")
break
"""
"""
#打印一个边长为n的正方形
n = int(input("请输入数字:"))
for i in range(1,n):
if (i == 1 or i == n-1):
print('* '*(n-1))
else:
print('*' + ' '*(2*n-5) + '*')
"""
"""
#求100以内所有奇数的和
sum = 0
for i in range(1,100):
if i%2 == 1:
sum += i
print (sum)
"""
"""
#求100以内所有偶数的和
sum = 0
for i in range(1,101):
if i%2 == 0:
sum += i
print (sum)
"""
"""
#求100以内所有数的和
sum = 0
for i in range(1,101):
sum += i
print (sum)
"""
"""
#阶乘
sum = 0
def jc(n):
if n==1:
return 1
else:
return n*jc(n-1)
"""
"""
#阶乘之和
n = int(input("请输入数字:"))
j = 1
sum = 0
for i in range(1,n+1):
j *= i
sum += j
print (n,'的阶乘之和为:',sum)
"""
"""
#判断素数
n = int(input("请输入数字:"))
if (n == 2 or n == 1):
print(n,"是素数!")
else:
for i in range(2,n):
if n%i==0:
print(n,"是合数!")
break
else:
print(n,"是素数!")
"""
"""
#判断素数
n = int(input("请输入数字:"))
t = int(n**0.5)
if (n == 2 or n == 3):
print(n,"是素数!")
elif n == 1:
print(n,"既不是素数也不是合数!")
elif (n%6 != 1 and n%6 != 5):
print(n,"是合数!")
else:
for i in range(5,t+1,6):
if(n%i==0 or n%(i+2)==0):
print(n,"是合数!")
break
else:
print(n,"是素数!")
"""
"""
#求n以内的所有素数
n = int(input("请输入数字:"))
for j in range(1,n+1):
t = int(j**0.5)
if (j == 2 or j == 3):
print(j)
elif j == 1:
continue
elif (j%6 != 1 and j%6 != 5):
continue
else:
for i in range(5,t+1,6):
if(j%i==0 or j%(i+2)==0):
break
else:
print(j)
"""
"""
#求n以内的素数
import math
lst = []
n = 1000
flag = False
for m in range(2,n):
for i in lst:
if m%i == 0:
flag = True
break
if i >= math.ceil(math.sqrt(m)):
flag = False
break
if not flag:
print(m)
lst.append(m)
"""
"""
#求斐波那契数列第n项
def F(n):
if (n == 1 or n == 2):
return 1
else:
return F(n-1)+F(n-2)
"""
#def func(n):
# if n>=0:
# if n==0:
# return 0
# elif n==1:
# return 1
# else:
# return func(n-1)+func(n-2)
# else:
# n=(-n)
# func(n)
# return -func(n)
"""
#打印斐波那契数列
a = 0
b = 1
if a == 0:
print(1)
for i in range(101):
c = a + b
a = b
b = c
if c<=10000000000000000000000000000000:
print(c)
"""
"""
#第101项斐波那契数列
a = 1
b = 1
c = 2
print(0,0)
print(1,1)
print(2,1)
while True:
d = a+b
a = b
b = d
c += 1
if c == 101:
break
print(c,d)
"""
"""
#每次输入一个数求一次平均值
sum = 0
count = 0
avg = 0
while True:
n = int(input("请输入n个数:"))
if n == 'quit':
break
count += 1
sum += n
avg = sum/count
print(avg)
"""
"""
#打印菱形
for i in range(-3,4):
if i<0:
n = -i
else:
n = i
print(" "*n + "*"*(7-n*2))
"""
"""
#打印闪电菱形
for i in range(-3,4):
if i<0:
print(" "*(-i) + "*"*(4+i))
elif i == 0:
print("*"*7)
else:
print(" "*3 + "*"*(4-i))
"""
"""
#杨辉三角
triangle = [[1],[1,1]]
n = 6
for i in range(2,n):
pre = triangle[i-1]
cur = [1]
for j in range(0,i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
triangle.append(cur)
print(triangle)
"""
'''
#杨辉三角
triangle = []
n = int(input("请输入数字:"))
for i in range(0,n):
if i == 0:
triangle.append([1])
else:
pre = triangle[i-1]
cur = [1]
for j in range(0,i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
triangle.append(cur)
print(triangle)
'''
"""
#杨辉三角
n = int(input("请输入数字:"))
oldline = []
newline = [1]
length = 0
print(newline)
for i in range(1,n):
oldline = newline.copy()
oldline.append(0)
newline.clear()
offset = 0
while offset <= i:
temp = oldline[offset-1] + oldline[offset]
newline.append(temp)
offset += 1
print(newline)
"""
"""
n = int(input("请输入数字:"))
start = datetime.datetime.now()
triangle = []
for i in range(n):
row = [1]
for k in range(i):
if k == i-1:
row.append(1)
else:
row.append(0)
triangle.append(row)
if i == 0:
continue
for j in range(1,i//2+1):
val = triangle[i-1][j-1] + triangle[i-1][j]
row[j] = val
if j != i-j:
row[-j-1] = val
print(triangle)
stop = (datetime.datetime.now() - start).total_seconds()
print(stop)
"""
"""
#杨辉三角 打印第n行
import math
import datetime
n = int(input("请输入数字:"))
start = datetime.datetime.now()
triangle = []
for i in range(n):
row = [1]
for k in range(i):
if k == i-1:
row.append(1)
else:
row.append(0)
triangle.append(row)
if i == 0:
continue
for j in range(1,i//2+1):
val = triangle[i-1][j-1] + triangle[i-1][j]
row[j] = val
if j != i-j:
row[-j-1] = val
print(row)
print(len(row))
stop = (datetime.datetime.now() - start).total_seconds()
print(stop)
"""
"""
#冒泡排序
lst = [432543,42342,5415,55,776,7888,73753]
length = len(lst)
flag = False
count = 0
s_count = 0
for i in range(length):
flag = False
for j in range(length-i-1):
count += 1
if lst[j] > lst[j+1]:
temp = lst[j]
lst[j] = lst[j+1]
lst[j+1] = temp
flag = True
s_count += 1
while not flag:
break
print(lst,count,s_count)
"""
"""
#判断输入的数字是几位数,且依次输出每位数字以及出现的次数
n = input('请输入数字:').strip().lstrip('0')
length = len(n)
print('这个数字是:{},是{}位数'.format(n,length))
for i in range(length):
print("{}'s count = {}".format(n[i],n.count(n[i])))
for j in range(length):
print("第{}位数字是:{}".format(j+1,n[- j - 1]))
"""
"""
#至少接受两个参数,返回最大值最小值
import random
def num(*args):
print(args)
length = len(args)
if length<2:
print('请至少输入两个数字!')
else:
return max(args),min(args)
print(*num(*set([random.randint(10,200) for _ in range(10)])))
"""
"""
#输入n,规则输出方正
def alignment(n):
for i in range(1,n+1):
for j in range(n,0,-1):
if i < j:
print( ' '*len(str(j)),end=' ')
else:
print(j,end=' ')
print()
"""
"""
#输入n,规则输出方正
def alignment(n):
tail = " ".join([str(i) for i in range(n,0,-1)])
length = len(tail)
for i in range(1,n+1):
print("{:>{}}".format(" ".join([str(j) for j in range(i,0,-1)]),length))
#print(tail)
alignment(12)
"""
"""
#输入n,规则输出方正(大到小)
def alignment(n):
tail = " ".join([str(i) for i in range(n,0,-1)])
print(tail)
length = len(tail)
for i in range(length):
if tail[i] == ' ':
print(" "*i,tail[i+1:])
alignment(12)
"""
"""
#自定义sort高阶函数排序
lst = [2,4,6,8,4,2,5,2]
#sorted => newlist
def sort(lst,fn=lambda a,b:a>b):
newlist = []
for x in lst:
for i,y in enumerate(newlist):
if fn(x,y):
newlist.insert(i,x)
break
else:
newlist.append(x)
return newlist
print(sort(lst,lambda x,y:x>y))
print(sorted(lst,reverse=True))
print(list(map(lambda x:x+1,lst)))
print(list(map(lambda x:(x,x+1),lst)))
print(list(filter(lambda x:x>3,lst)))
"""
"""
#柯里化函数
def add(x,y):
return x+y
print(add(4,5))
#z=f(x,y)
def new_add(x):
def inner(y):
return x+y
return inner
foo = new_add(4)
print(foo(5))
#print(new_add(4)(5))
#z=f(x,y)
"""
"""
#装饰器
import datetime
import time
def logger(fn):
def wrap(*args,**kwargs):
#before
print("args={},kwargs={}".format(args,kwargs))
start = datetime.datetime.now()
ret = fn(*args,**kwargs)
#after
#print(ret)
delta = (datetime.datetime.now()-start).total_seconds()
if delta > 2:
print("{} took {}s".format(fn.__name__,delta))
return ret
return wrap
@logger # 相当于add = logger(add)
def add(x,y):
time.sleep(0)
return x + y
#foo = logger(add)
#print(foo(4,6))
#add = logger(add) #return wrap,wrap = 增强的fn
print(add(x = 4,y = 6))
"""
"""
#ls功能代码实现
from pathlib import Path
import argparse
import datetime
import stat
def listdir(path=".",all=False,detail=False,human=False):
def _convert_mode(mode:int):
modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
modestr = bin(mode)[-9:] # '110110100'
ret = ""
for i,c in enumerate(modestr):
if c == '1':
ret += modelist[i]
else:
ret += '-'
return ret
# -d -s p l c b
def _convert_type(file:Path):
if file.is_symlink():
ret = '1'
elif file.is_fifo():
ret = 'p'
elif file.is_socket():
ret = 's'
else:
ret = '-'
return ret
def _get_human(size:int):
units = ['','K','M','G','T','P'] #" KMGTP"
depth = 0
while size >= 1024:
size = size//1024
depth += 1
return ("{}{}".format(size,units[depth]))
def _showdir(path='.',all=False,detail=False,human=False):
p = Path(path)
for file in p.iterdir():
if not all and str(file.name).startswith('.'): # .开头 不打印 --all
continue
# -l
if detail:
st = file.stat()
# -rw-rw-r-- l python python 2920 Sep 21 07:30 ips
h = str(st.st_size)
if human:
h = _get_human(st.st_size)
yield (stat.filemode(st.st_mode),st.st_nlink,st.st_uid,st.st_gid,h,
datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),file.name)
else: #没有 -l
yield (file.name,)
yield from sorted(_showdir(args.path,args.all,args.l,args.h),key=lambda x: x[len(x)-1])
#ls [path] [-l] [-a] [-h]
parser = argparse.ArgumentParser(prog='ls',add_help=False,description='list all files') #构造解析器
parser.add_argument('path',nargs='?',default='.',help='path help') # 位置参数
parser.add_argument('-l',action='store_true')
parser.add_argument('-h',action='store_true')
parser.add_argument('-a','--all',action='store_true')
if __name__ == '__main__':
args = parser.parse_args()
parser.print_help()
print('args=',args)
for st in listdir(args.path,args.all,args.l,args.h):
print(st)
"""
##类,对象
#'''
#class MyClass:
# """A example class"""
# x = 'abc' #类属性
# def __init__(self):#初始化(方法、函数、构造函数)
# print('init') #如果没定义,则隐式定义,返回值为pass
# def foo(self): #类属性foo,也是类方法
# return "foo = {}".format(self.x)
#a = MyClass()#实例化,初始化
#print(a.foo())
#'''
#class Person:
# x = 'abc'
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
# def showage(self,x,y):
# print('{} is {}'.format(self.name,self.age),x,y)
# self.y = x
# Person.x = x
#Tom = Person('tom',32) #实例化
#Jerry = Person('jerry',21)
##print(id(Tom))
##print(id(Person('tom',32)))
##print(Tom.name,Tom.age)
##print(Jerry.name,Jerry.age)
##print(Tom.x,Jerry.x)
##print('--------------------')
##Tom.showage(100,'a')
##Jerry.showage(200,'d')
##print(Tom.y)
##print(Jerry.y)
##print(Person.x)
##Person.x = 'fdsfsd'
##print(Tom.x,Jerry.x)
##print(*Person.__dict__)
##print(Tom.__class__,Jerry.__class__)
##print(Tom.__class__.__qualname__,Tom.__class__.__name__)
##print(Person.__dict__)
##print(Tom.__dict__)
##print(Jerry.__dict__)
##print(Tom.__dict__['name'])
'''
#类以及实例的变量访问
class Person:
age = 3
height = 170
def __init__(self,name,age=18):
self.name = name
self.age = age
Tom = Person('tom') #实例化
Jerry = Person('jerry',21)
Person.age = 30
print(Person.age,Tom.age,Jerry.age)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
print(Person.height,Tom.height,Jerry.height)
Person.height += 20
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Tom.height = 168
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Jerry.height += 30
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Person.weight = 70
print(Person.weight,Tom.weight,Jerry.weight)
print(Person.__dict__['weight'])
print(Tom.weight)
'''
'''
#类装饰器
def setnameproperty(name):
def wrapper(cls):
cls.NAME = name
return cls
return wrapper
@setnameproperty('Tom')
class Person:
AGE = 5
print(Person.NAME)
print(Person.AGE)
'''
'''
#面向对象类方法以及静态方法
class Person:
def normal_method():
print('nornal')
def method(self):
print("{}'s method".format(self))
@classmethod
def class_method(cls):
print('class = {0.__name__} ({0})'.format(cls))
cls.HEIGHT = 170
@staticmethod
def static_methd():
print(Person.HEIGHT)
print('~~~~~类访问')
print(1,Person.normal_method())
#print(2,Person.method())
print(3,Person.class_method())
print(4,Person.static_methd())
print(Person.__dict__)
print('~~~实例访问')
print('tom---')
tom = Person()
#print(1,tom.normal_method())
print(2,tom.method())
print(3,tom.class_method())
print(4,tom.static_methd())
print('jerry---')
jerry = Person()
#print(1,jerry.normal_method())
print(2,jerry.method())
print(3,jerry.class_method())
print(4,jerry.static_methd())
'''
"""
#类继承
#class Parent: # 定义父类
# parentAttr = 100
# def __init__(self):
# print ("调用父类构造函数")
# def parentMethod(self):
# print ('调用父类方法')
# def setAttr(self, attr):
# Parent.parentAttr = attr
# def getAttr(self):
# print ("父类属性 :", Parent.parentAttr)
#class Child(Parent): # 定义子类
# def __init__(self):
# print ("调用子类构造方法")
# def childMethod(self):
# print ('调用子类方法')
#c = Child() # 实例化子类
#c.childMethod() # 调用子类的方法
#c.parentMethod() # 调用父类方法
#c.setAttr(200) # 再次调用父类的方法 - 设置属性值
#c.getAttr()
#方法重写
#class Parent:
# def myMethod(self):
# print("parent's method!")
# def mMethod(self):
# print("43432")
#class Child(Parent):
# def myMethod(self):
# print("child's method!")
#c = Child()
#c.myMethod()
#c.mMethod()
"""
'''
#访问控制--私有变量
class Person:
def __init__(self,name,age=18):
self.name = name
self.__age = age
def growup(self,incr = 1):
if 0 < incr <150:
self.__age += incr
def getage(self):
return self.__age
Tom = Person('tom')
Tom.growup(2)
print(Tom.getage())
#print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
#Tom.age = 2000
#print(Tom.getage())
#print(Tom.age)
'''
"""
#私有成员---私有变量,私有方法
class Person:
def __init__(self,name,age=18):
self._name = name
self.__age = age
def __growup(self,incr = 1):
if 0 < incr <150:
self.__age += incr
def __getname(self):
return self._name
def __getage(self):
return self.__age
Tom = Person('tom')
#Tom.growup(2)
print(Tom._Person__getage())
#Tom._name = 'jerry'
print(Tom._name)
print(Tom._Person__getname())
print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
"""
"""
import sys
import os
debug = True
class FooClass(object):
"Foo class"
pass
def test():
"test function"
foo = FooClass()
if debug:
print ('run test()')
if __name__ == '__main__':
test()
"""
#汉诺塔迭代函数(递归)
def move(n,a,b,c):
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b)
print(a,'-->',c)
move(n-1,b,a,c)
move(4,'A','B','C')"""
"""
#九九乘法表
for i in list(range(1,10)):
for j in list(range(i,10)):
print("%s*%s=%s"%(i,j,i*j),end=' ')
print()
"""
"""
#九九乘法表
#1、
for i in list(range(1,10)):
for j in list(range(1,10)):
if i>j:
print("%s %s %s"%(' ',' ',' ')+"\t",end=' ')
else:
print("%s*%s=%s"%(i,j,i*j)+"\t",end=' ')
print("\t"*(i-1))
#2、
for i in list(range(1,10)):
for j in list(range(1,10)):
if i>j:
line = "%s %s %s"%(' ',' ',' ')+"\t"
else:
line = "%s*%s=%s"%(i,j,i*j)+"\t"
print(line,end=' ')
print("\t"*(i-1))
"""
"""
#判断输入的数字是几位数且打印出
num = int(input("请输入数字:"))
countnum = 0
while True:
print(num%10)
num = num//10
countnum += 1
if num == 0:
print("这是",countnum,"数")
break
"""
"""
#打印一个边长为n的正方形
n = int(input("请输入数字:"))
for i in range(1,n):
if (i == 1 or i == n-1):
print('* '*(n-1))
else:
print('*' + ' '*(2*n-5) + '*')
"""
"""
#求100以内所有奇数的和
sum = 0
for i in range(1,100):
if i%2 == 1:
sum += i
print (sum)
"""
"""
#求100以内所有偶数的和
sum = 0
for i in range(1,101):
if i%2 == 0:
sum += i
print (sum)
"""
"""
#求100以内所有数的和
sum = 0
for i in range(1,101):
sum += i
print (sum)
"""
"""
#阶乘
sum = 0
def jc(n):
if n==1:
return 1
else:
return n*jc(n-1)
"""
"""
#阶乘之和
n = int(input("请输入数字:"))
j = 1
sum = 0
for i in range(1,n+1):
j *= i
sum += j
print (n,'的阶乘之和为:',sum)
"""
"""
#判断素数
n = int(input("请输入数字:"))
if (n == 2 or n == 1):
print(n,"是素数!")
else:
for i in range(2,n):
if n%i==0:
print(n,"是合数!")
break
else:
print(n,"是素数!")
"""
"""
#判断素数
n = int(input("请输入数字:"))
t = int(n**0.5)
if (n == 2 or n == 3):
print(n,"是素数!")
elif n == 1:
print(n,"既不是素数也不是合数!")
elif (n%6 != 1 and n%6 != 5):
print(n,"是合数!")
else:
for i in range(5,t+1,6):
if(n%i==0 or n%(i+2)==0):
print(n,"是合数!")
break
else:
print(n,"是素数!")
"""
"""
#求n以内的所有素数
n = int(input("请输入数字:"))
for j in range(1,n+1):
t = int(j**0.5)
if (j == 2 or j == 3):
print(j)
elif j == 1:
continue
elif (j%6 != 1 and j%6 != 5):
continue
else:
for i in range(5,t+1,6):
if(j%i==0 or j%(i+2)==0):
break
else:
print(j)
"""
"""
#求n以内的素数
import math
lst = []
n = 1000
flag = False
for m in range(2,n):
for i in lst:
if m%i == 0:
flag = True
break
if i >= math.ceil(math.sqrt(m)):
flag = False
break
if not flag:
print(m)
lst.append(m)
"""
"""
#求斐波那契数列第n项
def F(n):
if (n == 1 or n == 2):
return 1
else:
return F(n-1)+F(n-2)
"""
#def func(n):
# if n>=0:
# if n==0:
# return 0
# elif n==1:
# return 1
# else:
# return func(n-1)+func(n-2)
# else:
# n=(-n)
# func(n)
# return -func(n)
"""
#打印斐波那契数列
a = 0
b = 1
if a == 0:
print(1)
for i in range(101):
c = a + b
a = b
b = c
if c<=10000000000000000000000000000000:
print(c)
"""
"""
#第101项斐波那契数列
a = 1
b = 1
c = 2
print(0,0)
print(1,1)
print(2,1)
while True:
d = a+b
a = b
b = d
c += 1
if c == 101:
break
print(c,d)
"""
"""
#每次输入一个数求一次平均值
sum = 0
count = 0
avg = 0
while True:
n = int(input("请输入n个数:"))
if n == 'quit':
break
count += 1
sum += n
avg = sum/count
print(avg)
"""
"""
#打印菱形
for i in range(-3,4):
if i<0:
n = -i
else:
n = i
print(" "*n + "*"*(7-n*2))
"""
"""
#打印闪电菱形
for i in range(-3,4):
if i<0:
print(" "*(-i) + "*"*(4+i))
elif i == 0:
print("*"*7)
else:
print(" "*3 + "*"*(4-i))
"""
"""
#杨辉三角
triangle = [[1],[1,1]]
n = 6
for i in range(2,n):
pre = triangle[i-1]
cur = [1]
for j in range(0,i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
triangle.append(cur)
print(triangle)
"""
'''
#杨辉三角
triangle = []
n = int(input("请输入数字:"))
for i in range(0,n):
if i == 0:
triangle.append([1])
else:
pre = triangle[i-1]
cur = [1]
for j in range(0,i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
triangle.append(cur)
print(triangle)
'''
"""
#杨辉三角
n = int(input("请输入数字:"))
oldline = []
newline = [1]
length = 0
print(newline)
for i in range(1,n):
oldline = newline.copy()
oldline.append(0)
newline.clear()
offset = 0
while offset <= i:
temp = oldline[offset-1] + oldline[offset]
newline.append(temp)
offset += 1
print(newline)
"""
"""
n = int(input("请输入数字:"))
start = datetime.datetime.now()
triangle = []
for i in range(n):
row = [1]
for k in range(i):
if k == i-1:
row.append(1)
else:
row.append(0)
triangle.append(row)
if i == 0:
continue
for j in range(1,i//2+1):
val = triangle[i-1][j-1] + triangle[i-1][j]
row[j] = val
if j != i-j:
row[-j-1] = val
print(triangle)
stop = (datetime.datetime.now() - start).total_seconds()
print(stop)
"""
"""
#杨辉三角 打印第n行
import math
import datetime
n = int(input("请输入数字:"))
start = datetime.datetime.now()
triangle = []
for i in range(n):
row = [1]
for k in range(i):
if k == i-1:
row.append(1)
else:
row.append(0)
triangle.append(row)
if i == 0:
continue
for j in range(1,i//2+1):
val = triangle[i-1][j-1] + triangle[i-1][j]
row[j] = val
if j != i-j:
row[-j-1] = val
print(row)
print(len(row))
stop = (datetime.datetime.now() - start).total_seconds()
print(stop)
"""
"""
#冒泡排序
lst = [432543,42342,5415,55,776,7888,73753]
length = len(lst)
flag = False
count = 0
s_count = 0
for i in range(length):
flag = False
for j in range(length-i-1):
count += 1
if lst[j] > lst[j+1]:
temp = lst[j]
lst[j] = lst[j+1]
lst[j+1] = temp
flag = True
s_count += 1
while not flag:
break
print(lst,count,s_count)
"""
"""
#判断输入的数字是几位数,且依次输出每位数字以及出现的次数
n = input('请输入数字:').strip().lstrip('0')
length = len(n)
print('这个数字是:{},是{}位数'.format(n,length))
for i in range(length):
print("{}'s count = {}".format(n[i],n.count(n[i])))
for j in range(length):
print("第{}位数字是:{}".format(j+1,n[- j - 1]))
"""
"""
#至少接受两个参数,返回最大值最小值
import random
def num(*args):
print(args)
length = len(args)
if length<2:
print('请至少输入两个数字!')
else:
return max(args),min(args)
print(*num(*set([random.randint(10,200) for _ in range(10)])))
"""
"""
#输入n,规则输出方正
def alignment(n):
for i in range(1,n+1):
for j in range(n,0,-1):
if i < j:
print( ' '*len(str(j)),end=' ')
else:
print(j,end=' ')
print()
"""
"""
#输入n,规则输出方正
def alignment(n):
tail = " ".join([str(i) for i in range(n,0,-1)])
length = len(tail)
for i in range(1,n+1):
print("{:>{}}".format(" ".join([str(j) for j in range(i,0,-1)]),length))
#print(tail)
alignment(12)
"""
"""
#输入n,规则输出方正(大到小)
def alignment(n):
tail = " ".join([str(i) for i in range(n,0,-1)])
print(tail)
length = len(tail)
for i in range(length):
if tail[i] == ' ':
print(" "*i,tail[i+1:])
alignment(12)
"""
"""
#自定义sort高阶函数排序
lst = [2,4,6,8,4,2,5,2]
#sorted => newlist
def sort(lst,fn=lambda a,b:a>b):
newlist = []
for x in lst:
for i,y in enumerate(newlist):
if fn(x,y):
newlist.insert(i,x)
break
else:
newlist.append(x)
return newlist
print(sort(lst,lambda x,y:x>y))
print(sorted(lst,reverse=True))
print(list(map(lambda x:x+1,lst)))
print(list(map(lambda x:(x,x+1),lst)))
print(list(filter(lambda x:x>3,lst)))
"""
"""
#柯里化函数
def add(x,y):
return x+y
print(add(4,5))
#z=f(x,y)
def new_add(x):
def inner(y):
return x+y
return inner
foo = new_add(4)
print(foo(5))
#print(new_add(4)(5))
#z=f(x,y)
"""
"""
#装饰器
import datetime
import time
def logger(fn):
def wrap(*args,**kwargs):
#before
print("args={},kwargs={}".format(args,kwargs))
start = datetime.datetime.now()
ret = fn(*args,**kwargs)
#after
#print(ret)
delta = (datetime.datetime.now()-start).total_seconds()
if delta > 2:
print("{} took {}s".format(fn.__name__,delta))
return ret
return wrap
@logger # 相当于add = logger(add)
def add(x,y):
time.sleep(0)
return x + y
#foo = logger(add)
#print(foo(4,6))
#add = logger(add) #return wrap,wrap = 增强的fn
print(add(x = 4,y = 6))
"""
"""
#ls功能代码实现
from pathlib import Path
import argparse
import datetime
import stat
def listdir(path=".",all=False,detail=False,human=False):
def _convert_mode(mode:int):
modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
modestr = bin(mode)[-9:] # '110110100'
ret = ""
for i,c in enumerate(modestr):
if c == '1':
ret += modelist[i]
else:
ret += '-'
return ret
# -d -s p l c b
def _convert_type(file:Path):
if file.is_symlink():
ret = '1'
elif file.is_fifo():
ret = 'p'
elif file.is_socket():
ret = 's'
else:
ret = '-'
return ret
def _get_human(size:int):
units = ['','K','M','G','T','P'] #" KMGTP"
depth = 0
while size >= 1024:
size = size//1024
depth += 1
return ("{}{}".format(size,units[depth]))
def _showdir(path='.',all=False,detail=False,human=False):
p = Path(path)
for file in p.iterdir():
if not all and str(file.name).startswith('.'): # .开头 不打印 --all
continue
# -l
if detail:
st = file.stat()
# -rw-rw-r-- l python python 2920 Sep 21 07:30 ips
h = str(st.st_size)
if human:
h = _get_human(st.st_size)
yield (stat.filemode(st.st_mode),st.st_nlink,st.st_uid,st.st_gid,h,
datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),file.name)
else: #没有 -l
yield (file.name,)
yield from sorted(_showdir(args.path,args.all,args.l,args.h),key=lambda x: x[len(x)-1])
#ls [path] [-l] [-a] [-h]
parser = argparse.ArgumentParser(prog='ls',add_help=False,description='list all files') #构造解析器
parser.add_argument('path',nargs='?',default='.',help='path help') # 位置参数
parser.add_argument('-l',action='store_true')
parser.add_argument('-h',action='store_true')
parser.add_argument('-a','--all',action='store_true')
if __name__ == '__main__':
args = parser.parse_args()
parser.print_help()
print('args=',args)
for st in listdir(args.path,args.all,args.l,args.h):
print(st)
"""
##类,对象
#'''
#class MyClass:
# """A example class"""
# x = 'abc' #类属性
# def __init__(self):#初始化(方法、函数、构造函数)
# print('init') #如果没定义,则隐式定义,返回值为pass
# def foo(self): #类属性foo,也是类方法
# return "foo = {}".format(self.x)
#a = MyClass()#实例化,初始化
#print(a.foo())
#'''
#class Person:
# x = 'abc'
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
# def showage(self,x,y):
# print('{} is {}'.format(self.name,self.age),x,y)
# self.y = x
# Person.x = x
#Tom = Person('tom',32) #实例化
#Jerry = Person('jerry',21)
##print(id(Tom))
##print(id(Person('tom',32)))
##print(Tom.name,Tom.age)
##print(Jerry.name,Jerry.age)
##print(Tom.x,Jerry.x)
##print('--------------------')
##Tom.showage(100,'a')
##Jerry.showage(200,'d')
##print(Tom.y)
##print(Jerry.y)
##print(Person.x)
##Person.x = 'fdsfsd'
##print(Tom.x,Jerry.x)
##print(*Person.__dict__)
##print(Tom.__class__,Jerry.__class__)
##print(Tom.__class__.__qualname__,Tom.__class__.__name__)
##print(Person.__dict__)
##print(Tom.__dict__)
##print(Jerry.__dict__)
##print(Tom.__dict__['name'])
'''
#类以及实例的变量访问
class Person:
age = 3
height = 170
def __init__(self,name,age=18):
self.name = name
self.age = age
Tom = Person('tom') #实例化
Jerry = Person('jerry',21)
Person.age = 30
print(Person.age,Tom.age,Jerry.age)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
print(Person.height,Tom.height,Jerry.height)
Person.height += 20
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Tom.height = 168
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Jerry.height += 30
print(Person.height,Tom.height,Jerry.height)
print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
Person.weight = 70
print(Person.weight,Tom.weight,Jerry.weight)
print(Person.__dict__['weight'])
print(Tom.weight)
'''
'''
#类装饰器
def setnameproperty(name):
def wrapper(cls):
cls.NAME = name
return cls
return wrapper
@setnameproperty('Tom')
class Person:
AGE = 5
print(Person.NAME)
print(Person.AGE)
'''
'''
#面向对象类方法以及静态方法
class Person:
def normal_method():
print('nornal')
def method(self):
print("{}'s method".format(self))
@classmethod
def class_method(cls):
print('class = {0.__name__} ({0})'.format(cls))
cls.HEIGHT = 170
@staticmethod
def static_methd():
print(Person.HEIGHT)
print('~~~~~类访问')
print(1,Person.normal_method())
#print(2,Person.method())
print(3,Person.class_method())
print(4,Person.static_methd())
print(Person.__dict__)
print('~~~实例访问')
print('tom---')
tom = Person()
#print(1,tom.normal_method())
print(2,tom.method())
print(3,tom.class_method())
print(4,tom.static_methd())
print('jerry---')
jerry = Person()
#print(1,jerry.normal_method())
print(2,jerry.method())
print(3,jerry.class_method())
print(4,jerry.static_methd())
'''
"""
#类继承
#class Parent: # 定义父类
# parentAttr = 100
# def __init__(self):
# print ("调用父类构造函数")
# def parentMethod(self):
# print ('调用父类方法')
# def setAttr(self, attr):
# Parent.parentAttr = attr
# def getAttr(self):
# print ("父类属性 :", Parent.parentAttr)
#class Child(Parent): # 定义子类
# def __init__(self):
# print ("调用子类构造方法")
# def childMethod(self):
# print ('调用子类方法')
#c = Child() # 实例化子类
#c.childMethod() # 调用子类的方法
#c.parentMethod() # 调用父类方法
#c.setAttr(200) # 再次调用父类的方法 - 设置属性值
#c.getAttr()
#方法重写
#class Parent:
# def myMethod(self):
# print("parent's method!")
# def mMethod(self):
# print("43432")
#class Child(Parent):
# def myMethod(self):
# print("child's method!")
#c = Child()
#c.myMethod()
#c.mMethod()
"""
'''
#访问控制--私有变量
class Person:
def __init__(self,name,age=18):
self.name = name
self.__age = age
def growup(self,incr = 1):
if 0 < incr <150:
self.__age += incr
def getage(self):
return self.__age
Tom = Person('tom')
Tom.growup(2)
print(Tom.getage())
#print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
#Tom.age = 2000
#print(Tom.getage())
#print(Tom.age)
'''
"""
#私有成员---私有变量,私有方法
class Person:
def __init__(self,name,age=18):
self._name = name
self.__age = age
def __growup(self,incr = 1):
if 0 < incr <150:
self.__age += incr
def __getname(self):
return self._name
def __getage(self):
return self.__age
Tom = Person('tom')
#Tom.growup(2)
print(Tom._Person__getage())
#Tom._name = 'jerry'
print(Tom._name)
print(Tom._Person__getname())
print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
"""
"""
import sys
import os
debug = True
class FooClass(object):
"Foo class"
pass
def test():
"test function"
foo = FooClass()
if debug:
print ('run test()')
if __name__ == '__main__':
test()
"""