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
  • 相关阅读:
    20080531 Windows 下安装 Bugzilla
    20080823 windows + apache + mod_python 的安装
    20080519 在 Windows Server 2003 下安装 SQL Server 2000 提示“无法验证产品密钥”
    20080508 Borland CodeGear 卖了
    20080520 Javascript 随机数产生办法
    20090613 批量操作 Windows Live Mail 邮件的办法
    20080726 Castle项目创始人加入微软
    20080511 php send_mail()
    20080618 ASP.NET Ajax clientside framework failed to load
    20081105 Microsoft Word 2007 中鼠标操作失效的解决办法
  • 原文地址:https://www.cnblogs.com/linfengs/p/11635267.html
Copyright © 2011-2022 走看看