【百度领航团/飞桨/AI Studio】Python 学习笔记 —— 心得&总结

每一次的学习都有不同的收获在学习自身的课程的同时学习python也是在修炼自己

读取文件内容,按逗号进行切分

def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(’,’)

输出读取文件的结果

times = get_coach_data(‘mywork/james.txt’)
print(‘读取文件james.txt后的结果:\n’)
print(times)

输出:

读取文件james.txt后的结果:

[‘2-34’, ‘3:21’, ‘2’, ‘34’, ‘2.45’, ‘3.01’, ‘2:01’, ‘2:01’, ‘3:10’, ‘2-22’]

get_coach_data函数的说明:

filename为文件路径

f表示文件对象

f.realine()表示读取文件的一行

line.strip().split(’,’)为链式函数写法意思是,先对这一行的数据进行strip(),就是去掉改行头尾空格和换行符。然后对strip()的结果进行split(’,’),对结果以逗号的进行切分形成一个数组。

  1. 数据格式标准化

数据格式标准化

def sanitize(time_string):
if ‘-’ in time_string:
splitter = ‘-’
elif ‘:’ in time_string:
splitter = ‘:’
else:
return (time_string)
(mins,secs) = time_string.split(splitter)
return (mins+’.’+secs)

输出数据格式标准化后的时间

james_times = get_coach_data(‘mywork/james.txt’)
clean_james = []
for each_t in james_times:
clean_james.append(sanitize(each_t))
print(‘输出james.txt标准化后的结果\n’)
print(clean_james)

输出:

输出james.txt标准化后的结果

[‘2.34’, ‘3.21’, ‘2’, ‘34’, ‘2.45’, ‘3.01’, ‘2.01’, ‘2.01’, ‘3.10’, ‘2.22’]

sanitize函数的说明:

time_string为时间数组

splitter是根据原数据的格式来确实分钟和秒的分隔符

(mins,secs) = time_string.split(splitter)以splitter分隔符切分每个时间数据到两个变量中mins,secs

return (mins+’.’+secs)将分钟和秒以字符串点进行连接

  1. 排序去重

排序

sorted_james=sorted(clean_james)

去掉重复

unique_james = []
for each_t in sorted_james:
if each_t not in unique_james:
unique_james.append(each_t)

print(‘输出排序并去重后的结果,并取前3个数据\n’)
print(unique_james[0:3])

从文件中读取数据

def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(’,’)

james_new = get_coach_data(‘mywork/james_new.txt’)
james_name = james_new.pop(0)
james_dob = james_new.pop(0)
james_times = james_new

创建Athlete对象

james = Athlete(james_name,james_dob,james_times)
print(‘姓名:%s,生日:%s,最快的3次成绩:%s’ %(james.name,james.dob,james.top3()))

输出:

姓名:james,生日:2006-11-11,最快的3次成绩:[‘2.01’, ‘2.22’, ‘2.34’]
1
1
类属性
所有对象共享的数据。
定义:在 init 之上,或者说在类的范围内与方法同等级别,书写变量名=值。
调用:类名.类属性
class Athlete:

#运动员集训了,要买东西的同学要把地址改一下
address = '中国足球协会训练基地xx街xx号'

def __init__(self,a_name,a_dob=None,a_times=[]):
    self.name = a_name
    self.dob = a_dob
    self.times = a_times

def top3(self):
    return sorted(set([self.sanitize(t) for t in self.times]))[0:3]
    
