Crossin的编程教室
标题: 【Python 第15课】 循环的嵌套 [打印本页]
作者: crossin先生 时间: 2014-4-23 17:31
标题: 【Python 第15课】 循环的嵌套
设想一样,如果我们要输出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在这方面做得不太好,虽然也可以步进调试,但是很麻烦且不直观,所以就不推荐去用了。
作者: z344618505 时间: 2014-11-22 14:03
图片挂了
作者: crossin先生 时间: 2014-11-22 21:36
z344618505 发表于 2014-11-22 14:03
图片挂了
呃,是的呢。
要不先去这里看
http://115.29.188.128/static/wechat/index.html
作者: xiaohuzai 时间: 2015-2-16 16:29
问一下,为什么不能用print“\n”来换行呢?- for i in range(0, 5):
- for j in range(0, 5):
- print '*',
- print '\n'
复制代码 试了下,结果如下
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
感觉中间空了一行,这是何故?
作者: crossin先生 时间: 2015-2-17 11:29
xiaohuzai 发表于 2015-2-16 16:29
问一下,为什么不能用print“\n”来换行呢?试了下,结果如下
* * * * *
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了
作者: xiaohuzai 时间: 2015-2-23 11:46
crossin先生 发表于 2015-2-17 11:29
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了
啊,明白啦,谢谢crossin先生~
作者: zzxomg 时间: 2015-3-12 21:19
- >>> for i in range(1,6):
- ... for j in range(1,i) :
- ... print '*',
- ... print'\n'
复制代码
作者: cross 时间: 2015-4-21 10:34
print'\n' 比直接print的行间距要大好多啊
作者: lovia 时间: 2015-5-27 19:35
- for i in range(0,5):
- print '*' #five lines *
- print "Next"
- for i in range(0,5):
- print '*', #one line *****
- print
- print "Next"
- for i in range(0,5):
- for j in range(0,i+1):
- print '*',
- print
复制代码
作者: b33e 时间: 2015-11-12 10:41
for i in range(1,6):
print '*'*i
作者: mengnanlong 时间: 2016-1-11 17:25
n=int(input())
for i in range(1,n+1):
for j in range(0,n-i):
print('',end='')
for j in range(0,i):
print('*','',end='')
print()
crossin先生为什么我写了这个代码,没有打出您要求的第7题的样子啊?
作者: crossin先生 时间: 2016-1-12 13:55
mengnanlong 发表于 2016-1-11 17:25
n=int(input())
for i in range(1,n+1):
for j in range(0,n-i):
那是什么样子?我没有python3,看上去代码没什么问题
作者: mengnanlong 时间: 2016-1-13 15:03
crossin先生 发表于 2016-1-12 13:55
那是什么样子?我没有python3,看上去代码没什么问题
crossin先生,我找到原因了,在描述空格那段应该输出print('','',end=''),少了一个‘’
作者: speedbird 时间: 2016-3-21 07:09
本帖最后由 speedbird 于 2016-3-21 07:13 编辑
- Line = int(input("Enter line:"))
- for Line_up in range(1,Line+1):
- for lr in range(0,Line_up):
- print("*","",end="")
- print()
- for Line_down in range(1, Line):
- for ld in range(Line - Line_down):
- print("*","",end="")
- print()
复制代码 ========================= RESTART: C:/MyPython/1.py =========================
Enter line:5
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
>>>
作者: 追风 时间: 2016-4-30 16:38
crossin先生 发表于 2015-2-17 11:29
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了
恍然大悟
作者: FPOS 时间: 2016-5-18 13:13
本帖最后由 FPOS 于 2016-5-18 13:22 编辑
用*每层递增,想了一个早上都没什么头绪,网上一下子又找不到答案,就回顾了下前面几课。
终于完成
a=0
b=0
for i in range(0,5):
b=b+1
for j in range(a,b):
print '*',
print
看了第10楼的,本来还挺兴奋。。。
作者: crossin先生 时间: 2016-5-18 16:37
FPOS 发表于 2016-5-18 13:13
用*每层递增,想了一个早上都没什么头绪,网上一下子又找不到答案,就回顾了下前面几课。
终于完成
a=0
没关系,继续优化嘛
作者: FPOS 时间: 2016-5-18 19:10
crossin先生 发表于 2016-5-18 16:37
没关系,继续优化嘛
废话太多了,和昨天while一样。
并没有完全理解,似懂非懂的,所以写出来的总有很多画蛇添足多此一举的内容。
作者: ponber 时间: 2016-12-20 19:52
crossin 老师,有的课有习题,有的课怎么没有呢?习题集里也不好对应是哪一节课
作者: crossin先生 时间: 2016-12-20 22:19
ponber 发表于 2016-12-20 19:52
crossin 老师,有的课有习题,有的课怎么没有呢?习题集里也不好对应是哪一节课 ...
习题不是完全对应的
作者: Imagination 时间: 2017-11-27 00:02
for i in range(0, 5):
for j in range(0, 5):
print ('*',end='')
print
我用py3输入这个 运行出来是一排* 求解
作者: crossin先生 时间: 2017-11-27 01:34
Imagination 发表于 2017-11-27 00:02
for i in range(0, 5):
for j in range(0, 5):
print ('*',end='')
第二个print你没有加括号,没有调用
作者: chc584906948 时间: 2017-11-27 17:21
老师,为啥我是
>>> for i in range(0,5):
for j in range(0,i+1):
print('*')
print()
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
怎样让*并排在一行?我加了逗号也不行
作者: crossin先生 时间: 2017-11-28 08:13
chc584906948 发表于 2017-11-27 17:21
老师,为啥我是
>>> for i in range(0,5):
for j in range(0,i+1):
看你楼上的代码
作者: chc584906948 时间: 2017-11-28 11:32
crossin先生 发表于 2017-11-28 08:13
看你楼上的代码
明白!谢谢老师,这个end是python2和3的区别吗?还有我看您例题里的print后面没有括号的
作者: woodumpling 时间: 2017-11-28 18:38
对,2和3在print上存在一些区别
作者: booiya 时间: 2018-1-4 16:04
for i in range(0,5):
for j in range(0,5):
print"*",
print
楼主,我用的是mac下面的PCcharm,输出来的是一列的*,是不是最后的print后面的输出格式不对?
作者: crossin先生 时间: 2018-1-5 18:03
booiya 发表于 2018-1-4 16:04
for i in range(0,5):
for j in range(0,5):
print"*",
最好截个图,从你这个没看出问题。如果你是python3,请搜下python3怎么不换行输出
作者: xizirui 时间: 2018-2-20 22:03
您好crossin先生,看到公众号感觉非常干货,也有了对python的学习热情,然而电脑下载的是PY3,看的一直是PY2的教程,导致过程中一直遇到一些问题拉扯,只好求助群里大腿,但是不想被这种低级问题耽误大家时间,想问问有没有针对py3的这种教程,感觉循序渐进学习热情又高,非常感谢
作者: crossin先生 时间: 2018-2-21 12:43
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
作者: starleilei 时间: 2018-3-11 09:17
老师,十楼的代码好简练啊,但是看不懂,能否详细讲解一下
作者: crossin先生 时间: 2018-3-11 15:41
starleilei 发表于 2018-3-11 09:17
老师,十楼的代码好简练啊,但是看不懂,能否详细讲解一下
'*' * 5
你试下字符乘以数字的效果就明白了
作者: starleilei 时间: 2018-3-18 07:35
crossin先生 发表于 2018-3-11 15:41
'*' * 5
你试下字符乘以数字的效果就明白了
感谢,弄明白了
作者: shan 时间: 2018-4-12 10:20
crossin先生 发表于 2015-2-17 11:29
print 本身如果不加逗号的话,会自带换行
所以直接 print 不用 '\n'就行了
如果在python 3上面print 后面一定得加'\n',
如果不用'\n' ,输出的结果会直接一行25个
是吗?
作者: crossin先生 时间: 2018-4-12 11:39
shan 发表于 2018-4-12 10:20
如果在python 3上面print 后面一定得加'\n',
如果不用'\n' ,输出的结果会直接一行25个
是吗? ...
不是
print() 就会换行
作者: shan 时间: 2018-4-12 14:27
crossin先生 发表于 2018-4-12 11:39
不是
print() 就会换行
明白
作者: amengguyi 时间: 2018-10-14 23:00
为什么print 后加逗号雪花不是在同一行呢?我是python3.7
作者: crossin先生 时间: 2018-10-15 22:17
amengguyi 发表于 2018-10-14 23:00
为什么print 后加逗号雪花不是在同一行呢?我是python3.7
print('*', end='')
课程里版本差异的地方有提
作者: amengguyi 时间: 2018-10-18 21:53
crossin先生 发表于 2018-10-15 22:17
print('*', end='')
课程里版本差异的地方有提
谢谢先生
欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) |
Powered by Discuz! X2.5 |