参加工作久已,工作很忙,平时又没有太多时间,所以很少参加网课的课程学习。

想学习python这种想法由来已久,一是工作中有开发知识会有一定的帮助,另一方面学习一门编程技术也是能力的提升。但是仅仅是有想法而已,从没有付诸行动。。。

这次的课程也是从公众号上得知的这次活动,首先看一下课节:

python速成 python速成班_数据

 

 

每节课后都有实战题作业,课程中的两位老师也是保姆级的讲解。

第一节:

零基础入门当然的从python安装以及环境变量的配置讲起,然而课程是在百度aistudio的jupyter notebook上运行的,很方便。

接下来就是所有语言都会打印的helloworld输出,老师从一个参数的小游戏讲解了python语言的简洁易懂。

1 # python的代码大概长这样子  
 2 """
 3 猜数字小游戏  
 4 dfasdf
 5 """
 6 
 7 my_number = 3200  # 这是真实的价格
 8 guess_number = input('这台冰箱多少钱?')   # 所有符号都是英文标点(半角字符)
 9 guess_number = int(guess_number)
10 while guess_number != my_number:  
11     if guess_number<my_number:      # 使用缩进来标识代码段
12         guess_number = input('猜低了!再猜')
13         guess_number = int(guess_number)
14     else:
15         guess_number = input('猜高了!再猜')
16         guess_number = int(guess_number)
17 print('\n恭喜您,猜对了!\n')

用老师的话讲,就是懂一点英文就能看明白。

第二节:

数据类型、优先级、变量的赋值以及命名规则、列表、元组、字典、集合等

for、while循环控制语句,以及break continue pass语句的用法。

字符串的进阶,切片以及常用函数,count、index、split、replace、strip以及格式化输出,这里重点学习了replace和split,在作业中对这两个函数的用法进行了考察。

同字符串一样,列表也是支持索引切片的,同时对列表数据的插入、删除、以及列表生成式的简单写法进行了详细的讲解。

 第三节:

学完了基础知识,开始学习比较重要的函数,首先学习了函数的定义以及调用方法。

1 def student_name(name):
2     "打印学生的名字"
3     print('姓名:', name)
4     return {'姓名':name}
5 rst = student_name('Alice')

函数的几种参数传递方式:

  • 位置参数
  • 缺省参数
  • 可变参数
  • 关键字参数
  • 命名关键字参数   

变量的作用域和全局变量,老师通过两个图片进行举例

python速成 python速成班_字符串_02

python速成 python速成班_数据_03

 

 

 函数可以看作是单向玻璃 - - 不要对着车窗剔牙!

 很形象有木有,让人很容易记住作用域的意思。

第四节:

换了一个挺有意思的东北老师,通过定义不一样的需求来引入课程的要点,需求一直在变化,而我们又能怎样的改变代码来适应需求,并且保持代码的简洁,也就是老师说的clean。

根据一直在变化的需求引入了类的概念,如何定义类,如何使用类,类的属性及类的方法都是如何写的,又是怎么调用的。顺便还提了一嘴私有属性的定义方法,也就是在属性的前边加上两个下划线。

第五节:

主要讲解了类的继承,多继承,类方法的重写等。讲到第五节课,重点部分已经基本讲完了,由于数据是从本地txt文件读取的,所以也对文件的读取进行了简单的介绍。到这里不得不说一说大作业。

第一题(30分)

数据如下:

stu1.txt 孙同学,2020-5-21,20,'男',77,56,77,76,92,58,-91,84,69,-91
stu2.txt 赵同学,2020-11-3,24,'女',65,68,72,95,-81,71,86,91,57,91
stu3.txt 王同学,2021-8-7,25,'男',87,78,90,-76,88,47,100,65,69,100 
stu4.txt 李同学,2021-8-10,29,'男',92,54,85,71,-91,68,77,68,95,95

以上四个txt文档在work路径下可以找到。

定义Student类,包括name、dob、age、gender和score属性,包括top3方法用来返回学生的最大的3个成绩(可重复)、sanitize方法用来将负的分数变为正的分数,负的分数可能是输入错误。声明stu_list对象组数用于存储所有的学生对象。最后输出所有的学生信息包括姓名、生日、年龄、性别、最高的3个分数。

第一题的输出结果如下,供参考:

python速成 python速成班_字符串_04

