python实现居中的杨辉三角

先来看一下普通的杨辉三角,代码和输出是长成这样

def YangHui(n):
    print([1])
    line = [1,1]
    
    for i in range(2,n):
        r = []
        for j in range(0,len(line) - 1):
            r.append(line[j] + line[j + 1])
        line = [1] + r + [1]
        print(line)

if __name__ == '__main__':
    YangHui(5)

输出:
在这里插入图片描述
那么如何输出形如

在这里插入图片描述
的杨辉三角呢?很自然的就是想到把上面的函数输出居中

那么居中我们除了自己写循环加空格,python还有没有函数能完成呢?
答案是有的,不过只能将字符串的输出居中
Python center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。

center()方法语法:
str.center(width[, fillchar])
width – 字符串的总宽度。
fillchar – 填充字符。
演示代码:

mess = "Hello Word"
print("|",mess.center(30,'*'),"|")
print("|",mess.center(50,'*'),"|")
print("|",mess.center(50),"|")

在这里插入图片描述
详细参考:
center()方法
Python 输出字符串左对齐、右对齐、居中对齐

注意到原始的杨辉三角输出的是列表,为了能使用center()函数将输出居中,我们还需做一个工作:将数字列表转换成字符串
定义这样一个函数

def NumList_to_StrList(data):
    """将一个数字列表转换成字符串"""
    new_data = []
    for i in range(len(data)):#先将数字列表编程每个元素都是字符的列表
        new_data.append(str(data[i]))
    
    string = ' '.join(new_data)#将字符列表的每个元素连接起来,中间分隔符为空格
    return string

来看看这个函数的作用

num = [1,2,3,4,5]
string = NumList_to_StrList(num)
print("num :",num)
print("type of num :",type(num))
print("string :",string)
print("type of string :",type(string))

在这里插入图片描述
显然能完成将数字列表转换成字符串的工作。

那么接下来只需要在最开始的函数加一点小工作即可完成居中的杨辉三角了
直接上完整的代码:

def NumList_to_StrList(data):
    """将一个数字列表转换成字符串"""
    new_data = []
    for i in range(len(data)):#先将数字列表编程每个元素都是字符的列表
        new_data.append(str(data[i]))
    
    string = ' '.join(new_data)#将字符列表的每个元素连接起来,中间分隔符为空格
    return string


# center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。
#width -- 字符串的总宽度。
def YangHui(n):
#    print([1])
    width = n * 6#设置字符串的宽度
    print('1'.center(width))
    line = [1,1]
    print('1 1'.center(width))
    
    for i in range(2,n):
        r = []
        for j in range(0,len(line) - 1):
            r.append(line[j] + line[j + 1])
        line = [1] + r + [1]
        print(NumList_to_StrList(line).center(width))


if __name__ == '__main__':
    YangHui(7)

上面的width根据你要打印的杨辉三角行数自己决定。
输出结果:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值