哈哈哈,我觉得这道题特别有意思~
求平均数任务:请你编写一个函数average_string(),这个函数可以接受一个字符串,这个字符串中都是英文数字,我们要通过一系列高端操作来得到英文字符串的平均数。注意:数字的范围是0到9,如果字符串中有超过这个范围的数字或者其他字符串,就返回'n / a'
例子:
- average_string('one three two')
- >>>two
- average_string('five five five')
- >>>five
- average_string('ku fthj two')
- >>>'n / a'
复制代码
楼主解法:
- def avg(l):
- return sum(l) // len(l)
- def average_string(s):
- l = []
- number = {
- 'zero': 0,
- 'one': 1,
- 'two': 2,
- 'three': 3,
- 'four': 4,
- 'five': 5,
- 'six': 6,
- 'seven': 7,
- 'eight': 8,
- 'nine': 9
- }
- english = {
- 0: 'zero',
- 1: 'one',
- 2: 'two',
- 3: 'three',
- 4: 'four',
- 5: 'five',
- 6: 'six',
- 7: 'seven',
- 8: 'eight',
- 9: 'nine'
- }
- s = s.split(' ')
- for one in s:
- try:
- l.append(number[one])
- except Exception:
- return 'n/a'
- return english[avg(l)]
复制代码
大神解法:
- N = ['zero','one','two','three','four','five','six','seven','eight','nine']
- def average_string(s):
- try:
- return N[sum(N.index(w) for w in s.split()) // len(s.split())]
- except (ZeroDivisionError, ValueError):
- return 'n/a'
复制代码
|