jackfya 发表于 2015-11-29 14:45:22

python基础的几个小练习题

  题目:
  1、写一个程序,判断2008年是否是闰年。
  2、写一个程序,用于计算2008年10月1日是这一年的第几天?(2008年1月1日是这一年的第一天)
  3、(文件题)有一个“record.txt”的文件,内容如下:



# name, age, score

tom, 12, 86
Lee, 15, 99
Lucy, 11, 58
Joseph, 19, 56
  第一栏为姓名(name),第二栏为年纪(age),第三栏为得分(score)
  现在,写一个Python程序,
  1)读取文件
  2)打印如下结果:
  得分低于60的人都有谁?
  谁的名字以L开头?
  所有人的总分是多少?
  3)姓名的首字母需要大写,该record.txt是否符合此要求? 如何纠正错误的地方?
  4、(练习正则表达式)有一个文件,文件名为output_1981.10.21.txt 。下面使用Python: 读取文件名中的日期时间信息,并找出这一天是周几。将文件改名为output_YYYY-MM-DD-W.txt (YYYY:四位的年,MM:两位的月份,DD:两位的日,W:一位的周几,并假设周一为一周第一天)
  以下是程序清单:



1 #-*-coding:utf-8 -*-
2
3 # (1) judge leap year
4 def judge_leap_year(n):
5   # if n%4 == 0 and n%100 != 0:
6   #   return True
7   # if n%100 == 0 and n%400 == 0:
8   if (n%4 == 0 and n%100 != 0) or (n%100 == 0 and n%400 == 0):
9         return True
10   else:
11         return False
12
13 # ===================================================================
14 # (2) computing the sum days of any day(**.**.**)
15 def compute_year_counts(datestr):
16   # deal with these case:
17   # 2012.12.2
18   # 2012/12/2
19   # 2012-12-2
20   if datestr.find('.') > 0: date = datestr.split('.')
21   if datestr.find('/') > 0: date = datestr.split('/')
22   if datestr.find('-') > 0: date = datestr.split('-')
23
24   year = int(date)
25   month = int(date)
26   day = int(date)
27   if (month < 1 or month > 12):
28         print "the error month!"
29         return -1
30   if (day > 31):
31         print "the error day!"
32         return -1
33
34   days =
35
36   # nDays = 0
37   # i = 1
38   # while i < month:
39   #   nDays += days
40   #   i = i + 1
41   nDays = sum(days for i in range(0, month - 1))
42   if (judge_leap_year(year)):
43         nDays += 1
44   return nDays + day
45
46 datestring = raw_input("input the datetime info:-->")
47 print compute_year_counts(datestring)
48
49 # ===================================================================
50 # (3) read and write file: use class if perfect!
51 class UserProfier(object):
52   def __init__(self, name, age, score):
53         self.name = name
54         self.age = age
55         self.score = score
56
57 def read_file_and_anlysis(filetext):
58   line_read = []
59   user_scores = []
60   has_invalid_name = False #the invalid name
61
62   for line in filetext:
63         if not line.startswith('#') and len(line.strip()) != 0:
64             if line.islower():
65               line = line.upper() + line
66               has_invalid_name = True
67             cur = line.strip().split(', ')
68             user_scores.append(UserProfier(cur, int(cur), int(cur)))
69             line_read.append(line)
70   # print the file
71   print "print the file"
72   for i in line_read:
73         print i
74   # statistic the score < 60
75   print "users whose score lower 60:"
76   for scores in filter(lambda s: s.score < 60 , user_scores):
77         print scores.name
78   # statistic the begin of name which is 'L'
79   print "users whose name's begin is 'L':"
80   for names in filter(lambda s: s.name.startswith('L'), user_scores):
81         print names.name
82   # statistic the total scores of all one
83   print "the total scores of everyone:"
84   allscores = map(lambda s:s.score, user_scores)
85   print allscores
86   print reduce(lambda x, y: x+y, allscores, 0)
87
88 # open the file
89 with open("record.txt") as f:
90   read_file_and_anlysis(f)
91
92 # ===================================================================
93 # (4) the useful example of regular expression
94 import os, re, datetime
95
96 filename = "output_1981.10.21.txt"
97
98 date_time = re.search("(?P<year>\d{4})\.(?P<month>\d{2})\.(?P<day>\d{2})\.", filename)
99
100 year = date_time.group('year')
101 month = date_time.group('month')
102 day = date_time.group('day')
103
104 print year, month, day
105 date = datetime.date(int(year), int(month), int(day))
106 w = date.weekday() + 1
107 W = str(w)
108 os.rename(filename, "output_"+year+'-'+month+'-'+day+'-'+str(w)+".txt")
  
页: [1]
查看完整版本: python基础的几个小练习题