免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mpstat
打印 上一主题 下一主题

[文本处理] 码农的欧洲杯:欢迎各路神仙和高手挑战! [复制链接]

论坛徽章:
0
41 [报告]
发表于 2012-06-08 20:11 |只看该作者
我靠!!!!!

论坛徽章:
0
42 [报告]
发表于 2012-06-09 20:26 |只看该作者
神人啊 ~~~~~~~~~~~~~~~

论坛徽章:
0
43 [报告]
发表于 2012-06-10 11:29 |只看该作者

论坛徽章:
48
15-16赛季CBA联赛之青岛
日期:2021-01-07 13:41:2315-16赛季CBA联赛之上海
日期:2020-12-01 18:02:0720周年集字徽章-20	
日期:2020-10-28 14:14:2620周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之天津
日期:2020-10-18 22:51:412016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之北控
日期:2015-12-22 13:30:48操作系统版块每日发帖之星
日期:2015-12-07 06:20:00操作系统版块每日发帖之星
日期:2015-09-04 06:20:002015亚冠之德黑兰石油
日期:2015-08-05 18:46:082015年亚洲杯之巴勒斯坦
日期:2015-04-19 10:42:502015年亚洲杯之巴林
日期:2015-04-09 08:03:23
44 [报告]
发表于 2012-06-10 19:56 |只看该作者
Oh, my God, 咋一看还以为是猜了,原来写代码求解,赞

论坛徽章:
0
45 [报告]
发表于 2012-06-11 09:47 |只看该作者

