您的位置:首页 > 编程语言

两段代码的比较   其实很多问题都可以简单化的

2012-05-08 11:49 253 查看
还是昨天书上那段示例代码,觉得可以发散思维下,写几句能让输入的数字自动计算并显示当前是周几,于是就写了下面这段代码:

# 根据给定的年月日以数字形式打印出日期 并且自动输出当前日期是周几
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
]
# 以1~31的数字作为结尾的列表
endings = ['st','nd','rd'] + 17 * ['th']\
+ ['st','nd','rd'] + 7 * ['th']\
+ ['st']
# 定义‘周几’这个变量,通过日期可以自动显示当前日期是周几
ending  = [
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
]

year    = raw_input('Year: ')
month   = raw_input('Month(1-12): ')
day     = raw_input('Day(1-31): ')

month_number = int(month)
day_number = int(day)

# 记得要将月份和天数减1,以获得正确的索引
month_name = months[month_number-1]
ordinal = day + endings[day_number-1]
week_name = ending[day_number-1]

print month_name + ' ' + ordinal + ', ' + year + '  ' + week_name
写完之后,忽然觉得这样写,有点愚蠢,尤其是ending变量的定义,31个值全 部是手动输入并排序的,这样一来太浪费时间了,然后想着,能不能将这个变量的 定义简化一下,然后在群里问了下,很多哥们给了答案,不过多是调用函数,对于 我这个刚开始学习python的菜鸟来说,显然是看不懂的。然而,一个哥们的一句话 让我忽然有了灵感,其实我可以只给ending变量赋值第一周的周一到周日的值,剩 下的做取余运算就行了,然后就写了下面这些,这两段测试结果完全一样:

# 根据给定的年月日以数字形式打印出日期 并且自动输出当前日期是周几
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
]
# 以1~31的数字作为结尾的列表
endings = ['st','nd','rd'] + 17 * ['th']\
+ ['st','nd','rd'] + 7 * ['th']\
+ ['st']
# 定义‘周几’这个变量,通过日期可以自动显示当前日期是周几
ending  = [
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday',
'Sunday',
'Monday',
]

year    = raw_input('Year: ')
month   = raw_input('Month(1-12): ')
day     = raw_input('Day(1-31): ')

month_number = int(month)
day_number = int(day)

# 记得要将月份和天数减1,以获得正确的索引
month_name = months[month_number-1]
ordinal = day + endings[day_number-1]
week_name = ending[(day_number-1)%7]

print month_name + ' ' + ordinal + ', ' + year + '  ' + week_name

这一下少了20几行,看来只要思考就会有收获。

补充: 网友提供的方法,目前还看不懂,留着以后研究

datetime.datetime(2012,05,8).strftime("%w")

将用户输入的格式化 一下, 然后传入 datetime里面. 调用strftime方法 得到该日期的星期

datetime.datetime(2012,05,8).strftime("%w")
datetime.datetime(2012,05,13).strftime("%w").replace("0","7")
本文出自 “Lucissfer的学习笔记” 博客,请务必保留此出处http://lucissfer.blog.51cto.com/1340825/856861
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