见证强大的python

一个语言的强大,用一个实例足以证明。

题,现有四个跑步运动员的600米成绩,请编写程序找出每个运动员成绩的最好的3项,重复的只取一项(例如下文中juliu.txt中的最好三次成绩应该是2.11,2.23,2.59,而不是2.11,2.11,2.23)。下面给出这四名运动员的成绩,共有4个文件,内容如下(格式是前一行是文件名,后一行是文件中的数据):

juliu.txt:

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

james.txt

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

sarah.txt

2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

mikey.txt

2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38

分析文件内容,发现成绩数据居然对应了三种格式,即m.s,m:s,m-s.处理的时候大致的步骤是读取文件,数据分离,统一格式,排序,删除重复项,输出。

对于学过编程的人来说,此题是非常简单的,如果用C/C++,你能用多少行代码来解决呢?

下面给出python实现代码:

import os#载入系统模块



os.chdir('C:\\users\\think\\desktop')#切换路径,把''中部分改成你放置数据的路径即可



file=['sarah.txt','james.txt','mikey.txt','juliu.txt']



def get_coach_data(filename):#获取数据函数



    try:#异常处理



        with open(filename) as f:



            data=f.readline()



        return data.strip().split(',')



    except IOError as ioerror:



        print("File error"+str(ioerror))



        return None



def sanitize(time):#时间格式转化



    if '.' in time:



        return time



    elif ':' in time:



        (mins,secs)=time.split(':')



    elif '-' in time:



        (mins,secs)=time.split('-')



    return mins+'.'+secs



player=[get_coach_data(f) for f in file]#获取4个文件中数据



for p in player:



    print(sorted(set([sanitize(time) for time in p]))[0:3])#排序,删除重复数据,输出

总共代码22行。谁敢试试C/C++用少于22行代码解决这个问题?记得加异常处理哦!

原作于2012年11月28日

你可能感兴趣的:(python)