概念
一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器:generator。
題目
楊輝三角定義如下:
1
1? 1
1? 2? 1
1? 3? 3? 1
1? 4? 6? 4? 1
1? 5? 10? 10? 5? 1
把每一行看做一個(gè)list,試寫一個(gè)generator,不斷輸出下一行的list:
# -*- coding: utf-8 -*-
def triangles():
# 期待輸出:
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break
答案
def triangles():
L=[1]
while True:
yield? L
L=[1]+[L[i]+L[i+1]for i in range(len(L)-1)]+[1]
n=0
for t in triangles():
print(t)
n+=1
if? n ==10:
break
思路
楊輝三角的規(guī)律:
1、第n行有n個(gè)數(shù)字
2、每行的前后,都是“1”
3、第n行的第L[i]的值,等于第n-1行第L[i]+L[i+1]的值
解法
定義函數(shù),求楊輝三角
定義第一個(gè)數(shù)組,初始化是[1],也就是楊輝三角的第一個(gè)值。
隨后建一個(gè)生成器,使用yield函數(shù)來聲明這是一個(gè)生成器并循環(huán)打印L(該行數(shù)組)為:[1]+[L[i]+L[i+1]for i in range(len(L)-1)]+[1]
下面開始不懂:
首末兩位是1,中間是一個(gè)循環(huán),循環(huán)內(nèi)容:[L[i]+L[i+1]for i in range(len(L)-1)],代表中間的那些數(shù)字,這其中:
求得的值:L[i]+L[i+1]
形參:i
實(shí)參:range(len(L)-1)]? ?#這里不懂,range是一個(gè)序列,代表從0到len(L)-1,L是一個(gè)序列,它的長(zhǎng)度是什么呢?