[md]# 写在前面的话
最近事有点多,拖了几天才更新,第三天的内容是分支与循环,之所以把这两章的内容放在一起,
是因为分支与循环是程序逻辑的基础,属于必须掌握的部分。建议小伙伴们在这两节的内容,多多练习。
其实在turtle绘图的实例中,我们也见识了分支与循环,具体如下:
03.分支结构
if :
elif :
else :
04.循环:
for...in :提前知道循环次数的,或者迭代列表
while
break:退出当前循环
continue:忽略当前循环
练习题
1.如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。
我们先从最简单的分支开始,分析:
如果程序判断score>=90为真,那么 grade = 'A';如果为假,那么说明score<90,而如果score又 >= 80,那么grade = 'B';如果这个也为假
,那么说明score<80,如果score又>= 70,那么,grade = 'C'依次类推:
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
当然我们可以换个角度来,理解:
if score < 60:
grade = 'E'
elif score < 70:
grade = 'D'
elif score < 80:
grade = 'C'
elif score < 90:
grade = 'B'
else:
grade = 'A'
这里评论区的小伙伴又提出了新的一种思路:
z = "EEEEEEDCBAA" #转换为等级列表
grade = 91 #分数
i = grade // 10 #对10整除,确保范围落在0-10内
if i > 10: i=10
print(z[i])
2.用for循环实现1~100之间的数的求和
我们也从最最简单的累加器分析:
如果我们自己计算这个1+2+3+....+100,我们会这样算,1+2=3,3+3=6,6+4=10。
大家会发现,我们每次会在上一次计算的结果的基础上再加新的值,就是我们的累加器,转换为程序表达:
我们注意,range(1,101),是不包含101的
sum = 0
for _ in range(1,101)
sum += _
print(sum)
3.输出乘法口诀表(九九表)
分析:
1×1=1
2×1=2 2×2=4
3×1=3 3×2=6 3×3=9
.......
首先我们的程序一次打印一个式子,如2×2=4,那么我们输出第一行的时候,是1列,第二行是2列,第n行,n列
那么需要输出9行,因此是个两重循环,用变量i,记录行号,j记录列号,每行输出结束,再输出一个换行符,每列之间用tab分割
for i in range(1, 10):
for j in range(1, i + 1):
print('%d*%d=%d' % (i, j, i * j), end='\t')
print()
4.打印如下所示的三角形图案1
*
**
***
****
*****
看懂上面的两层循环,这个就很简单了吧。
程序每次输出一个*
,那么i行,输出i个*
,每行输出结束换行
for i in range(1, 6):
for j in range(1, i + 1):
print('*',end='')
print()
细心的小伙伴,会发现我们这里写的和教材上的不太一样
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
其实是一样的,range(row)产生的是从0开始(包括零,不包括row的列表),只不过行号从0开始啦,就不是1咯。但是循环次数是一样的。
这里评论区的小伙伴也提出了,可以使用print('*'*i)
可以直接输出i个*
,不用一个一个地输出*
。
for i in range(1,6):
print('*'*i) #输出i个 *
后面的例子,大家可自由改写哦。
5.打印如下所示的三角形图案2
*
**
***
****
*****
这个我们分析一下,大家注意看,第一行,其实是有4个空格加1个*
第二行是3个空格+2个*
,依次类推..最后一行0个空格+5个*
注意:' '是空格,''是空串,为啥要加这个呢,因为print(' ')会换行,所以加end='',就不换行啦。
row = 5
for i in range(row):
for j in range(row - i):
print(' ', end='')
for k in range(row - i,row + 1):
print('*', end='')
print()
看起来有点复杂,我们有没有更好的方法呢,输出i行j列,考虑要么输出空格,要么输出。
当第j列<第row-i行的时候输出空格,否则输出
以下注意i,j从0开始
row = 5
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
大家注意,写程序首先是我们自己知道怎么做,其次建立数学模型求解,最后转换为我们的代码。往往求解方法不止一种
因此写完代码,我们应该思考一下,有没有其他更简洁明了的方案求解。
5.打印如下所示的三角形图案2
*
***
*****
*******
*********
这个图案,其实就是在4的基础加了右边部分,左边空格是一样的,*
是2i+1,等差数列,1,3,5,7,9,直接上代码了:
row = 5
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()
以上分享到此结束,大家一定要多自己分析哦,多多联系,转换程序思维。