闭包/表达式 /filter map 递归/exec装饰器/eval函数

#------lambda-------------
def mymax(x,y):
    return x if x > y else y
mymax = lambda x,y : x if x > y else y
mymax = lambda x,y :max(x,y)
print(mymax(100,200))
#----------------------------
def fx(f,x,y):
    print(f(x,y))
fx((lambda a,b: a + b),100,200)
fx((lambda a,b: a ** 0,b),3,4)
#-------------------------------------------------
print(sum(map(lambda x :x ** 2 ,range(1,10))))
#-------------------------------------------------
def make_power(y):
    def fn(x):
        return x ** y
    return fn
print(sum(map(make_power2 ,range(1,10))))

#======================================================

#-----闭包--------------
def make_power(y):
    def fn(x):
        return x ** y
    return fn
pow2 = make_power(2)
print("5的平方是",power2(5))
pow3 = make_power(3)
print("6的立方是",power3(6))
print(sum(map(make_power2 ,range(1,10))))
#--------------------------------------------
def make_power(y):
    if y == 1:
        def fn(x):
            return x ** 1
        return
    if y == 2:
        def fn(x):
            return x ** 2
        return
    if y == 3:
        def fn(x):
            return x ** 3
        return
    if y == 4:
        def fn(x):
            return x ** 4
        return
pow2 = make_power(2)
print("5的平方是",power2(5))

pow3 = make_power(3)
print("5的平方是",power3(6))
#------------------------------------
#此示例闭包
f(x)= a * x **2 + b * x + c的函数
def get_fx(a,b,c):
    def fx(x):
        teturn a*x**2+b*x*1+c
    return fx
f123 = get_fx(1,2,3)
print(f13(20))
print(f13(50))
f654 = get_fx(6,5,4)
print(f13(20))
print(f13(50))

#=============================================================

'''
2.编写程序求下列多项式的值sn = 1/1 - 1/3 + 1/5- 1/7 +   个分式的值是多少将此值乘以4后打印出来
'''
#------方法一-------------------
def duoxiangshi1(n):
    sn = 0
    i = 1
    for x in range(1,n+1,2):
        sn += 1/x * (-1) ** (i + 1)
        i += 1
    return sn * 4
print(duoxiangshi1(10000))
#-----方法二-----------------------
def duoxiangshi2(n):
    sn = 0
    i = 1
    for x in range(1,n+1,2):
        sn += 1/x * i
        i *= -1
    return sn * 4
print(duoxiangshi2(10000))
#-----方法三----------------------
def duoxiangshi3(n):
    sn = 0
    for x in range(n+1):
        sn += (-1) ** x * 1 / (2 * x + 1)
    return sn * 4
print(duoxiangshi3(10000))
#====================================
'''
3.编写函数fun,其功能是求下列多项式的和
        sn= 1+ 1/1!+1/2!+...1/n!
    建议用数学模块中的math.factoral来求当n=50时sn的值为
'''
import math
def myfac(n):
    if n == 0:
        return 1
    a = 1/math.factorial(n)
    return myfac(n - 1) + a
print(myfac(50))
#-----------------------------------------------
import math
def myfac(n):
    if n == 0:
        return 1
    # a = 1/math.factorial(n)
    return myfac(n - 1) + 1/math.factorial(n)
print(myfac(50))
#----------------------------------------------------
import math
def fun(n):
    sn = 0
    for i in range(0,n+1):
        sn += 1/math.factorial(i)
    return sn
return sum(map(lambda x:1/math.factorial(x),range(n+1)))
print(fun(50))

#============================================================

#------------------------------
s = input("请输入表达式")
v = eval(s)  # 等同于 v = 100+200+300
print("您输入的结果为",v)
#-------------------------------
x = 100
y = 200
while  True:
    s = input("请输入表达式")
    if not s:
        break
    v = eval(s)
    print(v)
#--------------------------------
x = 100
y = 200
v = eval("x+y")
print(v)
#--------------------------------
dict_local = ('x':1,'y':2)
v eval('x+y',None,dict_local)
print(v)
#--------------------------------
dict_global= ('x':10'y':20)
v eval('x+y',dict_global,{'y':2})
print(v)
#-------------------------------
v = eval('x+y',None,{'y':2})
print(v)

