社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环。
1.杨辉三角
主要特点:
每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
每行端点与结尾的数为1
def triangles(N):
# 首行
line = [1]
for _ in range(N):
# 生成器
yield line
for i in range(1, len(line)):
# 每个数等于它上方两数之和。
line[i] = pre[i] + pre[i - 1]
# 结尾端点为1,需要额外添加
line.append(1)
# 将本行当做生成下一行的依据
pre = line[:]
N = int(input("请输入一个整数:"))
for i in triangles(N):
print(i)
2.打印蛇形矩阵
input:4
打印如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
# NumPy系统是Python的一种开源的数值计算扩展。
# 这种工具可用来存储和处理大型矩阵,
# 比Python自身的嵌套列表(nested list
# structure)结构要高效的多
# (该结构也可以用来表示矩阵(matrix))
# 强大的N维数组
观察图形可以看出:
4*4 = 4+3+3+2+2+1+1
5*5 = 5+4+4+3+3+2+2+1+1
所以大循环套着四个小循环,而小循环的次数有以上规律
代码实现如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 14 08:47:34 2018
@author: Python
"""
import numpy
N = int(input("请输入一个整数:"))
#先打印出N*N的0矩阵
Arr = numpy.zeros((N,N),dtype=numpy.int16)
#记录数字
num = 1
i = 0 #记录行
j = 0 #记录列
times = N #记录循环次数
while num <= N*N:
# 向右,列的变化,不断增加
for _ in range(times):
# 改变数组对应位置的值
Arr[i][j] = num
num += 1
j += 1
times -= 1
# 循环结束时,行列的值需要相应的改变
j -= 1
i += 1
# 向下,行的变化,不断增加
for _ in range(times):
Arr[i][j] = num
num += 1
i += 1
i -= 1
j -= 1
# 向左,列的变化,不断减少
for _ in range(times):
Arr[i][j] = num
num += 1
j -= 1
times -= 1
j += 1
i -= 1
# 向上,行的变化,不断减少
for _ in range(times):
Arr[i][j] = num
num += 1
i -= 1
i += 1
j += 1
print(Arr)
3.打印三角形数:
# 比如,输入n=5
# 1
# 121
# 12321
# 1234321
# 123454321
N = int(input("请输入N:"))
i = 1
while i <= N:
i += 1
# 打印空格0,N-i
for x in range(0, N+1-i):
print(" ", end='')
# 从小到大打印数字1->i
for y in range(1,i):
print(y, end='')
# 从大到小打印数字
for z in range(1,i-1):
print(i-1-z, end='')
print("")
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!