# -*- 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)))