• 打印星星


     

    •  打印星星是经典面试题目,考察流程控制中的循环和条件。本文对相关方法进行总结。
    •  到的方法只要有(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('
    ', 2*num*'-', '改进版本1-奇数-center')
    for row in range(1, 2*num, 2):
        print('{:<8d}'.format(row), end='')
        print((row * '*').center(20, ' '))
    
    print('
    ', 2*num*'-', '改进版本2-空格-center')
    for row in range(num):
        print('{:<8d}'.format(row + 1), end='')
        print(((row+1) * '* ').center(20, ' '))
    
    # 方法三:format(^)
    num = 10
    print('
    ',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 << '	';
            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            *
  • 相关阅读:
    小账本软件设计之数据库设计模式构建
    基于JMeter的Quick Easy FTP Server性能测试
    构建之法 -源代码管理
    小账本APP——软件项目风险管理及解决办法案例
    基于python的Splash基本使用和负载均衡配置
    MQ初窥门径【面试必看的Kafka和RocketMQ存储区别】
    Apollo源码搭建调试看一文就够
    log4j2异步日志解读(二)AsyncLogger
    Disruptor源码解读
    高性能队列disruptor为什么这么快?
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/9899769.html
Copyright © 2020-2023  润新知