论坛徽章:
0
46 [报告]
发表于 2012-06-13 15:41 |只看该作者
本帖最后由 aquei_cu 于 2012-06-13 15:44 编辑
  1. #coding:utf-8
  2. import operator
  3. NAME_FILE='name.txt'
  4. def all_days_in_a_year(func_create=None, args=None):
  5.     if None == func_create:
  6.         func_create = str
  7.     if None == args:
  8.         args = ''
  9.     all_days = dict()
  10.     for m in xrange(1, 13):
  11.         if m == 1\
  12.          or m == 3\
  13.          or m == 5\
  14.          or m == 7\
  15.          or m == 8\
  16.          or m == 10\
  17.          or m == 12:
  18.             for i in xrange(1, 32):
  19.                 all_days[m*100+i] = func_create(args)
  20.         elif m == 4\
  21.          or m == 6\
  22.          or m == 9\
  23.          or m == 11:
  24.              for i in xrange(1, 31):
  25.                 all_days[m*100+i] = func_create(args)
  26.         elif m == 2:
  27.             for i in xrange(1, 30):
  28.                 all_days[m*100+i] = func_create(args)
  29.             else:
  30.                 #NEVER DO IT!!
  31.                 pass
  32.     return all_days

  33. #DEBUG FUNCTION
  34. def showPlayers(players):
  35.     for p in players:
  36.         if None != p:
  37.             print p

  38. class Question(object):
  39.     def __init__(self, players):
  40.         """construct question object"""
  41.         self._players = players
  42.         self._is_sort_by_birthday = False

  43.     def _sort_by_birthday(self):
  44.         """sort players by birthday"""
  45.         self._players.sort(lambda p1, p2:cmp(p1.birthday(), p2.birthday()))
  46.         self._is_sort_by_birthday = True

  47.     def youngest(self, args=None):
  48.         """1.年纪最小的人"""
  49.         youngest = []
  50.         if False == self._is_sort_by_birthday:
  51.             self._sort_by_birthday()
  52.         return self._players[len(self._players)-1].name()

  53.     def oldest(self, args=None):
  54.         """2.年纪最大的人"""
  55.         if False == self._is_sort_by_birthday:
  56.             self._sort_by_birthday()
  57.         return self._players[0].name()

  58.     def birthday_of_most_man(self, args=None):
  59.         """3.哪一天出生的人最多"""
  60.         count = 0
  61.         result = []
  62.         days = [0 for x in xrange(0,32)];
  63.         for p in self._players:
  64.             days[p.birth_day()] += 1
  65.         for i in xrange(0,31):
  66.             if count < days[i]:
  67.                 count = days[i]
  68.                 day = i + 1
  69.         return str(day)+'日'

  70.     def birthday_same_me(self, args):
  71.         """4.和你生日相同的人,如果有的话找出来"""
  72.         month = args[0]
  73.         day = args[1]
  74.         same_birth_men = ''
  75.         if False == self._sort_by_birthday:
  76.             self._sort_by_birthday()
  77.         for p in self._players:
  78.             if (p.birth_month() == month) and (p.birth_day() == day):
  79.                 same_birth_men += p.name() + ', '
  80.         return same_birth_men[:len(same_birth_men)-2]

  81.     def country_coach_group(self, args):
  82.         """5.给定一个球员名,列出国籍与教练,处在哪个小组"""
  83.         name = args[0]
  84.         for p in self._players:
  85.             if p.name() == name:
  86.                 return (p.country() + ',' + p.coach() + ',' + p.group())

  87.     def club_in_most_men(self):
  88.         """6.哪个俱乐部的人最多"""
  89.         clubs = dict()
  90.         for p in self._players:
  91.             if False == clubs.has_key(p.club()):
  92.                 clubs[p.club()] = 1
  93.             else:
  94.                 clubs[p.club()] += 1
  95.         l = sorted(clubs.iteritems(), key=operator.itemgetter(1), reverse=True)
  96.         return str(l[0][0])

  97.     def pos_in_most_captains(self):
  98.         """7.队长里打什么位置的最多"""
  99.         positions = dict()
  100.         for p in self._players:
  101.             if False == p.captain():
  102.                 continue
  103.             if False == positions.has_key(p.pos()):
  104.                 positions[p.pos()] = 1
  105.             else:
  106.                 positions[p.pos()] += 1
  107.         l = sorted(positions.iteritems(), key=operator.itemgetter(1), reverse=True)
  108.         return str(l[0][0][:(len(l[0][0])-1)])

  109.     def older_than_me(self, args=None):
  110.         """8.比你年纪大的有多少人"""
  111.         age = args[0]
  112.         count = 0
  113.         for p in self._players:
  114.             if age < p.age():
  115.                 count += 1
  116.         return count

  117.     def birthday_of_no_man(self):
  118.         """9.列出365天里所有人都不过生日的日期"""
  119.         result = ''
  120.         all_days = all_days_in_a_year(int, 0)
  121.         for p in self._players:
  122.             all_days[p.birth_month_day()] += 1
  123.         for k in all_days.keys():
  124.             if all_days[k] == 0:
  125.                 k_str = str(k)
  126.                 k_str = k_str[:len(k_str)-2] + '-' + k_str[len(k_str)-2:]
  127.                 result += k_str + ','
  128.         return result[:len(result)-1]

  129.     def men_count_of_Pos(self):
  130.         """10.打各个位置的人一共有多少"""
  131.         positions = dict()
  132.         for p in self._players:
  133.             if False == positions.has_key(p.pos()):
  134.                 positions[p.pos()] = 1
  135.             else:
  136.                 positions[p.pos()] += 1
  137.         l = sorted(positions.iteritems(), key=operator.itemgetter(1), reverse=True)
  138.         result = str(positions)
  139.         return result[1:-1].replace('\'', '')

  140. def readdata(fname):
  141.     group = ''
  142.     coach = ''
  143.     country = ''
  144.     players = []
  145.     GROUP_KEY='Group '
  146.     COACH_KEY='Head coach:  '
  147.     COACH_COUNTRY_SEP=' ('
  148.     TITLE_KEY='#'
  149.     NUMBER_TITLE = '#'
  150.     POS_TITLE = 'Pos.'
  151.     NAME_TITLE = 'Player'
  152.     BIRTH_TITLE = 'Date of Birth'
  153.     AGE_TITLE = '(Age)'
  154.     CLUB_TITLE = 'Club'
  155.     PLAYER_KEY=' '
  156.     CAPTAIN_KEY = '(c)'
  157.     AGE_KEY = '(aged '

  158.     f = open(fname, 'r')
  159.     for line in f:
  160.         if line == '\n':
  161.             continue
  162.         if -1 != line.find(GROUP_KEY):
  163.             group = line[len(GROUP_KEY):]
  164.         elif -1 != line.find(COACH_KEY):
  165.             coach = line[len(COACH_KEY):]
  166.         elif -1 != line.find(TITLE_KEY):
  167.             pos_start = line.find(POS_TITLE)
  168.             name_start = line.find(NAME_TITLE)
  169.             birth_start = line.find(BIRTH_TITLE)
  170.             age_start = line.find(AGE_TITLE)
  171.             club_start = line.find(CLUB_TITLE)
  172.             continue
  173.         elif ' ' == line[0]:
  174.             infos = []
  175.             #0 = #
  176.             infos.append(line[0:pos_start-1])
  177.             #1 = Pos.
  178.             infos.append(line[pos_start:name_start-1])
  179.             #Player
  180.             #2 = Name
  181.             #3 = Captain
  182.             name = line[name_start:birth_start-1]
  183.             captain_key_pos = name.find(CAPTAIN_KEY)
  184.             if -1 != captain_key_pos:
  185.                 infos.append(name[:captain_key_pos].strip())
  186.                 infos.append(True)
  187.             else:
  188.                 infos.append(name.strip())
  189.                 infos.append(False)
  190.             #4 = Date of Birth
  191.             infos.append(line[birth_start+1:age_start-3])
  192.             #5 = Age
  193.             infos.append(line[age_start+len(AGE_KEY):club_start-2])
  194.             #6 = Club
  195.             infos.append(line[club_start:len(line)-1])
  196.             #7 = Group
  197.             infos.append(group[0])
  198.             #8 = Coach
  199.             infos.append(coach.strip())
  200.             #9 = Country
  201.             infos.append(country.strip())

  202.             players.append(Player(infos))
  203.         else:
  204.             country = line[:-1]
  205.     return players

  206. class Player(object):
  207.     def __init__(self, infos):
  208.         self._num = infos[0]
  209.         self._pos = infos[1][1:]
  210.         self._name = infos[2]
  211.         self._captain = infos[3]
  212.         self._birthday = infos[4]
  213.         self._age = infos[5]
  214.         self._club = infos[6]
  215.         self._group = infos[7]
  216.         self._coach = infos[8]
  217.         self._country = infos[9]
  218.     def __str__(self):
  219.         player_str = ''
  220.         player_str += self._num
  221.         player_str += '\t'
  222.         player_str += self._name
  223.         player_str += '\t'
  224.         if self._captain:
  225.             player_str += '(c)'
  226.         else:
  227.             player_str += '   '
  228.         player_str += '\t'
  229.         player_str += self._pos
  230.         player_str += '\t'
  231.         player_str += self._birthday
  232.         player_str += '\t'
  233.         player_str += self._age
  234.         player_str += '\t'
  235.         player_str += self._club
  236.         player_str += '\t'
  237.         player_str += self._group
  238.         player_str += '\t'
  239.         player_str += self._coach
  240.         player_str += '\t'
  241.         player_str += self._country
  242.         player_str += '\t'
  243.         return player_str
  244.    
  245.     def name(self):
  246.         return self._name
  247.    
  248.     def num(self):
  249.         return int(self._num)
  250.    
  251.     def pos(self):
  252.         return self._pos
  253.    
  254.     def age(self):
  255.         return int(self._age)
  256.    
  257.     def birth_month(self):
  258.         return int(self._birthday.split('-')[1])
  259.    
  260.     def birth_day(self):
  261.         return int(self._birthday.split('-')[2])
  262.    
  263.     def birthday(self):
  264.         l = self._birthday.split('-')
  265.         return (int(l[0]) * 10000 + int(l[1]) * 100 + int(l[2]))

  266.     def birth_month_day(self):
  267.         l = self._birthday.split('-')
  268.         return (int(l[1]) * 100 + int(l[2]))

  269.     def country(self):
  270.         return self._country
  271.     def coach(self):
  272.         return self._coach
  273.     def club(self):
  274.         return self._club

  275.     def group(self):
  276.         return self._group
  277.     def captain(self):
  278.         return self._captain



  279. if __name__ == '__main__':
  280.     print 'file name:',
  281.     fn = raw_input()
  282.     if len(fn) == 0:
  283.         fn = NAME_FILE
  284.     players = readdata(fn)
  285.     q = Question(players)
  286. #    showPlayers(players)
  287.     fl = []
  288.     for f in dir(q):
  289.         if '_' != f[0]:
  290.             fl.append(f)

  291.     def compare_for_sort(p1_doc, p2_doc):
  292.         p1_doc_str = str(p1_doc)
  293.         p1_idx = int(p1_doc_str[:p1_doc_str.find('.')])
  294.         p2_doc_str = str(p2_doc)
  295.         p2_idx = int(p2_doc_str[:p2_doc_str.find('.')])
  296.         return cmp(p1_idx, p2_idx)

  297.     fl.sort(lambda p1, p2:\
  298.             compare_for_sort(\
  299.             q.__getattribute__(p1).__doc__,
  300.             q.__getattribute__(p2).__doc__\
  301.             ))
  302.     for f in fl:
  303.         print 'Q:', q.__getattribute__(f).__doc__
  304.         if 'birthday_same_me' == f:
  305.             month = 12
  306.             day = 2
  307.             print 'month(1-12):',
  308.             try:
  309.                 input_month = int(raw_input())
  310.                 if input_month > 0 and input_month < 13:
  311.                     month = input_month
  312.                 else:
  313.                     raise('')
  314.             except:
  315.                 print month
  316.             print 'day(1-31):',
  317.             try:
  318.                 input_day = int(raw_input())
  319.                 if input_day > 0 and input_day < 31:
  320.                     day = input_day
  321.                 else:
  322.                     raise('')
  323.             except:
  324.                 print day
  325.             print 'A:', str(month), '-', str(day), ':', q.__getattribute__(f)((month, day))
  326.         elif 'country_coach_group' == f:
  327.             name = 'Danijel Pranjic'
  328.             print 'player name:',
  329.             try:
  330.                 input_name = raw_input()
  331.                 if len(input_name) != 0:
  332.                     name = input_name
  333.                 else:
  334.                     raise('')
  335.             except:
  336.                 print name
  337.             print 'A:', q.__getattribute__(f)((name,))
  338.         elif 'older_than_me' == f:
  339.             age = 30
  340.             print 'age:',
  341.             try:
  342.                 age = int(raw_input())
  343.             except:
  344.                 print age
  345.             print 'A:', q.__getattribute__(f)((int(age),))
  346.         else:
  347.             print 'A:', q.__getattribute__(f)()
  348.     exit(0)
