Loading

打印星星 - 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            *

 

posted @ 2018-07-14 15:48  Geoffrey_one  阅读(1364)  评论(0编辑  收藏  举报
/*
*/