zoukankan      html  css  js  c++  java
  • 见证强大的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日

    www.kingreturns.com
  • 相关阅读:
    剑指 Offer 22. 链表中倒数第k个节点
    1221. 分割平衡字符串
    1528. 重新排列字符串
    1450. 在既定时间做作业的学生人数
    1266. 访问所有点的最小时间
    1572. 矩阵对角线元素的和
    使用Python进行数据传输
    分布式系统的原理与设计
    分布式缓存
    Centos6 配置最新yum源
  • 原文地址:https://www.cnblogs.com/ashboy/p/2867135.html
Copyright © 2011-2022 走看看