复制代码
  1. Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32

  2. >python py2012EuropeanCup.py
  3. file name:
  4. Q: 1.年纪最小的人
  5. A: Jetro Willems
  6. Q: 2.年纪最大的人
  7. A: Kostas Chalkias
  8. Q: 3.哪一天出生的人最多
  9. A: 14日
  10. Q: 4.和你生日相同的人,如果有的话找出来
  11. month(1-12):
  12. 12
  13. day(1-31):
  14. 2
  15. A: 12 - 2 : Danijel Pranjic
  16. Q: 5.给定一个球员名,列出国籍与教练,处在哪个小组
  17. player name:
  18. Danijel Pranjic
  19. A: Croatia,Slaven Bilic,C
  20. Q: 6.哪个俱乐部的人最多
  21. A: Bayern Munich
  22. Q: 7.队长里打什么位置的最多
  23. A: MF
  24. Q: 8.比你年纪大的有多少人
  25. age:
  26. 30
  27. A: 62
  28. Q: 9.列出365天里所有人都不过生日的日期
  29. A: 1-01,1-03,1-07,1-20,1-21,1-29,1-30,1-31,2-06,2-07,2-08,2-10,2-17,2-19,2-22,
  30. 27,3-01,3-03,3-05,3-08,3-14,3-15,3-22,3-23,3-24,3-25,3-31,4-01,4-11,4-12,4-14,
  31. 15,4-17,4-23,4-24,4-26,5-03,5-06,5-10,5-12,5-14,5-18,5-25,5-28,6-01,6-02,6-05,
  32. 07,6-11,6-14,6-16,6-18,6-23,6-24,6-26,6-30,7-01,7-02,7-04,7-05,7-13,7-18,7-19,
  33. 23,7-25,7-27,7-29,7-30,7-31,8-05,8-07,8-09,8-10,8-22,8-25,8-26,8-29,9-01,9-07,
  34. 11,9-16,9-17,9-23,9-24,9-25,10-01,10-02,10-08,10-11,10-14,10-17,10-19,10-21,10
  35. 6,10-30,10-31,11-02,11-03,11-07,11-09,11-13,11-14,11-16,11-18,11-19,11-20,11-2
  36. 11-23,11-24,11-28,11-29,12-01,12-04,12-05,12-10,12-18,12-22,12-23,12-25,12-29,
  37. -31
  38. Q: 10.打各个位置的人一共有多少
  39. A: MF : 130, GK : 48, FW : 76, DF : 114
复制代码

论坛徽章:
0
47 [报告]
发表于 2012-06-14 14:48 |只看该作者
墙贴占座

论坛徽章:
0
48 [报告]
发表于 2012-06-14 14:54 |只看该作者
发现个问题:
回帖时的验证问答“chinaunix的简称”答CU(大写),是不能通过的?

论坛徽章:
0
49 [报告]
发表于 2012-06-14 16:23 |只看该作者
            看看  

论坛徽章:
0
50 [报告]
发表于 2012-06-14 22:06 |只看该作者
回复 7# rdcwayx
版大,问题1、2的代码有点小BUG哦。
int(d)返回结果是年,不包括月、日。假如有两个人的出生日期分别是:
1974-05-29
1974-05-30

其中,第一个在前,第二个在后。
你提供的代码执行结果将是:年纪最大的出生日期是1974-05-30。

同理,问题2也是如此。

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP