python 06变量的作用域与数据结构

# -*- coding: utf-8 -*-
"""
Created on Thu Jun 13 19:55:15 2019

@author: cheng
"""
-局部变量
def fun():
    print(a1)
    print("I am a")
    a2 = 99
    print(a2)

-局部变量改为全局变量    
print(a1)
fun()
print(a2)
def fun():
    global b1
    b1 = 100
    print(b1)
    print("I am a")
    a2 = 99
    print(a2)

-eval函数
a = 1
b = 2
def fun(c,d):
    e =111;
    print('Locals={0}'.format(locals()))
    print('Globals={0}'.format(locals()))

fun(100,200)
x = 100;
y = 200;
z = eval('x + y')
print('z')
print(z)

-exec()函数
x = 100
y = 200
z1 = x+ y
z2 = exec("print('x+y':x+y)")
print(z1)
print(z2)

x = 100
y = 200
z1 = x+ y
z2 = exec("print('x+y:',x+y)")
print(z1)
print(z2)

-递归数据的限制
x = 0
def fun():
    global x
    x = x + 1
    print(x)
    #函数自己调用自己
    fun()

-斐波切纳数列
fun()
def fib(n):
    if n== 1:
        return 1
    if n== 2:
        return 1
    return fib(n-1)+fib(n-2)


fib(4)

####内置数据结构
-list() 列表
l1=[]
print(type(l1))

l3 = [1,2,3,4,5]
print(type(l3))
print(l3)

####列表常用操作
-访问
 - 使用下标操作(索引)
 -列表的位置是从0开始
-分片操作
 -对列表进行任意一段的截取
l = [5,4,6,8,2,3] 
l[3]

-分片
-注意截取的范围
l[1:3]
-下标可以为空
l[:]
-到4结束
l[:4]

-分片可以控制增长幅度,默认为1
-增长幅度为2
l[::2]

-下标值,幅度可以为负
-注意结果不同
l[-4:-2]
l[-2:-4:-1]

-分片操作是生成一个新的操作
 -内置函数id,负责显示一个变量或者数据的唯一确定编号

a = 100
b = 200
c = a
print(id(a))
print(id(c))
print(id(b))

-通过id可以直接判断分片是新成的
l = [1,5,2,3,6,8]
l1 = l[:]
l2 = l1
print(id(l))
print(id(l1))
print(id(l2))

l[1] = 100
print(l)
print(l1)

l1[1]=100
print(l1)
print(l2)

####汉诺塔问题
 -1.规则:
     每次移动一个盘子
     任何时候大盘子在下面,小盘子在上面
 -2.方法:
     n=1,直接把a放在C上
     n=2,把小盘子从A放到B上,A ->b
         把大盘子从a到c,在把小盘子从b到c
    n=3.....

def hano(n,a,b,c):
    '''
    n:代表几个盘子
    a:代表第一个塔
    b:代表第二个塔
    c:代表第三个塔
    '''
    if n==1:
        print(a,'-->',c)
        return None
    
    if n==2:
        print(a,'-->',b)
        print(a,'-->',c)
        print(b,'-->',c)
        return None
    
    hano(n-1,a,c,b)
    print(a,'-->',c)
    hano(n-1,b,a,c)

a = 'A'
b = 'B'
c = 'C'

n=3
hano(n,a,b,c)

####List(列表)
 -del(删除),id值和原来的一致;
a = [1,2,3,4,5,6]
del a[2]
print(a)

 -列表相加
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
d = a+b+c
print(d)
 -乘号运算
b = a * 3
print(b)

 -成员运算
f = 8
f1 = f in a
print(f1)


####链表的遍历
  -for
  -while

a = [1,2,3,4,5]

#挨个打印a里面的元素
for i in a:
    print(i)
    
####while循环访问list(不推荐)
a = [1,2,3,4,5]
length = len(a)
indx = 0
while indx < length:
    print(a[indx])
    indx =indx + 1
    
#双层列表循环
a = [['one','1'],['two','2'],['three','3']]

for k,v in a:
    print(k,'-->',v)
    
#双层列表循环变异
a = [['one','1','a'],['two','2','b'],['three','3','c']]

for k,v,w in a:
    print(k,'-->',v,'--',w)

####列表内涵:list content
 -1.通过简单方法创作列表
a = [1,2,3,4,5]
b = [i*10 for i in a]
print(b)

 -2.把a里面的偶数放入b
a = [x for x in range(1,15)]
b = [m for m in a if m % 2 ==0]
print(b)     

 -3.列表生成可以嵌套
  -由两个列表a,b,取整百的数
a = [i for i in range(1,6)]
print(a)
b = [i for i in range(100,600) if i % 100 ==0]
print(b)
  -列表可以嵌套
c = [m+n for m in a for n in b]
print(c)
  -方法2
for m in a:
    for n in b:
        print(m+n,end=' ')
print()
   -生成的列表加条件表达式
c = [m+n for m in a for n in b if m+n<300]
print(c) 

####关于列表的常用函数
-len:求长度
a = [x for x in range(1,11)]
print(len(a))
-max:求最大值,min:求最小值
print(max(a))
-list:将其他格式换成list
a =[1,2,3]
print(list(a))

s = 'I love you'
print(list(s))
print(list(range(4,8)))

发布了89 篇原创文章 · 获赞 109 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/c1z2w3456789/article/details/93394163