#========================================

x = 100
y = 200
s = ''' z = x + y
print('z=',z)
print("hello word")
del z
'''
exec(s)  #执行这个程序
dict_local = {'x',1}
exec(s,None,dict_local)

print(z)

#======================================================

#---------斐波那契数列----------
l = []
x , y = 1 ,0
while len(l) < 40:
    x , y = y , y + x
    l += [y]
print(l)

print(len(l))

#================================================================

判断是否为素数
def is_prime(x):
    if x < 2:
        return False
    for i in range(2,x):
        if x % i == 0:
            return False
    return True
l = []
for x in filter(is_prime,range(100,200)):
    l.append(x)
print(l)
s = sum(filter(is_prime,range(300,400)))
print(s)
#=========================================================
#判断是否为素数
def is_prime(x):
    if x < 2:
        return False
    for i in range(2,x):
        if x % i == 0:
            return False
    return True
l = list[filter(is_prime,range(100,200))]
print(l)
s = sum(filter(is_prime,range(300,400)))
print(s)

#=====================================================

#判断一是否为素数
def is_prime(n):
    if n < 2:
        print("为素数")
    for x in range(2,n):
        if n % x == 0:
            print("不是素数")
            break
    else:
        print("为素数")
n = int(input("请输入一个整数"))
is_prime(n)
#---------方法二---------------------
def is_prime(n):
    if n < 2:
        return False
    for x in range(2,n):
        if n % x == 0:
            return False
    return True
def print_prime(n):
    for x in range(n):
        if is_prime(x):
            print(x,end = " ")
    print()
print_prime(100)
#---------方法三---------------------
def is_prime(n):
    if n < 2:
        return False
    for i in range(2,n):
        if n % i == 0:
            return False
            break
    else:
        return True
def print_prime(n):
    l = []
    for x in range(2,n):
        y is_prime(x):
        if y is True:
            l.append(y)
    return l
print(print_prime(100))
#---------方法三---------------------
def is_prime(x):
    if x < 1:
       print("素数")
    for i in range(2,x):
        if x % i == 0:
           return False
    return True
def print_primes(n):
    l = []
    for x in range(2,n):
        y = is_prime(x)
        if y is True:
           l.append(x)
    return(l)
print(print_primes(100))
#------------------------------------
def is_prime(x):
    l = []
    if x < 1:
       print("素数")
    for i in range(2,x):
         for j in range(2,i):
             if i % j == 0:
                break
         else:
              l.append(i)
    return l
print(is_prime(100))
#=================================================
#---------------------------------------------
def power2(x):
    return ** 2
#可以生成一个可迭代对象的,次可迭代对象可以生成1-9的自然数的平方
for x in map(power2,range(1,10)):
    print(x)
#-----------------------------------------------
l1 = [1,2,3,4]
l2 = [5,6,7,8]
#生成一个可迭代对象,次可迭代对象生成的数据为
# 1**5,2**6,3**7,4**8
def power_x_y(x,y):
    return(x**y)
for x in map(power_x_y,l1,l2):
    return(x)    
for x in map(pow,range(1,5),[1,2,3,4],range(5,10))
sum(map(pow,[1,2,3,4],[1,2,3,4]))
#-------------------------------------------
def f1(x):
    return x ** 2
print(sum(map(f1,range(1,10))))
def f2(y):
    return y ** 3
print(sum(map(f2,range(1,10))))
def f3(a,b):
    return a ** b
print(sum(map(f3,range(1,10),range(9,0,-1))))
#================================
def power(x):
    return x ** 2
s = 0
for x in map(power,range(1,10)):
    s += x
print(x)
#--------------------------------
s = 0
for x in map(lambda x : x ** 3 ,range(1,10)):
    s += x
print(s)
#--------------------------------------------
sum(map((lambda x , y :x ** y),range(1,10),range(9,0,-1)))
#=========================================================
#装饰器示例
def mydeco(fn):
    def fx():
        print("fx函数被调用")
    retutn fx
@mydeco      # 等同于def myfunc()
def myfunc():
    print("函数myfunc调用")  
