zoukankan      html  css  js  c++  java
  • 例子:循环语句--打印一个菱形

     打印一个如上图所示的菱形。遇到这样的题目,我们该如何去思考呢?首先这是一个对称的图形,其次,我们不能只看到 * 这个符号,而应该每行都当成空格+ *的这种组合。那么一步一步的发掘该图形的规律。

     这里重点是看*个数和前空格这两列的规律,行号可以自由的由range()函数来控制,7-*个数=2*前空格,这个公式便是该例子的核心算法。找到对称的中心点。

     1 # coding=gbk
     2 # 此处不考虑*的间距问题,一个*即为边长1
     3 line = int(input("请输入该菱形的边长:"))
     4 a = 2 * line - 1
     5 # a即为菱形中间的对角线长度
     6 for i in range(-a//2,a//2+1):
     7 # 该range()函数的取值范围是根据行号来裁定的,中间行号定为0
     8     if i < 0:
     9         print(' '*(-i) + '*'*(2 * i + a))
    10     else:
    11         print(' '*i + '*'*(a - 2 * i))
    12 #################################################
    13 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/lingxing.py
    14 请输入该菱形的边长:6
    15       
    16      *
    17     ***
    18    *****
    19   *******
    20  *********
    21 ***********
    22  *********
    23   *******
    24    *****
    25     ***
    26      *
    27 
    28 Process finished with exit code 0

    上图中个代码是分为上下两部分打印的,其实这里可以用一个公式来输出上下两部分的结果,因为i取值有正负之分,所以才有了if…else…,我们可以新起一个变量l,让l一直保持为正数。即8~11行代码可以写成如下所示:

    1     if i < 0:
    2         l = -i
    3     else:
    4         l = i
    5     print(' '*l + '*'*(a - 2 * l))

    其实这里可以使用python中的绝对值函数abs(),abs(x),x可以是整数、浮点数和复数。函数返回x(数字)的绝对值,如果参数是一个复数,则返回它的大小。

     1 # coding=gbk
     2 # 此处不考虑*的间距问题,一个*即为边长1
     3 line = int(input("请输入该菱形的边长:"))
     4 a = 2 * line - 1
     5 # a即为菱形中间的对角线长度
     6 for i in range(-a//2,a//2+1):
     7 # 该range()函数的取值范围是根据行号来裁定的,中间行号定为0
     8     print(' '*abs(i) + '*'*(a - 2*abs(i)))
     9 ############################################
    10 D:untitledproject2venvScriptspython.exe D:/untitled/project2/day1/lingxing.py
    11 请输入该菱形的边长:5
    12      
    13     *
    14    ***
    15   *****
    16  *******
    17 *********
    18  *******
    19   *****
    20    ***
    21     *
    22 
    23 Process finished with exit code 0
  • 相关阅读:
    Oracle笔记(三) Scott用户的表结构
    Oracle笔记(一) Oracle简介及安装
    Oracle笔记(七) 数据更新、事务处理、数据伪列
    Oracle笔记(六) 多表查询
    Oracle笔记(九) 表的创建及管理
    Oracle笔记(四) 简单查询、限定查询、数据的排序
    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
    PostgreSQL学习手册(十七) PL/pgSQL过程语言
    Oracle笔记(八) 复杂查询及总结
    Oracle笔记(十二) 集合、序列
  • 原文地址:https://www.cnblogs.com/linfengs/p/11635267.html
Copyright © 2011-2022 走看看