打印星星 - Python

时间:2023-03-10 07:13:23
打印星星 - Python
  • 打印星星是经典面试题目,考察流程控制中的循环和条件。本文对相关方法进行总结。
  • 到的方法只要有(1)嵌套循环(2)center(3)format(^)(4)字符串乘法
# -*- coding:utf-8 -*-

# 方法一:循环嵌套
num = 10
for row in range(num):
print('{:<8d}'.format(row+1), end='')
print((num - row) * ' ', end='') # 输出空格,这里可以用乘号 for col in range(2 * row + 1):
if col == 0 or col == 2*row or row == num-1: # 条件:左右边界或下边界,打印*,否则打印空格
print('*', end='')
else:
print(' ', end='')
print() # 打印完没一行,一定要记得换行 for row in range(num-2, -1, -1):
print('{:<8d}'.format(row+1), end='')
for j in range(num-row): # 输出空格,这里有可以用循环
print(' ', end = '') for col in range(2 * row + 1):
if col == 0 or col == 2*row:
print('*', end='')
else:
print(' ', end='')
print() # 以下方法只使用于实心情形
# 方法二:center
num = 10
print(2*num*'-','原始center')
for row in range(num):
print('{:<8d}'.format(row + 1), end='')
print(((row+1) * '*').center(20, ' ')) print('\n', 2*num*'-', '改进版本1-奇数-center')
for row in range(1, 2*num, 2):
print('{:<8d}'.format(row), end='')
print((row * '*').center(20, ' ')) print('\n', 2*num*'-', '改进版本2-空格-center')
for row in range(num):
print('{:<8d}'.format(row + 1), end='')
print(((row+1) * '* ').center(20, ' ')) # 方法三:format(^)
num = 10
print('\n',2*num*'-','方法3-空格-format', end='')
for row in range(num):
print('{:<8d}'.format(row), end='')
print('{:^20s}'.format('* '*row))

运行结果如下:

1                 *
2 * *
3 * *
4 * *
5 * *
6 * *
7 * *
8 * *
9 * *
10 *******************
9 * *
8 * *
7 * *
6 * *
5 * *
4 * *
3 * *
2 * *
1 *
-------------------- 原始center
1 *
2 **
3 ***
4 ****
5 *****
6 ******
7 *******
8 ********
9 *********
10 ********** -------------------- 改进版本1-奇数-center
1 *
3 ***
5 *****
7 *******
9 *********
11 ***********
13 *************
15 ***************
17 *****************
19 ******************* -------------------- 改进版本2-空格-center
1 *
2 * *
3 * * *
4 * * * *
5 * * * * *
6 * * * * * *
7 * * * * * * *
8 * * * * * * * *
9 * * * * * * * * *
10 * * * * * * * * * * -------------------- 方法3-空格-format0
1 *
2 * *
3 * * *
4 * * * *
5 * * * * *
6 * * * * * *
7 * * * * * * *
8 * * * * * * * *
9 * * * * * * * * * Process finished with exit code 0

补充一个C++版本:

(2018/10/22)

#include <iostream>

using namespace std;
int main()
{
const int size = 6; for (int i = 0; i < size; i++) {
cout << i << '\t';
for (int j = 0; j < (2*size-1); j++) {
if (j == i || j == (2*size-2-i) || i == 0) {
cout << '*';
} else {
cout << ' ' ;
}
}
cout << endl;
}
return 0;
}

运行结果:

0       ***********
1 * *
2 * *
3 * *
4 * *
5 *