1、控制台打印菱形
N = 5 # 其他 N 值也适用
for i in range(N):
if i==0 :
print(' '*(N-1) + '*')
else:
print(' '*(N-(i+1)) + '*' + (i*2-1)*' ' + '*')
for i in range(N-1):
if i==N-2:
print(' '*(N-1) + '*')
else:
print(' '*(i+1) + '*' + ((N-2-i)*2-1)*' ' + '*')
*
* *
* *
* *
* *
* *
* *
* *
*
2、绕圈圈面试题
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09
分析:
# 打印坐标(索引)信息
SIZE = 5
for i in range(SIZE):
for j in range(SIZE):
print('%d%d' % (i, j), end=' ')
print('')
00 01 02 03 04
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
对应转弯图:
说明:
-
1 号转弯线:行索引 + 列索引 = SIZE - 1
下半区(左转):行索引 > 列索引
上半区(右转):行索引 < 列索引
-
2 号转弯线:行索引 = 列索引
下半区(向上):行索引 >= SIZE / 2(SIZE 为奇数大于,偶数时可等于)
-
3 号转弯线:行索引 + 1 = 列索引
上半区(向下):列索引 < SIZE / 2
SIZE = 5 # 适用于其他值
# 构建列表
array = [[0]*SIZE]
for i in range(SIZE-1):
array += [[0]*SIZE]
# 赋值列表
orient = 1 # 控制方向 0:向上,1:向下,2:向左,3:向右
H, L = 0, 0 # H 控制行号,L 控制列号
for i in range(1, SIZE*SIZE+1):
array[H][L] = i
if H+L==SIZE-1:
if H>L:
orient = 3
else:
orient = 2
elif H==L and H>=SIZE/2:
orient = 0
elif H+1==L and L<SIZE/2:
orient = 1
if orient==0:
H -= 1
elif orient==1:
H += 1
elif orient==2:
L -= 1
elif orient==3:
L += 1
# 打印列表
for ele in array:
for e in ele:
print('%02d' % e, end=' ')
print('')
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09
注意:
SIZE = 5
# 构建列表
array = [[0]*SIZE]
array *= 2 # 第二个列表为第一个列表浅拷贝的副本,没有真正把第一个列表复制,只拷贝了引用
print(array)
array[0][0] = 3 # 此处赋值给第一个列表时,导致第二个列表的相应位置也随之更改(给第二个列表赋值同理)
print(array)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[3, 0, 0, 0, 0], [3, 0, 0, 0, 0]]