Python 中使用 forwhile 循环打印杨辉三角练习(列表索引练习)。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 中使用 forwhile 循环打印杨辉三角练习(列表索引练习)。相关的知识,希望对你有一定的参考价值。

Python中使用for while循环打印杨辉三角练习(列表索引练习)。

杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 

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组成的,而其余的数则是等于它肩上的两个数之和。


方法一:


    __author__ = ‘Brad‘

    n = int(input(‘请输入你想打印杨辉三角的行数:‘)

    newline = [1]   

    oldline = []    

    print(newline)  

    

    for i in range(1,n):    

        oldline = new.copy()    

        oldline.append(0)

        newline.clear()

        for j in range(i+1):

            newline.append(oldline[j-1]+oldline[j])

        print(newline)

        

        





杨辉三角的特征:第n行有n个元素,从第三行起,newline[1]=oldline[0]+oldine[1]……杨辉三角可以在右侧扩展出一列全部为0,这样从第二行开始,newline[0]=oldline[-1]+oldline[0],并且newline[0]也可由oldline的元素计算得出。


     1 0

     1 1 0

     1 2 1 0

     1 3 3 1 0

     1 4 6 4 1 0

     1 5 10 10 5 1 0

     1 6 15 20 15 6 1 0

     

#第一行的列表需要直接打印

#这个newline是经过计算

#通过对这个oldline的元素进行计算得出newline中的元素

#剩余n-1行,通过循环n-1次分别打印经计算出的newline,所以区间设为(1,n)

开始计算第二行,将第一行copy给oldline,用于计算。

oldline列表添加一个0,成为我们想要的杨辉三角变形。

做一个空行newline,里面的元素通过计算得出

oldline[0]+oldline[1],oldline[0]+oldline[1]索引顺序重复不好处理,可以尝试使用负索引oldline[-1]+oldline[0],oldline[0]+oldline[1]正好得出第二行的元素:[1,1],这时尝试将j的区间设为[0,1]即[i+1]

后面逐行也都符合要求。

结果为:


    :6

    [1]

    [1, 1]

    [1, 2, 1]

    [1, 3, 3, 1]

    [1, 4, 6, 4, 1]

    [1, 5, 10, 10, 5, 1]


方法二:


杨辉三角从第三行开始,triangle[1]到triangle[n-1]都可以由上一行的元素计算得出。




    __author__ = ‘Brad‘

    n = int(input(‘请输入你想打印杨辉三角的行数:‘)

    triangle=[[1],[1,1]]

    

    for i in range(2,n):

        pre=triangle[i-1]

        cur=[1]

        for j in range(i-1):

            cur.append(pre[j]+pre[j+1])

        cur.append(1)

        triangle.append(cur)

    print(triangle)


triangle[0]和triangle[n-1]不计算,分别在第一个循环首尾定义和增加,只计算剩余的元素,将每一行的元素添加为triangle的元素,作为下一行cur计算的pre。

前两行不方便计算,直接列出。从第三行开始计算,i = 2 pre=tirangle[1],cur[1]=1+1即pre[0]+pre[1],所以将j的区间设置为(i-1),接下来计算顺利,直接打印即为杨辉三角。

结果为:


    :6

    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]


方法三:


        __author__ = ‘Brad‘

    n = int(input(‘请输入你想打印杨辉三角的行数:‘)

    triangle=[]

    

    for i in range(n):

        row=[1]

        triangle.append(row)

        if i==0:

            continue

        for j in range(i-1):

            row.append(triangle[i-1][j]+triangle[i-1][j+1])

        row.append(1)

    print(triangle)

    

在这个方法中row相当于方法二中的cur,每次计算初始都是[1].


当i==0时,triangle再添加[1]变为[[1],[1]],


当i==2时,row[1]增加triangle[1][0]+triangle[1][0],然后再增加[1],变为[[1],[2],[1]。

然后依次打印。结果为:


    :6

    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]


以上是关于Python 中使用 forwhile 循环打印杨辉三角练习(列表索引练习)。的主要内容,如果未能解决你的问题,请参考以下文章

Python---循环结构forwhile

循环语句(forwhile)(一)

day-1Python基础循环forwhile,判断if

Python 实现循环的最快方式(forwhile 等速度对比)

python-循环(forwhile)判断字符串格式化

Python 实现循环的最快方式(forwhile 等速度对比)