Python基础题练习

"""
#汉诺塔迭代函数(递归)
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()
"""

猜你喜欢

转载自blog.csdn.net/qq_42471503/article/details/80713313