关于双重循环
新手求助这是一段用双重循环输出三角形的代码,个人读起来思路有点混乱,麻烦各位大佬讲解一下…
for i in range(1,6):
for j in range(5-i):
print(' ',end=' ')
for j in range(1,2*i):
print('*',end=' ')
print('\n') for i in range(1,6): #外层循环控制行(i从1到5,对应每一行)
for j in range(5-i): #这是内层循环,对应打印每行的空格,
#外层i得值逐渐增大,而这里j每取一个值就打印一个空格,所以每行前面的空格数是递减的
print(' ',end=' ')#print方法的end参数,就是相邻两个打印结果见以空格隔开
for j in range(1,2*i):#这是内层循环,对应打印每行的*,
#同理,j就有2*i-1个取值,也就是每行有2*i-1个*
print('*',end=' ')
print('\n')#换行属于外层循环,打印一行换行,继续打印下一行 for i in range(1,6):
for j in range(5-i):
print(' ',end=' ')
for j in range(1,2*i):
print('*',end=' ')
print('\n')
"""
先说一下print的end
默认是 \n 换行
print(' ',end=' ') ==>print('',end='')
print('*',end=' ') ==>print('* ',end='')
print('\n') ==>print('\n\n',end='')
下边说代码
for i in range(1,6):# i == 1 ,2 ,3 ,4 ,5
for j in range(5-i): # j == 4 ,3 ,2 ,1 ,0
print(' ',end=' ')# 表示会在下一行开始打印8 ,6 ,4 ,2 ,0个空格 ,不换行
for j in range(1,2*i):# 2*i 为 2 ,4 ,6 ,8 ,10,即分别循环 1 ,3 ,5 ,7 ,9次
print('*',end=' ') # 表示会打印 1 ,3 ,5 ,7 ,9个"* "
print('\n')#表示换两行
#连起来就是第1行打印8个" "1个"* "
#换两行
#第3行打印6个" "3个"* "
#换两行
#第5行打印4个" "5个"* "
#换两行
#第7行打印2个" "7个"* "
#换两行
#第9行打印0个" "9个"* "
#换两行
"""
代码这样写是不是更加直观一些,执行效果完全一样
for i in range(1 , 6):
print(' ' *(5 - i) + '*' * (2 * i - 1)) 昨非 发表于 2021-1-17 15:31
谢谢!
是否可以这样理解
外循环规定了i的取值范围是1-5,当i=1时,控制空格输出的j打印了四次空格(每个空格又以空格分开),控制*输出的j范围是(1,2),也就是只打印了一次*。这一行输出的内容是:“空格 空格 空格 空格 *\n” AresFC 发表于 2021-1-17 15:48
谢谢!
是否可以这样理解
对的 昨非 发表于 2021-1-17 15:31
请问自己去写类似的双重循环的时候思路应该怎么分析呢?两次内循环 j 的范围感觉自己写出来有点难度,想不太到 AresFC 发表于 2021-1-17 15:49
请问自己去写类似的双重循环的时候思路应该怎么分析呢?两次内循环 j 的范围感觉自己写出来有点难度,想 ...
emmm其实不是太复杂的
比如打印一个正方形,
其实可以分为两个任务:
每行打印什么
各个行又该如何打印
类似这样,将复杂的任务分解成简单的,然后拼到一起就能实现最总的目标
你现在觉得复杂大概是因为刚开始学吧,后面会慢慢好起来的 昨非 发表于 2021-1-17 15:54
emmm其实不是太复杂的
比如打印一个正方形,
其实可以分为两个任务:
谢谢!55感觉有些程序即使看懂了 自己写的时候也会卡住没有头绪 是还不熟练吧…{:10_277:} 谢谢大家! AresFC 发表于 2021-1-17 16:03
谢谢!55感觉有些程序即使看懂了 自己写的时候也会卡住没有头绪 是还不熟练吧…
正常,看得懂和写得出来从来都是两回事
页:
[1]