目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容

要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔符要统一为“.”

数据准备:分别建立四个文本文件

james.txt     2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22

julie.txt        2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21

mikey.txt      2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

sarah.txt      2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

代码实现:

import os
os.chdir('C:\Python33\HeadFirstPython\hfpy_code\chapter5')   #将工作空间修改为文件所在的目录
#定义函数get_filedata从文件中取值
def get_filedata(filename):try:with open(filename)  as f:            #with语句打开和自动关闭文件data=f.readline()                 #从文件中逐行读取字符return (data.strip().split(','))  #将字符间的空格清除后,用逗号分隔字符except IOError as ioerr:print ('File Error' + str(ioerr))     #异常处理,打印错误return (None)
#定义函数modify_time_format将所有文件中的时分表达方式统一为“分.秒”
def modify_time_format(time_string):if "-" in time_string:splitter="-"elif ":" in time_string:splitter=":"else:splitter="."(mins, secs)=time_string.split(splitter)  #用分隔符splitter分隔字符后分别存入mins和secsreturn (mins+ '.' +secs)
#定义函数get_prev_three返回文件中排名前三的不重复的时间成绩
def get_prev_three(filename):new_list=[modify_time_format(each_t) for each_t in get_filedata(filename)]   #采用列表推导将统一时分表达方式后的记录生成新的列表delete_repetition=set(new_list)                                              #采用集合set函数删除新列表中重复项,并生成新的集合in_order=sorted(delete_repetition)                                           #采用复制排序sorted函数对无重复性的新集合进行排序return (in_order[0:3])                                                       #返回列表前三项
# 分别输出对应文件中排名前三的不重复的时间成绩
print (get_prev_three("james.txt"))
print (get_prev_three("julie.txt"))
print (get_prev_three("mikey.txt"))
print (get_prev_three("sarah.txt"))

输出结果:

['2.01', '2.22', '2.34']
['2.11', '2.23', '2.59']
['2.22', '2.38', '2.49']
['2.18', '2.25', '2.39']

参考资料:HeadFirstPython系列书籍chapter 5

转载于:https://www.cnblogs.com/liutong3310/p/3738372.html

python学习_数据处理编程实例(一)相关推荐

  1. python脚本编程实例_从零学python系列之数据处理编程实例(一)

    要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔 ...

  2. python学习--交互式图形编程实例四

    #!/usr/bin/env python3 # -*- coding: utf-8 -*-#画雪 from turtle import * from random import * def grou ...

  3. Python学习之面向对象编程

    Python学习目录 在Mac下使用Python3 Python学习之数据类型 Python学习之函数 Python学习之高级特性 Python学习之函数式编程 Python学习之模块 Python学 ...

  4. python学习笔记——多线程编程

    python学习笔记--多线程编程 基础不必多讲,还是直接进入python. Python代码代码的执行由python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主循环中,同时 ...

  5. python学习_循环语句

    python学习_循环语句 第1关:斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列. 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 ...

  6. python ui bs_Guibs的Python学习_列表

    Guibs 的 Python学习_列表# 列表# 列表由一系列按特定顺序排列的元素组成, 其中元素和元素之间可以没有任何关系 # 在 Python 中, 用方括号 [] 来表示列表, 并用逗号 , 分 ...

  7. python 学习_第五模块 DMO

    python 学习_第五模块 DMO 1. 节点 <!DOCTYPE html> <html lang="en"> <head><meta ...

  8. LabVIEW上位机学习 面对对象编程实例项目源码 与下位机PLC

    LabVIEW上位机学习 面对对象编程实例项目源码 与下位机PLC,工厂MES通讯,数据库,NI vision视觉等开发,及操作者框架源码可运行,想学习面对对象的可以参考 ID:16199647294 ...

  9. python学习笔记-练手实例

    1.题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列 代码: for i in range(1,10):print ('\r')for j in range(1 ...

最新文章

  1. SQLite与pandas
  2. Windows 7 几个小问题的解决方法(二)
  3. java语言编写进制转换_Java 3种方法实现进制转换
  4. 简单粗暴无需拼接下载 blob (ts)视频文件
  5. rds for mysql的监控指标_mysql(RDS)常用性能指标监控
  6. html语言可以干什么,JavaScript语言能做什么?
  7. 推荐程序员的求爱技巧
  8. android模拟器 dx,dx欧布奥特曼变身模拟器
  9. 两个有序链表序列的合并
  10. 使用procexp.exe查看线程
  11. [置顶] 博客停止更新 我的大学数年
  12. Mysql用户与权限操作
  13. 2020强网杯Siri记录
  14. 根据两点经纬度计算方位角
  15. 学计算机应用的必懂知识,学习计算机应用基础心得体会
  16. 第3章 从零开始的计算机系统
  17. 微服务Feign调用后开启Schedule报错No thread-bound request found: Are you referring to request attributes outsid
  18. 海贼王---追了好久的动漫了闲来无事发几张图嘿嘿
  19. 解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题
  20. CSDN博客中删除空白代码块

热门文章

  1. js基础-字符串常用属性合集
  2. NFS、SSH、SAMBA
  3. 20162328蔡文琛week07
  4. Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  5. linux系统重启网络delaying initialization错误的解决方法
  6. spring中lazy-init详解
  7. oralce主键自动生成
  8. vts传感器采取船舶的_【火炬高企】船舶通讯导航设备专家新诺航科
  9. Docker 底层实现
  10. LA3942字典树+递推