我正在寻找代码最后一行的错误,但我无法弄清楚它是什么。有任何想法吗?
def letterScore( let ):
let.lower()
if let in 'aAnNoOeErRsStTuUiIlL':
return 1
elif let in 'dDgG':
return 2
elif let in 'bBcCpPmM':
return 3
elif let in 'fFhHvVwWyY':
return 4
elif let in 'kK':
return 5
elif let in 'jJxX':
return 8
elif let in 'qQzZ':
return 10
else:
return 0
def scrabbleScore( s ):
return letterScore(s[0]) + scrabbleScore(s[1:len(s)])
答案 0 :(得分:1)
问:你的递归函数什么时候“触底”并停止递归?
答:没有。
问:当应时,它会停止递归吗?
答:len(s) == 0
。
Q值。 len(s) == 0
时实际会发生什么?
一个。您致电s[0]
并以IndexError
消亡。
如果您希望它是递归的,它应该看起来像
def scrabble_score(s):
if s: # Pythonic idiom for `len(s) > 0`
return letter_score(s[0]) + scrabble_score(s[1:])
else:
return 0
然而没有充分的理由让这个递归;迭代方法更简单,更快,
SCORES = dict(zip(
"abcdefghijklmnopqrstuvwxyz",
[1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10]
))
def letter_score(ch, scores=SCORES):
return scores.get(ch.lower(), 0)
def scrabble_score(word):
return sum(letter_score(ch) for ch in word)
答案 1 :(得分:0)
问题在于递归调用:
scrabbleScore(s[0])
当s
作为空字符串返回时(递归的基本情况),此调用将失败并抛出异常。
旁注:该行没有任何意义:let.lower()
- 它没有做任何事情。