Python学习(四)
目录
Python之递归
求阶乘
循环求阶乘,创建一个.py文件:
def factorial(n):
result = n
for i in range(1,n):
result*=i
return result
number = int(input('输入:'))
result = factorial(number)
print('%d的阶乘是:%d'%(number,result))
运行,输入数字,结果如下:
递归求阶乘,创建一个.py文件:
def factorial(n):
if n == 1:
return 1
else:
return n*factorial(n-1)
number = int(input('输入:'))
result = factorial(number)
print('%d的阶乘是:%d'%(number,result))
结果同上。
可以手动设置递归的深度,python默认100
>>>import sys
>>>sys,setrecursionlimit(1000)
斐波那契数列的实现
迭代法,创建一个.py文件:
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误!')
return -1
while(n-2) > 0:
n3 = n1 + n2
n1 = n2
n2 = n3
n -= 1
return n3
result = fab(20)
if result != -1:
print('结果:%d' %result)
运行结果
递归法,创建一个.py文件:
def fab(n):
if n < 1:
print('输入有误!')
return -1
if n == 1 or n==2:
return 1
else:
return fab(n-1)+fab(n-2)
result = fab(20)
if result != -1:
print('结果:%d' %result)
结果同上,递归40次就需要一定的时间了,但是迭代会很快。
汉诺塔
代码如下:
def hanoi(n, x, y, z):
if n == 1:
print(x,'->',z)
else:
hanoi(n-1, x, z, y) #将前n-1个盘子从x移动到y上
print(x,'->',z) #将最底下的最后一个盘子从x移动到z上
hanoi(n-1, y, x, z)#将y上的n-1个盘子移动到z上
n = int(input('请输入汉诺塔的层数:'))
hanoi(n, 'x', 'y', 'z')
结果如下:
Python之字典
字典是Python中唯一的映射类型
当索引不要用时—字典
看一个例子:
>>> brand = ['李宁','耐克','阿迪达斯']
>>> slogan = ['一切皆有可能','Just do it','Impossible is nothing']
>>> print('耐克的口号是:',slogan[brand.index('耐克')])
耐克的口号是: Just do it
使用字典:
>>> dict1 = {'李宁':'一切皆有可能','耐克':'Just do it','阿迪达斯':'Impossible is nothing'}
>>> print('耐克的口号是:',dict1['耐克'])
耐克的口号是: Just do it
创建和访问字典
方式一:
>>> dict2 = {1:'one',2:'two',3:'three'}
>>> dict2[2]
'two'
>>> dict3 = {} #空
方式二:
>>> dict3 = dict((('F',70),('i',105),('s',115),('h',104)))#伪装成只有一个参数,是一个元组
>>> dict3
{'F': 70, 'i': 105, 's': 115, 'h': 104}
方式三:
>>> dict4 = dict{a='A',b='B'}
修改
>>> dict4['a'] = 'AA'
添加
>>> dict4['c'] = 'C'
内建方法
>>> dict1 = { }
>>> dict1.fromkeys((1,2,3))
{1:'None',2:'None',3:'None'}
>>> dict1.fromKeys((1,2,3),'Number')
{1:'Number',2:'Number',3:'Number'}
#不能分别设置值,也不能批量修改值
>>> dict1 = dict1.fromkeys(range(32),'赞')
>>> dict1
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
获取key值
>>> dict1.keys()
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
>>> for eachKey in dict1.keys():
print(eachKey)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
获取value值
>>> dict1.values()
dict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞'])
>>> for eachValue in dict1.values():
print(eachValue)
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
赞
访问字典中不存在的项
>>> dict1.get(32)
>>> print(dict1.get(32)) #访问字典中不存在的项,用get不会报错,直接打印会抛出异常
SyntaxError: invalid character in identifier
>>> dict1.get(32,'木有') #不存在会打印木有,存在打印值
'木有'
是否存在
>>> 31 in dict1
True
>>> 32 in dict1
False
清空
>>> dict1.clear() #建议使用这种方法
#直接让dict1指向空字典,不严谨,(dict1 = { })
拷贝
>>> a = {1:'one',2:'two',3:'three'}
>>> b = a.copy
>>> c = a
#a与c的位置相同,与b的位置不同(用id(a)查看a的地址)
给定键,弹出对应的值
>>> a.pop(2)
'two'
>>> a
{1: 'one', 3: 'three'}
弹出一个的项(随机)
>>> a.popitem()
(3, 'three')
与get类似,但是找不到对应的键时,会自动添加
>>> a.setdefault(4)
>>> a
{1: 'one', 4: None}
#找不到4,就会自动添加(4,None)
用b更新a
>>> b
{4: 'four'}
>>> a
{1: 'one', 4: None}
>>> a.update(b)
>>> a
{1: 'one', 4: 'four'}
Python之集合
创建集合
- 直接把一堆元素用花括号括起来
- 使用set()工厂函数
>>> num2 = {1,2,2,3,4,4,5,5}
>>> num2
{1,2,3,4,5}
#会自动清除重复的元素
#集合中元素无序,不支持索引
>>> set1 = set([1,2,3,4,5,5])
>>> set1
{1,2,3,4,5}
去除列表中重复的元素
>>> num1 = [1,2,3,4,5,5,3,1,6]
>>> temp = []
>>> for each in num1:
if each not in temp:
temp.append(each)
>>> temp
[1, 2, 3, 4, 5, 6]
法二:
>>> num1 = list(set(num1))
>>> num1
[1, 2, 3, 4, 5, 6]
#转换为集合,在转换为列表
访问集合中的值
可以使用for把集合中的数据一个个读取出来
可以通过in和not in判断一个元素是否在集合中已经存在
>>> 1 in num2
True
>>> num2.add(6)
>>> num2.remove(5)
{1,2,3,4,6}
不可变集合
>>> num3 = frozenset([1,2,3,4,5])
>>> num3.add(8)
Traceback (most recent call last):
File "<pyshell#117>", line 1, in <module>
num3.add(8)
AttributeError: 'frozenset' object has no attribute 'add'
抛出异常
Traceback (most recent call last):
File "<pyshell#117>", line 1, in <module>
num3.add(8)
AttributeError: 'frozenset' object has no attribute 'add'