data1=int(input("请输入第一个数:"))
data2=int(input("请输入第二个数:"))
l=[]
for a in range(data1,data2+1):
    i=2
    while i<a:
        if a%i==0:
            print(a,"不是质数")
            break
        i+=1
    else:
        print(a,"是质数")
        l.append(a)
print("全部质数是:",l)
sum=0
for j in range(len(l)):
    sum+=l[j]
    if j==0:
        a=l[j]
        b=l[j]
    else:
        if l[j]>a:
            a=l[j]
        elif l[j]<b:
            b=l[j]

print("最大值是{},最小值是{},和为{}".format(a,b,sum))

#函数:
def func():
    print("A")
    print("B")
    print("C")
    print("D")
floor=int(input("请输入层数:"))
if floor==1:
    print("欢迎来到1楼:")
    func()
if floor==2:
    print("欢迎来到2楼:")
    func()
if floor==3:
    print("欢迎来到3楼:")
    func()

#参数。
def func(a,b):#a,b为传入参数。
    c=a+b
    print("{}+{}={}".format(a,b,c))
func(2,3)#调用函数。
func(12,456)

#返回值。
def func(a,b):
    c=a+b
    return c#返回c值。
x=func(9,5)#调用函数,把结果传递给x
if x>10:
    print("打折")
else:
    print("不打折")

def func(a,b):
    c=a+b
    d=a-b
    e=a*b
    f=a/b
    return c,d,e,f
x=func(6,2)#将return的值传给一个变量则返回的是元组。
print(x)
i,k,l,m=func(6,2)#将return的值分别对应传给每个变量,则返回对应结果。
print(i,k,l,m)

def func(a):
    a+=2
    return a
b=4
func(b)
print(b)#整型不可改变。

#列表可变:
def func(a):
    a.append(3)
    a=6#这个a与上面的a没有关系,不运行。
b=[]
func(b)
print(b)

#关键字参数。
def func(name,age,sex):
    print("我叫",name)
    print("年龄",age)
    print("性别",sex)
    #return 0

func(name='Bob',age=19,sex='男')
#print(x)
#默认参数。
def func(name,age,sex='男'):#默认参数必须在普通参数的右边否则报错。
    print("我叫", name,end=' ')
    print("年龄", age,end=' ')
    print("性别", sex)
func('ab',19)#不给sex赋值的时候使用默认“sex=男”
func('cd',12,'男')
func('df',14,'女')

#收集参数:
def func(*args):#args是参数集合,可以接受任意数量的参数,用于参数不确定数量的情况。
    print(args)
    for i in args:
        print(i,end=' ')
    print()
func(1,2,3)
func(4,5,6,7,8,9)

#关键字收集参数。
def func(**kwargs):#以键值对的 形式存入参数。
    print(kwargs)
    for k,v in kwargs.items():
        print(k,"--",v,end=' ')
    print()
func(name='Bob',age=19,sex='男')
func(name='Lily',age=19,sex='女',addr='NYC')

#面试题。
def func(a,b,d=[]):
    d.append('x')#d运行时代码没错,但是在中间如果修改了他,则下次调用会改变默认值。
    print(d)
func(1,2)
func(10,20)

#函数的嵌套。
def fun1():
    print("外层函数")
    def fun2():
        print("内层函数")
    fun2()
fun1()#调用了外层再调用内层,各个函数与调用都在各自的同一层。

#局部变量和全局变量。
a=0
def func():
    a=2
    print(a)
func()#优先使用局部变量。
print(a)#局部变量的操作不影响全局变量。返回结果还是0

#全局变量如果是可改变类型,则函数可以对其进行修改,调用一次改变一次。
a=[]
def func():
    a.append(1)
    print(a)
func()
print(a)#此时的a是已经修改的a。
#函数优先读取局部变量,,可以读全局变量但不能对其修改。
a=3
def func(a):#若是func()的形式,则说明函数并没有要求访问全局变量a的值。
    a+=5#a+=5是对变量进行操作,函数优先读取的是局部变量且无法对全局变量进行修改,若无a的定义则报错。
func(a)#没有运行?
print(a)

a=3
def func():
    print(a)#不报错。
func()

a=3
def func():
    global a#将局部变量声明成全局变量。
    a=5
    print(a)
func()
print(a)

#非全局变量:non-local
def fun1():
    a=30
    def fun2():
        nonlocal a
        a=40
    print(a)
    fun2()
    print(a)
fun1()#先调用函数fun1,此时先打印的是print(a),再调用fun2,变量变成非局部变量。

#LEGB法则。L-local 局部  E-enclose 嵌套 G-global 全局 B-BUILT-IN  内置
a=300
b=1
c=2
def fun1():
    b=200
    c=3
    def fun2():
        c=100
        print(c)#local
        print(b)#enclose
        print(a)#global
        print(max)#built-in
    fun2()
fun1()

#函数递归,阶乘问题。
def func(n):
    if n==1:
        return 1
    else:
        return n*func(n-1)
x=func(5)
print(x)

def fib(n):
    if n==1 or n==2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
for i in range(1,12):
    print("第{}个月的兔子个数是{}".format(i,fib(i)))

#匿名函数。
x=lambda a,b:a*10+b*7
print(x(3,5))

y=lambda x:x*10+5
print(y(5))

d={'name':'kob','age':18,'addr':'NYC'}
x=lambda d:d['age']
print(x(d))

a=[1,21,-22]
b=max(a,key=abs)#以绝对值大小为比较条件。
print(b)

a=[1,-2,-3,4,7,9]
a.sort(key=abs)#将列表内元素按照绝对值大小升序排列。
print(a)

a=[
    {'name':'kob','age':18,'addr':'NYC'},
    {'name':'kob','age':28,'addr':'BJ'} ,
    {'name':'kob','age':17,'addr':'LD'}
]
b=max(a,key=lambda x:x['age'])#以age的最大值来筛选a中元素。
print(b)

#面试题。
i=10
def a(x):
    print(x*i)
i=20
def b(x):
    print(x*i)
i=30
def c(x):
    print(x*i)
a(3)#i取的是最后一次被赋予的值,即i=30。因为i的赋值都是全局变量
b(3)
c(3)

a = [lambda x: x * i for i in range(3)]  # 循环出a[0],a[1],a[2]时i循环已经用完,此时i=2就已经固定不在循环,a[0],a[2],a[3]是三个函数x*i,再给x赋值时就是x*2.
print(a[0])  # 调用lambda的格式。
print(a[1])
print(a[2])
03-21 20:28