吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2308|回复: 17
收起左侧

[Python 转载] [笔记]第三天Python-100-Days-master跟我一起学(03-04分支与循环)

[复制链接]
wuyangteam 发表于 2020-8-20 23:13
本帖最后由 wuyangteam 于 2020-8-23 09:56 编辑

[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()

以上分享到此结束,大家一定要多自己分析哦,多多联系,转换程序思维。

[/md]

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
段红鲤 + 1 我很赞同!
Flo + 1 + 1 用心讨论,共获提升!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

是菲菲吖 发表于 2020-8-20 23:43
每天抽时间看么
arklearn 发表于 2020-8-21 00:05
bigdawn 发表于 2020-8-21 00:12
萌比君 发表于 2020-8-21 00:57
本帖最后由 萌比君 于 2020-8-21 01:00 编辑

支持一下!!!
wangwanghz 发表于 2020-8-21 05:41
自己没毅力学,收藏论坛的大佬们的教学贴,收藏了,谢谢楼主
pqkane 发表于 2020-8-21 06:48
ghmmy321 发表于 2020-8-21 02:14
謝謝樓主 我練習後得到以下簡化

1.如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输 ...

装?。但还是谢谢你们贡献思路!
pengyw200888 发表于 2020-8-21 07:56
谢谢分享,从入门到放弃。
 楼主| wuyangteam 发表于 2020-8-21 08:53

对啊,每天晚上写的时候再复习一遍,哈哈
 楼主| wuyangteam 发表于 2020-8-21 09:00
ghmmy321 发表于 2020-8-21 02:14
謝謝樓主 我練習後得到以下簡化

1.如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输 ...

我以后也要记得把注释加上。

1.这个思路也是不错的呢,对10整除后,范围落在0-10,再按角标取等级

但如果grade = 120 就不对了哦,需要考虑一下grade//10大于10的情况,毕竟没有说分数一定小于100啊

2.使用print("*" * i),可以减少一重循环,直接输出i个‘*’,谢谢分享。我晚上再加上去
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表