一个语言的强大,用一个实例足以证明。
题,现有四个跑步运动员的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日