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[0])
 25     month = int(date[1])
 26     day = int(date[2])
 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 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 35 
 36     # nDays = 0
 37     # i = 1
 38     # while i < month:
 39     #     nDays += days[i-1]
 40     #     i = i + 1
 41     nDays = sum(days[i] 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[0].islower():
 65                 line = line[0].upper() + line[1:]
 66                 has_invalid_name = True
 67             cur = line.strip().split(', ')
 68             user_scores.append(UserProfier(cur[0], int(cur[1]), int(cur[2])))
 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")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏开发那些事

【Unity游戏开发】Lua中的os.date和os.time函数

  最近马三在工作中经常使用到了lua 中的 os.date( ) 和 os.time( )函数,不过使用的时候都是不得其解,一般都是看项目里面怎么用,然后我就...

20340
来自专栏C语言及其他语言

【每日一题】问题 1108: 守望者的逃离

题目描述 恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤...

39080
来自专栏Java后端技术

摆脱定时任务的cron表达式的困扰

  最近因为需要,需要适用Spring的task定时任务进行跑定时任务,以前也接触过,但是因为懒没有好好地理解@Scheduled的cron表达式,这次便对它做...

5610
来自专栏沈唁志

使用PHP实现数组的笛卡尔积来处理商品规格

在优化商城项目的时候,选择将商品的内容、规格、库存和价格分三个表来写。将多个规格的id合并存在一个字段中,按照从小到大的顺序来排列,使用逗号分隔

17220
来自专栏偏前端工程师的驿站

JS魔法堂:不完全国际化&本地化手册 之 理論篇

前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"...

25180
来自专栏司想君

前端也要学系列:设计模式之装饰者模式

今天我们来讲另外一个非常实用的设计模式:装饰者模式。这个名字听上去有些莫名其妙,不着急,我们先来记住它的一个别名:包装器模式。

10020
来自专栏编程一生

谈面试时从写一个单例开始究竟能问多深及终极解决方案

15340
来自专栏云端漫步

go设计模式之抽象工厂

在上一篇文章中,通过手机的例子对工厂方法进行了展开。制造商不单单只生产手机这一种产品,同时也生产pc,如果工厂扩展其它业务,工厂方法模式就不适用了。为了实现工厂...

17600
来自专栏熊二哥

.NET工作准备--01前言

01应聘须知(已过时) -1.了解软件开发大环境。 -2.准备简历:不宜超过一页,永远准备中文,模板。 -3.渠道:3大网站,中华英才,前程无忧(51job最...

22480
来自专栏Android开发实战

设计模式-适配器模式

适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

12450

扫码关注云+社区

领取腾讯云代金券