#myfunc = mydeco(myfunc)
myfunc()
#======================================
def mydeco(fn):
    def fx():
        print("+++调用之前+++++++")
        fn()
        print("+++调用之前------+")
    return fx
@mydeco     
def myfunc():
    print("函数myfunc调用")  
myfunc()
#========================================
def mydeco(fn):
    print("装饰器函数被调用了")
    def fx():
        print("fx被调用")
    return fx
@mydeco
def myfunc():
    print("函数myfunc被调用")
myfunc()
myfunc()
myfunc()
#----------------------------------------
'''
此示例示意装饰器在不改变元函数和调用者行为的情况下实现改变原有函数功能
'''
def privillage_check(fn):
    def fx(name,x):
        print('正在检测权限......')
        fn(name,x)
    return  fx
@privillage_chexk
def savemoney(name,x):    #程序员甲写的函数,用于存钱
    print('正在进行权限验证')
    print(name,'存钱',x,'元')
@privillage_chexk
def withdraw(name,x):       #程序员乙写的函数,用于存钱
    print(name,'取钱',x,'元')
#=============以下是调用者写的==============================
savemoney('小张',200)
savemoney('小李',400)
withdraw('小李',500)
#-----------------------------------------------------
'''
此示例示意装饰器在不改变元函数和调用者行为的情况下实现改变原有函数功能
'''
#增加余额变动提醒
def send_message(fn):
    def fy(name,x):
        fn(name,x)  #先办业务
        print("先发短信",name,'办理了',x,'元')
    return fy
#装饰器用来权限验证
def privillage_check(fn):
    def fx(name,x):
        print('正在检测权限......')
        fn(name,x)
    return  fx
@send_message
@privillage_chexk
def savemoney(name,x):    #程序员甲写的函数,用于存钱
    print('正在进行权限验证')
    print(name,'存钱',x,'元')
@privillage_chexk
def withdraw(name,x):       #程序员乙写的函数,用于存钱
    print(name,'取钱',x,'元')
#=============以下是调用者写的==============================
savemoney('小张',200)
savemoney('小李',400)
withdraw('小李',500)
#======================================================
#-------方法一----------------------------

def myprint(*args,sep = "",end = "\n"):
    l = [str(x) for x in args]
    s = sep.join(l)
    s += end
    print(s,end = '')
print(myprint(1,2,3,4))
#-------方法二----------------------------
def myprint(*arg,sep ="",end = "\n"):
    print(*arg,sep = sep,end = end)

print(myprint(1,2,3,4))

#========================================================

#------方法一--------------------------
def myrange(start,stop=None,step=1):
    r_list = []
    if stop is None:
        stop = start
        start = 0
    if step > 0:
        while start < stop:
            r_list.append(start)
            start += step
    else:
        for x in range(start,stop,step):
            r_list.append(x)
    return r_list
print(myrange(4))
print(myrange(4,6))
print(myrange(1,10,3))
#-----------方法二---------------------
def myrange(start,stop = None,step = 1):
    r_list = []
    if stop is None:
        stop = start
        start = 0
    return list(range(start,stop,step))
print(myrange(4))
print(myrange(4,6))
print(myrange(1,10,3))
#============================================================
#---------方法一--------------------
def narcissistic():
    l = []
    for x in range(1,10):
        for y in range(10):
            for z in range(10):
                if x * 100 + y * 10 + z == x ** 3 + y **3 + z**3:
                    a = "%d%d%d" % (x,y,z)
                    l.append(a)
    return l
lst = narcissistic()
num = input("请输入一个三位数")
if num in lst:
    print("您输入水仙花数")
else:
    print("您输入的不是水仙花数")
#---------方法二--------------------
for x in xrange(10,1000):
    bai = x // 100
    shi = x % 100 //10
    ge = x % 10
    if x == bai ** 3 + shi ** 3 + ge ** 3
        print(x)
#---------方法三-------------------
for x in xrange(100,1000):
    s = str[x]
    bai = int(s[0])
    shi = int(s[1])
    ge = int(s[2])
    if x == bai ** 3 + shi ** 3 + ge ** 3
        print(x)
#---------方法四-------------------
def is_narcissistic(x):
    for x in range(100,1000):
        bai = x // 100
        shi = x % 100 // 10
        ge = x % 10
        if x == bai ** 3 + shi ** 3 + ge ** 3
            return True
        return False
