每天开心一点

Python:每日一题 78

2017-11-27 14:35:00    六月    553    来源: http://bbs.fishc.com/thread-94349-1-1.html

哈哈哈,我觉得这道题特别有意思~






求平均数任务:请你编写一个函数average_string(),这个函数可以接受一个字符串,这个字符串中都是英文数字,我们要通过一系列高端操作来得到英文字符串的平均数。注意:数字的范围是0到9,如果字符串中有超过这个范围的数字或者其他字符串,就返回'n / a'


例子:

  1. average_string('one three two')
  2. >>>two
  3. average_string('five five five')
  4. >>>five
  5. average_string('ku fthj two')
  6. >>>'n / a'
复制代码




楼主解法:
  1. def avg(l):
  2.     return sum(l) // len(l)


  3. def average_string(s):
  4.     l = []
  5.     number = {
  6.         'zero': 0,
  7.         'one': 1,
  8.         'two': 2,
  9.         'three': 3,
  10.         'four': 4,
  11.         'five': 5,
  12.         'six': 6,
  13.         'seven': 7,
  14.         'eight': 8,
  15.         'nine': 9
  16.     }
  17.     english = {
  18.         0: 'zero',
  19.         1: 'one',
  20.         2: 'two',
  21.         3: 'three',
  22.         4: 'four',
  23.         5: 'five',
  24.         6: 'six',
  25.         7: 'seven',
  26.         8: 'eight',
  27.         9: 'nine'
  28.     }
  29.     s = s.split(' ')
  30.     for one in s:
  31.         try:
  32.             l.append(number[one])
  33.         except Exception:
  34.             return 'n/a'
  35.     return english[avg(l)]
复制代码

大神解法:


  1. N = ['zero','one','two','three','four','five','six','seven','eight','nine']

  2. def average_string(s):
  3.     try:
  4.         return N[sum(N.index(w) for w in s.split()) // len(s.split())]
  5.     except (ZeroDivisionError, ValueError):
  6.         return 'n/a'
复制代码