• 例子:循环语句--打印一个边长为n的正方形。


    1 # coding=gbk
    2 n = int(input("请输入该正方向的边长:"))
    3 print('*'*n)
    4 for i in range(n-2):
    5     print('*',' '*(n-2),'*')
    6 print('*'*n)

    首先看需求,打印一个边长为n的正方形,那么如何显示呢?我们可以用*符号来当做图形显示,横着n个*,竖着n个*,中间填充空格,那么就是我们所需要的结果。(这里不考虑显示行间距的问题)。

    然后我们就开始程序的设计,既然是正方形,那么第一行肯定是n个*,那就print('*'*n),这就是连续输出n个*。正方形还有竖着的两个边,那么怎么考虑呢?从整体上看,竖着是n个*,那么让其开头一个*,结尾一个*,中间都是空格,以该模式来个n-2行是不是就能实现了呢?(n-2是因为首尾两行都是*),因此有了程序中的for循环,print('*',' '*(n-2),'*'),打出是*     *这种格式,如下图所示。

     

     

     

    再来看看另一种实现方式:

     

    试想一下,正方形的直观印象,第一行与最后一行的格式是* * * * *这种,而其余的中间行是*        *这种格式,那么我们是不是可以将这两种不同的格式作为两个整体,然后重复使用呢?如上图代码所示,设定a和b变量都是*,因为每行的第一个符号都得是*,进入for循环得出一行的格式,得出a的格式是* * * * *,得出b的格式是*     ,这里要注意的是b的格式并不完整,因此在得到*     ,之后需要使用else再给b格式后面加上*得到*     *这个预期的格式。

    分别得到a和b这两种格式,我们来组合整个图形的输出,c = a + ' ' + (b + ' ')*(n-1) + a,第一行格式a+换行+(n-1)个b格式+换行+最后一行格式a,可得出需求的图案。在这里,要注意换行符的使用,也可以写成下图所示的格式。

     

     

  • 相关阅读:
    CMake 从文件路径中提取文件名
    std::multimap 按照key遍历---
    Windows / Linux 一件编译zlib库
    C++ 11 可变模板参数的两种展开方式
    cmake 生成VS项目文件夹
    C++ 利用文件流复制文件
    利用 getsockname 和 getpeername 来获取某一个链接的本地地址和远端地址
    Windows 用VS编译libevent源码
    揭示同步块索引(上):从lock开始
    C手写一个多线程,供java调用
  • 原文地址:https://www.cnblogs.com/linfengs/p/11572828.html
Copyright © 2020-2023  润新知