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



猜你喜欢

转载自blog.csdn.net/u010359398/article/details/81043713