1 class Student:# 定义Student类
 2     def __init__(self,name,dob,age,gender,score=[]):# 学生类的属性,这里将成绩定义成了列表,初始为空
 3         self.name = name
 4         self.dob = dob
 5         self.age = age
 6         self.gender = gender
 7         self.score = score# 属性赋值
 8     def top3(self):# 定义函数用于处理数据
 9         return sorted(set([self.sanitize(s) for s in self.score]),reverse=True)[0:3]
           # 用推导式的形式把score中的负数成绩调用sanitize函数处理成正数,并将字符串转化成整数,将列表中的元素转化成集合,去重
           # 通过sorted函数进行排序,因为reverse=True,所以按降序排列,并取成绩最大的前三个
11     def sanitize(self,score_sting):# 处理成绩为负数的函数
12         if score_sting[0] == '-':# 如果有负号
13             score_sting = score_sting[1:]#去掉,重新赋值
14         return int(score_sting)# 返回并转换整数
15 
16 list1 = []# 定义空列表用于装读取的学生数据
17 for i in range(1, 5):# 四个文件循环读取
18     with open('work/stu%s.txt' % i,encoding='utf-8') as f:
19         list1.extend(f.readlines())# 将文件的内容全部读取并拓展到列表中
20 list1 = [ls.split(',') for ls in list1]# 列表元素按逗号分割形成嵌套列表
21 stu_list = [Student(s[0], s[1], s[2], s[3], s[4:]) for s in list1]
22 # 将前四个元素分别取出当做变量name,dob,age,gender的值,s[4:]为成绩列表,实例化四个学生的对象

23 for st in stu_list: # 循环四个学生打印学生信息

24     print('姓名:', st.name, '生日:', st.dob, '年龄:', st.age, '性别:', st.gender, '分数', st.top3())

最终,程序的运行结果是:

python速成 python速成班_子类_05

 

 符合题目要求。

第二题(30分)

数据格式如下:

stu5.txt 特长同学,2020-10-5,20,'男',180,87,98,77,76,92,58,-76,84,69,-47
stu6.txt 特长同学,2020-10-6,20,'女',230,76,48,82,88,92,58,-91,84,69,-68

以上两个txt文档在work路径下可以找到。

定义Spostudent、Artstudent为Student的子类,在子类的属性里面新增了spe为特长分数。Spostudent包括的top3方法返回的是最低的3个得分(可重复),Artstudent包括top3方法返回的是最高的3个得分(可重复),最后使用多态的方式输出2个特长同学的姓名、生日、年龄、性别、分数、特长分。

第二题的输出结果如下,供参考:

python速成 python速成班_数据_06

至于第二题,只是增加了子类的属性,定义子类的时候,调用父类构造方法,并增加自己的属性,有需要的重写一下父类的top3()方法即可达到要求。

代码如下:

1 class Student:
 2     def __init__(self,name,dob,age,gender,score):
 3         self.name = name
 4         self.dob = dob
 5         self.age = age
 6         self.gender = gender
 7         self.score = score
 8     def top3(self):
 9         return sorted([self.sanitize(s) for s in self.score],reverse=True)[0:3]
10 
11     def sanitize(self,score_sting):
12         if score_sting[0] == '-':
13             score_sting = score_sting[1:]
14         return int(score_sting)
15 class Spostudent(Student):
16     def __init__(self,name,dob,age,gender,spe,score):
17         Student.__init__(self,name,dob,age,gender,score)
18         self.spe = spe
19     def top3(self):
20         return sorted([self.sanitize(s) for s in self.score],reverse=True)[-3:]
21 class Artstudent(Student):
22     def __init__(self, name, dob, age, gender, spe, score):
23         Student.__init__(self,name, dob, age, gender, score)
24         self.spe = spe
25 list1 = []
26 for i in [5,6]:
27     with open('work/stu%s.txt'%i,encoding='utf-8') as f:
28         list1.extend(f.readlines())
29 list1 = [ls.split(',') for ls in list1]
30 stu_list = []
31 for n,i in enumerate(list1):
32     if n==0:
33         stu_list.extend([Spostudent(i[0],i[1],i[2],i[3],i[4],i[5:])])
34     else:
35         stu_list.extend([Artstudent(i[0],i[1],i[2],i[3],i[4],i[5:])])
36 
37 for st in stu_list:
38     print('姓名:',st.name,'生日:',st.dob,'年龄:',st.age,'性别:',st.gender,'分数',st.top3(),'特长分',st.spe)

执行结果:

python速成 python速成班_子类_07

 

 符合题目要求。

通过这一系列的课程,学到了很多知识,可以说是系统的梳理了一下基础入门的知识。也能够用代码去解决一些实际需求,收益颇丰。

在此,感谢各位老师及助教的悉心讲解,你们辛苦了。