设为首页收藏本站

Crossin的编程教室

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

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

使用道具 举报

0

主题

0

好友

22

积分

新手上路

Rank: 1

38#
发表于 2018-10-18 21:53:31 |只看该作者
crossin先生 发表于 2018-10-15 22:17
print('*', end='')
课程里版本差异的地方有提

谢谢先生
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

37#
发表于 2018-10-15 22:17:38 |只看该作者
amengguyi 发表于 2018-10-14 23:00
为什么print 后加逗号雪花不是在同一行呢?我是python3.7

print('*', end='')
课程里版本差异的地方有提
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

22

积分

新手上路

Rank: 1

36#
发表于 2018-10-14 23:00:53 |只看该作者
为什么print 后加逗号雪花不是在同一行呢?我是python3.7
回复

使用道具 举报

1

主题

0

好友

23

积分

新手上路

Rank: 1

35#
发表于 2018-4-12 14:27:10 |只看该作者
crossin先生 发表于 2018-4-12 11:39
不是
print() 就会换行

明白
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

34#
发表于 2018-4-12 11:39:43 |只看该作者
shan 发表于 2018-4-12 10:20
如果在python 3上面print 后面一定得加'\n',
如果不用'\n' ,输出的结果会直接一行25个
是吗? ...

不是
print() 就会换行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

23

积分

新手上路

Rank: 1

33#
发表于 2018-4-12 10:20:13 |只看该作者
crossin先生 发表于 2015-2-17 11:29
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了

如果在python 3上面print 后面一定得加'\n',
如果不用'\n' ,输出的结果会直接一行25个
是吗?
回复

使用道具 举报

0

主题

0

好友

30

积分

新手上路

Rank: 1

32#
发表于 2018-3-18 07:35:43 |只看该作者
crossin先生 发表于 2018-3-11 15:41
'*' * 5
你试下字符乘以数字的效果就明白了

感谢,弄明白了
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

31#
发表于 2018-3-11 15:41:48 |只看该作者
starleilei 发表于 2018-3-11 09:17
老师,十楼的代码好简练啊,但是看不懂,能否详细讲解一下

'*' * 5
你试下字符乘以数字的效果就明白了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

30

积分

新手上路

Rank: 1

30#
发表于 2018-3-11 09:17:20 |只看该作者
老师,十楼的代码好简练啊,但是看不懂,能否详细讲解一下
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

29#
发表于 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-11-22 12:22 , Processed in 0.016920 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部