用python实现数组
今天想练习一下python,就决定用python实现一下数组的功能。因为python中没有数组。
题目:用二维数组实现蛇形填数,用户输入一个数字N,程序应该输出一个N×N的蛇形数组(要求:数组按照
顺时针方向填数,右上角为起点,且起点定为1)。
例如:
输入:
3
输出:
7 8 1
6 9 2
5 4 3
一开始,我打算用列表来实现二维数组的功能,并且我使用*号运算符。代码如下:
array = [ [0] * N ] * N
用该表达式似乎可以生成一个二维数组,效果图如下:
但是当我将代码完全写完时发现,好像并不能完成题目的要求。
经过调试,我发现问题出在给数组赋值的地方。
本来我们只是想给数组元素array[0][N-1]赋值为1,结果程序将每一行的随后一个元素都赋值成1。这是什么原因?
查阅文档后,我发现官方是这么说的:
大概意思是说*号运算只是对原来数据的多次引用,也就是说实际上,我们用*号创建的二位数组其实只是将原来的一位数组复制了多次,我们并不能用其实现二维数组的功能。官方推荐使用列表生成式:
所以,我们可以将原来的array = [ [0] * N] * N改成array=[[0 for i in range(N)] for j in range(N)],所以改进后的完整代码如下:
__author__ = "Mochazz"
def main():
N = int(input("请输入数字:"))
# array = [ [0] * N ] * N
array = [[0 for i in range(N)] for j in range(N)]
x ,y = 0,N - 1
tot = array[x][y] = 1
while(tot < N * N):
while(x+1 < N and (not array[x+1][y])):
tot += 1
x += 1
array[x][y] = tot
while(y-1 >= 0 and not array[x][y-1]):
tot += 1
y -= 1
array[x][y] = tot
while(x-1 >= 0 and not array[x-1][y]):
tot += 1
x -= 1
array[x][y] = tot
while(y+1 < N and not array[x][y+1]):
tot += 1
y += 1
array[x][y] = tot
for i in range(N):
for j in range(N):
print("%-2d" % array[i][j], end=" ")
print("
")
if __name__ == "__main__":
main()
运行结果如下:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Python中输入一个以空格为间隔的数组
- 下一篇: 通过键盘把数据输入数组,只能越来越大