见证强大的python

时间:2022-08-08 13:55:58

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

题,现有四个跑步运动员的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日