文章目录
前言
上节课我们学习了for循环的基础内容。这一讲的内容是学习for循环的高级内容:双重循环和结合高级内容。什么是双重循环?大家快跟我来看看吧!
一、for循环之“双重循环”
这个东东更复杂,我们可以看看我们之前学的一段代码——if双重判断。
while True:
num = int(input('Enter a number:'))
if num % 2 == 0:
print('偶数')
if num == 0:
break
elif num % 2 == 1:
print('奇数')
这个就是双重判断,前提条件是“满足if第一层,也满足嵌套中的第二层”。今天的for循环有点不太一样,我们先来画个图
1.示例
输出下面的长方形:
**************
**************
**************
**************
这是一个14×4的矩形。我们不能用print一顿死输出,那就要用到循环。
这个循环的类型无疑是for,因为他非常简洁。
for i in range(1,5):
for j in range(1,15):
print('*',end = '')
print()
这是答案,我先扔在这里
2.剖析
这个代码虽然只有4行,但是原理极为复杂。首先,我们看到,for循环的两层循环的执行顺序是从内到外的。我们是先打印长,再打印宽。
for有2个,所以for的后面变量名完全不同,一个是老朋友i,一个是j,这个不是非常复杂。
可是,大家看到了吗?print的中间不仅有*,还有end = ‘ ’。这是什么?
这个end=‘’ 就是换行符(可以这么以为)。没有他,程序就会变成56个*并列而放。更让人懵逼的是,在最大的循环里居然有print()!这是什么东东?
这个print和end的作用相似,是管换行操作以及特殊操作的,原理较为复杂。区区这4行代码就能输出这样神奇的矩形,想必大家也对双重循环有了深刻了解吧!
3.for循环输出三角
三角形,是矩形的一半,可难度却比矩形的难度高了2倍多。这是怎么回事呢?
首先,我们来看看下面这种三角形。
*
**
***
****
*****
******
这就是看似简简单单的“三角形”
来仔细看一下,会发现:这个三角形每行的三角形个数都是不同的。
我们挨个来看一下
第0行(因为range()外层是从0开始算的,而且这次的range括号中只有孤零零一个参数),1个
第1行,2个
第2行,3个
第3行,4个
第4行,5个
第5行,6个
行数是递加的,用range(6)直接解决。但是,内循环的东西就有点烦了:原本的数组是x,y,现在变成了递增。换句话说,随着外循环变量i的增加,内部的数据也在增加。
我们看一下具体的流程:
1 '*' ----> 0 hang range(0)
+1=2 '*' ----> 1 hang range(1)
+1=3 '*' ----> 2 hang range(2)
+1=4 '*' ----> 3 hang range(3)
+1=5 '*' ----> 4 hang range(4)
+1=6 '*' ----> 5 hang range(5)
所以,大家知道内循环怎么写了吗?
for i in range(i + 1)
你学会了吗?完整内容是这样:
for i in range(6):
for j in range(i + 1):
print('*',end = '')
print()
你答对了吗?
这就是双重循环的作用。
当然,while循环也能双重循环。
4.练习
输出如下图形
*
***
*****
*******
*********
***********
你能做出来吗?看到答案后记得吧代码记住!
二、for与while复习
到此,我们的循环已经学完了,不过我们不能独树一帜,而是要将两种循环语句复习,让我们学的知识实用性更高。
下面我们就来看一下这个例子,了解一下结合是怎么一回事。
1.for与while复习(1):分解质因数程序
题目:输入一个数,将这个数分解质因数
先看代码:
n = int(input("请输入一个数:"))
print(n,'=',end="")
i = 2
while i <= n:
if i == n:
print(i, end="")
break
elif n % i == 0:
print(i, end="*")
n = n / i
else:
i += 1
首先,要向分解质因数,我们要知道两个概念:质因数和分解质因数
上到小学5年级的同学们都知道,数学中有两个概念,叫做“质数和合数”。质数,是指只有1和本身2个因数的数;合数,是指除了1个它本身还有其他因数的数。这里,我们要分解质因数,就是取到我们输入数的质因数的乘式。
有了知识储备,接下来就是分解。我们在这里可以用while,也可以用for。
这里我们先用while。
n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2
首先,因为2是最小的质数,所以我们把变量质因数设为i,并且先把基础程序输出格式写出来
while i <= n:
if i == n:
print(i, end=" ")
break
elif n % i == 0:
print(i, end=" * ")
n = n / i
else:
i += 1
接下来这段代码就有点麻烦了:首先,第一就有点那个啥了:为啥上来就是i==n?此时,大家可以想,i已经达到了经过层层剥削的n的值了,不能再分解了,只能先输出了(如果是个质数,这个乘数直接大结局,按照if里的输出)
下一段,elif又来找事了。n%i==0,证明我们输入的值恰恰是质数i的倍数,此时就达到了我们分解质因数的目的,于是便要输出i*。然后,n缩小,除i得到n的新值。
else里,指的是n即不等于i,有不能被i整除,只能把i扩大。
像这个程序里,我们的n如果不是偶数,那n就要变大,看看n能不能满足是3的倍数。
n = int(input("请输入一个数:"))
print(n, '=', end=" ")
i = 2
while i <= n:
if i == n:
print(i, end=" ")
break
elif n % i == 0:
print(i, end=" * ")
n = n / i
else:
i += 1
此时,i变成了3。如果n还不等于3,不能整除3,那还是把3扩大,变成4。
这是有的朋友会问了:4不是合数吗?为什么还能作为质因数了吗?
大家想想,4分解质因数是多少?4 = 2 × 2对吧?大家再想想,2都被除光了,那n哪能除以4哪?所以,这就是分解质因数的巧妙之处。
2.for与while复习(2):输出九九乘法表
for i in range(1, 10):
for j in range(1, i+1):
print(f'{j}×{i}={i*j}\t', end='')
print()
这个就是九九乘法表的代码了。我们来分析一下
首先,还是一个双重循环语句,第一行的i还是老老实实地待在他原有的位置上
那么,内循环的range是什么意思?
1,i+1,意思就是这样:
i=1,line=1,1*1
i=2,line=2,2*1,2*2
也就是说,i决定了行数,j决定了不断增加的乘数
因为j代表行数,所以我们把j放在第一(因为我们把数组range提取字符)。i就是不断增加的那个数(列数)。
这就是九九乘法表的原理。
总结
这节课没有作业哦,因为大招都在下一节课!
是不是非常期待?别慌!波波仔会在下一段时间开一段新的教程——turtle库的教程,大家敬请期待!
最后,制作不易,别忘了一圈三连,点个关注哟!bye——
Test Key
1.1.1
for i in range(6):
for k in range(5 - i):#注意两旁有空格,用5减去i,让***的位置在中间
print(" ",end=" ")
for j in range(2 * i + 1):#每行两边各增加1,加上数组的特殊规定,就是i的2倍数加上1
print("*", end=" ")
print()