开发者社区> 天飞.h> 正文

head first python 6 class 扩展

简介: 点击(此处)折叠或打开 #!/usr/bin/env python3 # -*- coding:utf-8 -*- import os clas...
+关注继续查看

点击(此处)折叠或打开

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. import os
  4. class athlete:
  5.     def __init__(self, athlete_name, athlete_dob=None, athlete_times=[]):
  6.         self.name = athlete_name
  7.         self.dob = athlete_dob
  8.         self.times= athlete_times
  9.     #运动员最好的3组成绩
  10.     def top3(self):
  11.         return(sorted(set([sanitize(time) for time in self.times]))[0:3])
  12.     #为运动员添加一个成绩
  13.     def add_time(self, time_value):
  14.         self.times.append(time_value)
  15.     #为运动员添加一组成绩,使用列表类型.
  16.     def add_times(self, time_list):
  17.         self.times.extend(time_list)

  18. def openfile(filename):
  19.     try:
  20.         #打开文件
  21.         with open(filename) as athlete_file:
  22.             #读取数据
  23.             data = athlete_file.readline()
  24.             value_list= data.strip().split(',')
  25.             username = value_list.pop(0)
  26.             userdob = value_list.pop(0)
  27.             usertimes= value_list
  28.             #返回实例对象
  29.             athlete_instance=athlete(username,userdob,usertimes)
  30.             return(athlete_instance)
  31.     except IOError as ioerr:
  32.         print('File error %s' % ioerr)
  33.         return(None)

  34. #处理字符,转换成m.s格式
  35. def sanitize(time_string):
  36.     if '-' in time_string:
  37.         splitter = '-'
  38.     elif ':' in time_string:
  39.         splitter = ':'
  40.     else:
  41.         return time_string
  42.     (min, sec) = time_string.split(splitter)
  43.     return (min + '.' + sec)
  44. for name in ["james", "julie", "mikey", "sarah"]:
  45.     name = openfile(name+'.txt')
  46.     print(name.name + '的三次最佳成绩是' + str(name.top3()))


  47. talen = athlete('talen')
  48. talen.add_time('3.25')
  49. talen.add_time('3.45')
  50. talen.add_times(['1.30','2.59'])
  51. print(str(talen.top3()))

t@localhost 6$ python3 kelly_c.py
James Lee的三次最佳成绩是['2.01', '2.16', '2.22']
Julie Jones的三次最佳成绩是['2.11', '2.23', '2.59']
Mikey McManus的三次最佳成绩是['2.22', '2.31', '2.38']
Sarah Sweeney的三次最佳成绩是['2.18', '2.21', '2.22']
['1.30', '2.59', '3.25']

继承list类

点击(此处)折叠或打开

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import os
class athlete:
    def __init__(self, athlete_name, athlete_dob=None, athlete_times=[]):
        self.name = athlete_name
        self.dob = athlete_dob
        self.times= athlete_times
    #运动员最好的3组成绩
    def top3(self):
        return(sorted(set([sanitize(time) for time in self.times]))[0:3])
    #为运动员添加一个成绩
    def add_time(self, time_value):
        self.times.append(time_value)
    #为运动员添加一组成绩,使用列表类型.
    def add_times(self, time_list):
        self.times.extend(time_list)
#使用类继承,继承内置list类
class athletelist(list):
    def __init__(self, a_name, a_dob=None, a_times=[]):
        list.__init__([])
        self.name = a_name
        self.dob = a_dob
        self.extend(a_times)
    def top3(self):
        return(sorted(set([sanitize(t) for t in self]))[0:3])

def openfile(filename):
    try:
        #打开文件
        with open(filename) as athlete_file:
            #读取数据
            data = athlete_file.readline()
            value_list= data.strip().split(',')
            username = value_list.pop(0)
            userdob = value_list.pop(0)
            usertimes= value_list
            #返回实例对象
            athlete_instance=athlete(username,userdob,usertimes)
            return(athlete_instance)
    except IOError as ioerr:
        print('File error %s' % ioerr)
        return(None)

#处理字符,转换成m.s格式
def sanitize(time_string):
    if '-' in time_string:
        splitter = '-'
    elif ':' in time_string:
        splitter = ':'
    else:
        return time_string
    (min, sec) = time_string.split(splitter)
    return (min + '.' + sec)
for name in ["james", "julie", "mikey", "sarah"]:
    name = openfile(name+'.txt')
    print(name.name + '的三次最佳成绩是' + str(name.top3()))


talen = athlete('talen')
talen.add_time('3.25')
talen.add_time('3.45')
talen.add_times(['1.30','2.59'])
print(str(talen.top3()))
ken = athletelist('ken')
#为运动员添加一个成绩
#由于继承list,不需要自己再定义添加方法,直接使用list的方法
ken.append('4.25')
#为运动员添加一组成绩,使用列表类型.
ken.extend(['4.56','6.20','5.20'])
print(ken.top3())


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20274 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22267 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23541 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13204 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20888 0
+关注
天飞.h
脚踏实地,仰望天空. https://talenhao.github.io/
260
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载