困扰了半天的一段代码

 

  
  
  
  
  1.  # 根据给定的年月日以数字形式打印出日期 
  2.  
  3. months = [ 
  4.     'January'
  5.     'February'
  6.     'March'
  7.     'April'
  8.     'May'
  9.     'June'
  10.     'July'
  11.     'August'
  12.     'September'
  13.     'October'
  14.     'November'
  15.     'December'
  16. # 以1~31的数字作为结尾的列表 
  17. endings = ['st','nd','rd'] + 17 * ['th']\ 
  18.             + ['st','nd','rd'] + 7 * ['th']\ 
  19.             + ['st'
  20.  
  21. year    = raw_input('Year: '
  22. month   = raw_input('Month(1-12): '
  23. day     = raw_input('Day(1-31): '
  24.  
  25. month_number = int(month) 
  26. day_number = int(day) 
  27.  
  28. # 记得要将月份和天数减1,以获得正确的索引 
  29. month_name = months[month_number-1
  30. ordinal = day + endings[day_number-1
  31.  
  32. print month_name + ' ' + ordinal + ', ' + year 

endings 这行代码困扰了很久,一直不明白定义的endings变量赋值后面为什么要加上17*和7*,不明白17 * ['th']、 7 * ['th']这两个表达式到底什么意思,思索了1个小时,一点头绪都没有,跟一个同样在学习python的同事研究了半天也没结果,后来在同事的启发下,百度了这行代码,果然不止我一人被困扰了,参考了几位同仁的答案后豁然开朗,原来答案是这样的:
原来该变量定义的是1-31这31个数的英文后缀,这31个数的英文是1:first 2:second 3:third 4:fourth 5:fifth 6:sixth 7:seventh 8:eighth 9:ninth 10:tenth 11:eleventh 12:twelfth 13:thirteenth 14:fourteenth 15:fifteenth 16:sixteenth 17:seventeenth 18:eighteenth 19:ninteenth 20:twentieth 21:twentyfirst 22:twenty-second 23:twenty-third 24:twenty-fourth 25:twenty-fifth 26:twenty-sixth 27;twenty-seventh 28:twenty-eighth 29:twenty-ninth 30:thirtieth 31:thirty-first   
其中在第一个 ['st','nd','rd']后面从fourth到twentieth一共是17个‘th’,然后是又一个['st','nd','rd']后面再从twenty-fourth到thirtieth一共是7个‘th’, 17 * ['th']的意思就是:给这个数据添加17个'th'字符串;例如
a=3*['a']和a=['a','a','a']是一样的。纠结了好久哇,原来这么简单

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