for x in range(100,1000):
    if is_narcissistic(x):
        print(x)

#================================================================


import random
def play_cards():
    color = ['\u2660 ','\u2663 ','\u2665 ','\u2666 ']
    cards = ['A',2,3,4,5,6,7,8,9,10,'J','Q','k']
    lst = ['大王','小王']
    for x in color:
        for y in cards:
            z = x + str(y)
            lst.append(z)
    return lst
a = play_cards()
random.shuffle(a)
# print(a)
num1 = input("点击发牌")
a1 = a[0:17]
print(a1)
b = a[17:35]
num2 = input("点击发牌")
print(b)
c = a[35:51]
num3 = input("点击发牌")
print(c)
d = a[51:]
num4 = input("点击发牌")
print(d)
#=============================
import random
l = ['A'] + [str(x) for x in range(2,11)] + list['JQK']
kinds = ['\u2660 ','\u2663 ','\u2665 ','\u2666 ']
poke = ['大王','小王']
for k in kinds:
    for n in l:
        poke.append(k+n)
poke2 = list(poke)   #复制一份
random.shuffle(poke2)
input()
print("第1个人的十七张牌",poke2[:17])
input()
print("第2个人的十七张牌",poke2[17:34])
input()
print("第3个人的十七张牌",poke2[34:51])
input()
print("底牌",poke2[51:])   


#=============================================================

#-----递归函数---------
#求n的阶乘
def myfac(n):
    if n == 1:
        return 1
    return n * myfac(n-1)

print(myfac(5))
#求1-100的和
def mysum(n):
    if n == 1:
        return 1
    return n + mysum(n-1)
print(mysum(100))
#---------------------------------
def get_age(n):
    if n == 1
        return 10
    return get_age(n-1) + 2
print("第五个人的年龄为"get_age(5))    
# #=================================    
def get_age(n):
    age = 10
    for x in range(2,n+1):
        age += 2
    return age
print("第五个人的年龄为",get_age(5))
#------------------------------------
def is_prime(x):
    l = []
    if x < 1:
       print("素数")
    for i in range(2,x):
         for j in range(2,i):
             if i % j == 0:
                break
         else:
              l.append(i)
    return l
print(is_prime(100))
#-----------------------------------
def sum_list(lst):
  s = 0
  for x in lst:
    if type(x) is int:
      s += x
    else:
        s += sum_list(x)
  return s
l = [[3,5,8],10,[[13,14],15,18],20]
print(sum_list(l))
#===============================================================
names = ['Tom','Jerry','Spike','Tyke']
def get_key(n): #用来绑定参数中的元素,绑定对象此函数需要返回一个能比较大小的依据
    return n[::-1]
l = sorted(names,key = get_key)
l = sorted(names, key = lambda n : n[::-1])
print(l)

#================================================================

import time
def run_clock():
    while True:
        t = time.localtime()  #得到时间元祖
        hms = t[3:6]
        print("%02d:%02d:%02d" % hms,end='\r')
        time.sleep(1)
if  __name__ == '__msin__':
    run_clock
'''
2.编写一个闹钟程序,启动设置定时时间,到时间以后打印时间到,然后退出
'''
import time
def alarm(hour,minute):
    while True:
        t = time.localtime()
        hm = t[3:5]
        print("%02d:%02d:%02d" % t[3:6],end='\r')
        if hm == (hour,minute):
            print("时间到")
            return
if __name__ == '__main__':
    h = int(input("请输入时间"))
    m = int(input("请输入分钟"))

    alarm(h,m)

#===========================================================

l = []
while True:
    s = input("请输入单词")
    if not s:
        break
    l.append(s)
print("您输入了%d行",len(l))
l2 = []
for s in l:
    for ch in "0123456789,():""-,[]":
        s = s.replace(ch,"")
    l2.append(s)
    words_set = set()
    for s in l2:
        words = s.split(" ")
        for w in words:
            words_set.add(w)
print("单词的个数为",len(words_set))
print(words_set)

猜你喜欢

转载自blog.csdn.net/Robin13438235412/article/details/80786388