设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 36340|回复: 12
打印 上一主题 下一主题

【Python 第15课】 循环的嵌套

[复制链接]

174

主题

45

好友

11万

积分

管理员

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
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

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
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

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
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-1-12 13:55:16 |显示全部楼层
mengnanlong 发表于 2016-1-11 17:25
n=int(input())
for i in range(1,n+1):
    for j in range(0,n-i):

那是什么样子?我没有python3,看上去代码没什么问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2016-5-18 16:37:06 |显示全部楼层
FPOS 发表于 2016-5-18 13:13
用*每层递增,想了一个早上都没什么头绪,网上一下子又找不到答案,就回顾了下前面几课。
终于完成
a=0

没关系,继续优化嘛
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2016-12-20 22:19:12 |显示全部楼层
ponber 发表于 2016-12-20 19:52
crossin 老师,有的课有习题,有的课怎么没有呢?习题集里也不好对应是哪一节课 ...

习题不是完全对应的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2017-11-27 01:34:46 |显示全部楼层
Imagination 发表于 2017-11-27 00:02
for i in range(0, 5):
    for j in range(0, 5):
        print ('*',end='')

第二个print你没有加括号,没有调用
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2017-11-28 08:13:47 |显示全部楼层
chc584906948 发表于 2017-11-27 17:21
老师,为啥我是
>>> for i in range(0,5):
        for j in range(0,i+1):

看你楼上的代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2018-1-5 18:03:00 |显示全部楼层
booiya 发表于 2018-1-4 16:04
for i in range(0,5):
for j in range(0,5):
   print"*",

最好截个图,从你这个没看出问题。如果你是python3,请搜下python3怎么不换行输出
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2018-2-21 12:43:52 |显示全部楼层
xizirui 发表于 2018-2-20 22:03
您好crossin先生,看到公众号感觉非常干货,也有了对python的学习热情,然而电脑下载的是PY3,看的一直是PY ...

http://crossincode.com/course/lesson_list/
课程里关于2和3变动的地方有说明
另外看下这篇,并没有特别大的差异 https://mp.weixin.qq.com/mp/appm ... 764b887679757a51245
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-2 12:34 , Processed in 0.029409 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部