第二周总结及复习
2018-03-10 11:40
211 查看
第一个感悟:
用三元条件运算符来实现一些基本的操作和功能会让代码量减少很多.
例如:is_true = 0 #像这样可以控制print函数的输出与输出,如果想实现某种条件打印某些内容可以使用到
print('1' if is_true else '2'')
m = 2 if is_true else 3
# 还比如用元组来做找最大值,第二大值的例子.
list1 = [1,1,2,2,3,3]
a = list1[0]
b = list1[1]
(a, b) = (a, b) if a > b else (b, a)
for i in list1:
(a, i) = (a, i) if a > i else (i, a)
# 这样循环下来,我们就可以拿到最大值a了, 是不是比常规的写法要简单的多呢!这一周还有一些难点,
比如说: 递归函数的使用及对如何创建一个递归函数来实现一些事情.
例如:#求1-100递归求和
def recursive_sum(num):
if num == 1:
return 1
return num + recursive_sum(num - 1)
P. 递归求和就比较好理解了,不做过多阐述
#10级台阶,每次可以走1-3级,请问走完10级台阶有几种走法
def walk(n):
if n < 0:
return 0
elif n == 0:
return 1
return walk(n - 1) + walk(n - 2) + walk(n - 3)
P.在这里对递归公式的推导是一个难题,回溯条件其实很好可以得到. 需要理解的是如果是n级台阶,每次只能上3阶的话,那么上n级台阶的方法是(n-1)阶,(n-2)阶,(n-3)阶台阶的方法的总和
#汉诺塔
def hanoi(n, a, b, c):
if n > 0:
hanoi(n - 1, a, c, b)
print(a,'----->', b)
hanoi(n - 1, c, b, a)还有一个经典的递归函数,利用辗转相除法得到最大公约数.def gcd(x, y):
if x > y:
return gcd(y, x)
elif y % x == 0:
return x
else:
return gcd(y % x, x)这还有一个枚举需要单独拿出来讲一下,操作枚举可以得到一个索引位置和该位置对应的元素
简单举例如下:def main():
f = [100, 200, 300]
for index,val in enumerate(f):
print(index, ':', val)
# CRUD操作 Create Read Update Delete #增 删 改 查接下来的是,分别用递归和循环得到的斐波拉契序列:def foo(n):
if n < 0:
return 0
if n == 1:
return 1
return foo(n-1) + foo(n-2)
def main1():
f = [1, 1]
for index in range(2, 20):
val = f[index - 1] + f[index - 2 ]
f.append(val)
print(f)
main1()
list1 = [1]
for i in range(2, 21):
list1.append(foo(i))
print(list1)
列表生成式和列表生成器:f = [x + y for x in 'ABCDE' for y in '1234567']
f = [x for x in range(1, 10)]
f = [x ** 2 for x in range(1, 10)]
f = [x ** x for x in range(1, 10)]
上面是使用列表生成式直接得到的是列表内容
f = (x ** x for x in range(1, 10))
在这里会得到一个可迭代的生成器
用三元条件运算符来实现一些基本的操作和功能会让代码量减少很多.
例如:is_true = 0 #像这样可以控制print函数的输出与输出,如果想实现某种条件打印某些内容可以使用到
print('1' if is_true else '2'')
m = 2 if is_true else 3
# 还比如用元组来做找最大值,第二大值的例子.
list1 = [1,1,2,2,3,3]
a = list1[0]
b = list1[1]
(a, b) = (a, b) if a > b else (b, a)
for i in list1:
(a, i) = (a, i) if a > i else (i, a)
# 这样循环下来,我们就可以拿到最大值a了, 是不是比常规的写法要简单的多呢!这一周还有一些难点,
比如说: 递归函数的使用及对如何创建一个递归函数来实现一些事情.
例如:#求1-100递归求和
def recursive_sum(num):
if num == 1:
return 1
return num + recursive_sum(num - 1)
P. 递归求和就比较好理解了,不做过多阐述
#10级台阶,每次可以走1-3级,请问走完10级台阶有几种走法
def walk(n):
if n < 0:
return 0
elif n == 0:
return 1
return walk(n - 1) + walk(n - 2) + walk(n - 3)
P.在这里对递归公式的推导是一个难题,回溯条件其实很好可以得到. 需要理解的是如果是n级台阶,每次只能上3阶的话,那么上n级台阶的方法是(n-1)阶,(n-2)阶,(n-3)阶台阶的方法的总和
#汉诺塔
def hanoi(n, a, b, c):
if n > 0:
hanoi(n - 1, a, c, b)
print(a,'----->', b)
hanoi(n - 1, c, b, a)还有一个经典的递归函数,利用辗转相除法得到最大公约数.def gcd(x, y):
if x > y:
return gcd(y, x)
elif y % x == 0:
return x
else:
return gcd(y % x, x)这还有一个枚举需要单独拿出来讲一下,操作枚举可以得到一个索引位置和该位置对应的元素
简单举例如下:def main():
f = [100, 200, 300]
for index,val in enumerate(f):
print(index, ':', val)
# CRUD操作 Create Read Update Delete #增 删 改 查接下来的是,分别用递归和循环得到的斐波拉契序列:def foo(n):
if n < 0:
return 0
if n == 1:
return 1
return foo(n-1) + foo(n-2)
def main1():
f = [1, 1]
for index in range(2, 20):
val = f[index - 1] + f[index - 2 ]
f.append(val)
print(f)
main1()
list1 = [1]
for i in range(2, 21):
list1.append(foo(i))
print(list1)
列表生成式和列表生成器:f = [x + y for x in 'ABCDE' for y in '1234567']
f = [x for x in range(1, 10)]
f = [x ** 2 for x in range(1, 10)]
f = [x ** x for x in range(1, 10)]
上面是使用列表生成式直接得到的是列表内容
f = (x ** x for x in range(1, 10))
在这里会得到一个可迭代的生成器
相关文章推荐
- 2017暑假 第二周 学习总结(复习)
- 一周复习总结(一)第二周
- Python 第二周复习总结
- 20145311 《信息安全系统设计基础》第二周学习总结
- 第二周周末总结
- C语言复习总结
- 2017.9.10开学第二周总结(下)(周日比赛)
- 20155321 2016-2017-2 《Java程序设计》第二周学习总结
- 7月份复习总结&8月份复习计划
- Java反射与内部类复习总结
- 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结
- 20155238 2016-2017-2 《Java程序设计》第二周学习总结
- 最近开始复习php,做内部系统的时候的小总结
- 第二周学习总结
- [复习]清除浮动的几种方法总结
- linux安全第二周学习总结
- User-Interface第一part的复习总结
- ARM期末复习总结
- 阶段复习——第一个年终总结
- 对期末复习易错,易混点总结