def sanitize(self,time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return (time_string)
    (mins,secs) = time_string.split(splitter)
    return (mins+'.'+secs)

julie_new = get_coach_data(‘mywork/julie_new.txt’)
julie_name = julie_new.pop(0)
julie_dob = julie_new.pop(0)
julie_times = julie_new

james_new = get_coach_data(‘mywork/james_new.txt’)
james_name = james_new.pop(0)
james_dob = james_new.pop(0)
james_times = james_new

julie = Athlete(julie_name,julie_dob,julie_times)
james = Athlete(james_name,james_dob,james_times)

#address地址共享
print(julie.address)
print(james.address)
print(Athlete.address)

class Athlete:
def init(self,a_name,a_dob=None,a_times=[]):
# 私有name
self.__name = a_name
self.dob = a_dob
self.times = a_times

def sayName(self):
    print(self.__name)
    
def top3(self):
    return sorted(set([self.__sanitize(t) for t in self.times]))[0:3]

# 私有sanitize()    
def __sanitize(self,time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return (time_string)
    (mins,secs) = time_string.split(splitter)
    return (mins+'.'+secs)

james = Athlete(james_name,james_dob,james_times)

分别去掉注释,进行测试

print(james._name)

james.__sanitize()

print(‘姓名:%s,生日:%s,最快的3次成绩:%s’ %(james.name,james.dob,james.top3()))

AttributeError: ‘Athlete’ object has no attribute ‘_name’ 以及:
AttributeError: ‘Athlete’ object has no attribute ‘__sanitize’

‘james,2006-11-11,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22’

存储以上的数据,如何定义运动员类,补全代码(4分)

class Athlete:

def __init__(self,a_name,a_dob=None,a_times=[]):  

	#代码1,通过传参的方式初始化name,dob,times三个属性值
    self.name = a_name
    self.dob = a_dob
    self.times = a_times

def top3(self):
    #代码2,对times属性进行sanitize(统一化),去重和从小到大的排序操作,最后取最短的3个时间,并将结果返回
  return sorted(set([self.sanitize(t) for t in self.times]))[0:3]
    
def sanitize(self,time_string):
  if '-' in time_string:            
    splitter = '-'        
  elif ':' in time_string:
    splitter = ':'        
  else:
     return (time_string)        
  (mins,secs) = time_string.split(splitter)        
  return (mins+'.'+secs)

数据所在文件的路径为’work/james_new.txt’,通过get_coach_data函数读取数据使用该数据初始化运动员对象,打印运动员对象的属性信息,补全代码。(4分)

def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(’,’)

james_new = get_coach_data(‘work/james_new.txt’)
james_name = james_new.pop(0)
james_dob = james_new.pop(0)
james_times = james_new

#代码1,创建Athlete类的对象,将2个变量james_dob,james_times传递个构造方法,赋值给james
james = Athlete(james_name,james_dob,james_times)

#代码2,使用对象名.属性的方式,调用dob属性和top3方法
print(‘姓名:%s,生日:%s,最快的3次成绩:%s’ %(james.name,james.dob,james.top3()))

姓名:james,生日:2006-11-11,最快的3次成绩:[‘2.01’, ‘2.22’, ‘2.34’]

定义类属性address并赋值,定义类方法changeAddress改变address的值,补全代码。(4分)

class Athlete:

#代码1,定义address类属性变量,并进行赋值,值为'中国足球协会训练基地xx街xx号'
address = '中国足球协会训练基地xx街xx号'

def __init__(self,a_name,a_dob=None,a_times=[]):
    self.name = a_name
    self.dob = a_dob
    self.times = a_times

def top3(self):
    return sorted(set([self.sanitize(t) for t in self.times]))[0:3]
    
def sanitize(self,time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return (time_string)
    (mins,secs) = time_string.split(splitter)
    return (mins+'.'+secs)
#代码2,使用装饰器classmethod
@classmethod
#代码3,定义changeAddress函数,在函数内部对address类属性赋值为'中国田径训练基地xx街xx号'
def changeAddress(self):
    self.address = '中国田径训练基地xx街xx号'

Athlete.changeAddress()
james = Athlete(james_name,james_dob,james_times)
print(james.address)
print(Athlete.address)

将第3题中的实例变量name改为私有的属性,将sanitize改为私有方法,补全代码。(4分)

class Athlete:
def init(self,a_name,a_dob=None,a_times=[]):
#代码1,更改name为私有的属性,通过a_name对该属性赋值
self.__name = a_name
self.dob = a_dob
self.times = a_times

def sayName(self):
    #代码2,打印__name私有属性
    print(self.__name)
    
def top3(self):
    #代码3,更改sanitize函数的定义为私有的方法,有一个参数,参数名为time_string
    return sorted(set([self.__sanitize(t) for t in self.times]))[0:3]

def __sanitize(self,time_string):    
#代码4
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return (time_string)
    (mins,secs) = time_string.split(splitter)
    return (mins+'.'+secs)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值