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

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

 

  
  
  
  
  1. # 根据给定的年月日以数字形式打印出日期 并且自动输出当前日期是周几 
  2. months = [ 
  3.     'January'
  4.     'February'
  5.     'March'
  6.     'April'
  7.     'May'
  8.     'June'
  9.     'July'
  10.     'August'
  11.     'September'
  12.     'October'
  13.     'November'
  14.     'December'
  15. # 以1~31的数字作为结尾的列表 
  16. endings = ['st','nd','rd'] + 17 * ['th']\ 
  17.         + ['st','nd','rd'] + 7 * ['th']\ 
  18.         + ['st'
  19. # 定义‘周几’这个变量,通过日期可以自动显示当前日期是周几 
  20. ending  = [ 
  21.     'Tuesday'
  22.     'Wednesday'
  23.     'Thursday'
  24.     'Friday'
  25.     'Saturday'
  26.     'Sunday'
  27.     'Monday'
  28.     'Tuesday'
  29.     'Wednesday'
  30.     'Thursday'
  31.     'Friday'
  32.     'Saturday'
  33.     'Sunday'
  34.     'Monday'
  35.     'Tuesday'
  36.     'Wednesday'
  37.     'Thursday'
  38.     'Friday'
  39.     'Saturday'
  40.     'Sunday'
  41.     'Monday'
  42.     'Tuesday'
  43.     'Wednesday'
  44.     'Thursday'
  45.     'Friday'
  46.     'Saturday'
  47.     'Sunday'
  48.     'Monday'
  49.     'Tuesday'
  50.     'Wednesday'
  51.     'Thursday'
  52.  
  53. year    = raw_input('Year: '
  54. month   = raw_input('Month(1-12): '
  55. day     = raw_input('Day(1-31): '
  56.  
  57. month_number = int(month) 
  58. day_number = int(day) 
  59.  
  60. # 记得要将月份和天数减1,以获得正确的索引 
  61. month_name = months[month_number-1
  62. ordinal = day + endings[day_number-1]  
  63. week_name = ending[day_number-1
  64.  
  65. print month_name + ' ' + ordinal + ', ' + year + '  ' + week_name 
写完之后,忽然觉得这样写,有点愚蠢,尤其是ending变量的定义,31个值全 部是手动输入并排序的,这样一来太浪费时间了,然后想着,能不能将这个变量的 定义简化一下,然后在群里问了下,很多哥们给了答案,不过多是调用函数,对于 我这个刚开始学习python的菜鸟来说,显然是看不懂的。然而,一个哥们的一句话 让我忽然有了灵感,其实我可以只给ending变量赋值第一周的周一到周日的值,剩 下的做取余运算就行了,然后就写了下面这些,这两段测试结果完全一样:
  
  
  
  
  1. # 根据给定的年月日以数字形式打印出日期 并且自动输出当前日期是周几 
  2. months = [ 
  3.     'January'
  4.     'February'
  5.     'March'
  6.     'April'
  7.     'May'
  8.     'June'
  9.     'July'
  10.     'August'
  11.     'September'
  12.     'October'
  13.     'November'
  14.     'December'
  15. # 以1~31的数字作为结尾的列表 
  16. endings = ['st','nd','rd'] + 17 * ['th']\ 
  17.         + ['st','nd','rd'] + 7 * ['th']\ 
  18.         + ['st'
  19. # 定义‘周几’这个变量,通过日期可以自动显示当前日期是周几 
  20. ending  = [ 
  21.     'Tuesday'
  22.     'Wednesday'
  23.     'Thursday'
  24.     'Friday'
  25.     'Saturday'
  26.     'Sunday'
  27.     'Monday'
  28.  
  29. year    = raw_input('Year: '
  30. month   = raw_input('Month(1-12): '
  31. day     = raw_input('Day(1-31): '
  32.  
  33. month_number = int(month) 
  34. day_number = int(day) 
  35.  
  36. # 记得要将月份和天数减1,以获得正确的索引 
  37. month_name = months[month_number-1
  38. ordinal = day + endings[day_number-1]  
  39. week_name = ending[(day_number-1)%7
  40.  
  41. 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")

你可能感兴趣的:(代码,python,比较)