请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 35502|回复: 38

【Python 第15课】 循环的嵌套

[复制链接]

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-4-23 17:31:09 |显示全部楼层
设想一样,如果我们要输出5个*,用for循环要这么写
for i in range(0, 5):
    print '*'

如果想让这5个*在同一行,就在print语句后面加上逗号
for i in range(0, 5):
    print '*',

但如果我想要这样一个图形,怎么办?
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

当然,你可以循环5次,每次输出一行“* * * * *”。那如果再进一步,这样呢?
*
**
***
****
*****

除了你自己动手打好一个多行字符串外,也可以让程序帮我们解决这种问题,我们需要的是两个嵌套在一起的循环:
for i in range(0, 5):
    for j in range(0, 5):
        print i, j

第二个for循环在第一个for循环的内部,表示每一次外层的循环中,都要进行一遍内层的循环。
看一下输出的结果:
0 0
0 1
0 2
0 3
0 4
1 0
...
4 4
内层循环中的print语句一共被执行了25次。
i从0到4循环了5次。对应于每一个i的值,j又做了从0到4五次循环。所以5*5一共25次。

所以如果要输出一个5*5的方阵图案,我们可以
for i in range(0, 5):
    for j in range(0, 5):
        print '*',
    print

注意:第二个print的缩进和内层的for是一样的,这表明它是外层for循环中的语句,每次i的循环中,它会执行一次。
print后面没有写任何东西,是起到换行的作用,这样,每输出5个*,就会换行。

要输出第二个三角图案时,我们需要根据当前外层循环的序数,设置内层循环应当执行的次数。
for i in range(0, 5):
    for j in range(0, i+1):
        print '*',
    print

内层的j每次从0到i+1进行循环。
这样,当第一次i=0时,j就是range(0,1),只输出1个*。
而当最后一次i=4时,j就是range(0,5),输出5个*。


最后顺便说下,如果有同学用的是PyScripter,或者其他第三方IDE,可以通过debug中的step,查看程序是怎样一行一行运行的。IDLE在这方面做得不太好,虽然也可以步进调试,但是很麻烦且不直观,所以就不推荐去用了。

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

发表于 2014-11-22 14:03:54 |显示全部楼层
图片挂了
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2014-11-22 21:36:28 |显示全部楼层
z344618505 发表于 2014-11-22 14:03
图片挂了

呃,是的呢。
要不先去这里看
http://115.29.188.128/static/wechat/index.html
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

505

积分

高级会员

Rank: 4

发表于 2015-2-16 16:29:32 |显示全部楼层
问一下,为什么不能用print“\n”来换行呢?
  1. for i in range(0, 5):
  2.       for j in range(0, 5):
  3.         print '*',
  4.       print '\n'
复制代码
试了下,结果如下
* * * * *

* * * * *

* * * * *

* * * * *

* * * * *
感觉中间空了一行,这是何故?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-2-17 11:29:03 |显示全部楼层
xiaohuzai 发表于 2015-2-16 16:29
问一下,为什么不能用print“\n”来换行呢?试了下,结果如下
* * * * *

print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

505

积分

高级会员

Rank: 4

发表于 2015-2-23 11:46:39 |显示全部楼层
crossin先生 发表于 2015-2-17 11:29
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了

啊,明白啦,谢谢crossin先生~
回复

使用道具 举报

0

主题

0

好友

36

积分

新手上路

Rank: 1

发表于 2015-3-12 21:19:55 |显示全部楼层
  1. >>> for i in range(1,6):
  2. ...     for j in range(1,i) :
  3. ...             print '*',
  4. ...     print'\n'
复制代码
回复

使用道具 举报

0

主题

0

好友

215

积分

中级会员

Rank: 3Rank: 3

发表于 2015-4-21 10:34:37 |显示全部楼层
print'\n' 比直接print的行间距要大好多啊
回复

使用道具 举报

0

主题

0

好友

54

积分

注册会员

Rank: 2

发表于 2015-5-27 19:35:47 |显示全部楼层
  1. for i in range(0,5):
  2.     print '*' #five lines *
  3. print "Next"

  4. for i in range(0,5):
  5.     print '*', #one line *****
  6. print
  7. print "Next"

  8. for i in range(0,5):
  9.     for j in range(0,i+1):
  10.         print '*',
  11.     print
复制代码
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

发表于 2015-11-12 10:41:01 |显示全部楼层
for i in range(1,6):
    print '*'*i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-16 16:44 , Processed in 0.038558 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部