先来看一下普通的杨辉三角,代码和输出是长成这样
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根据你要打印的杨辉三角行数自己决定。
输出结果: