我在python中学习递归。我写了一个程序,但它无法正常工作。我是python的初学者。我有两个函数 scrabbleScore()和 letterScore()。 scrabbleScore()还会调用 letterscore()。这是我的代码:
def letterScore( let ):
if let in ['a','e','i','l','n','o','r','s','t','u']:
return 1
elif let in ['d','g']:
return 2
elif let in ['b','c','m','p']:
return 3
elif let in ['f','h','v','w','y']:
return 4
elif let=='k':
return 5
elif let in ['j','x']:
return 8
elif let in ['q','z']:
return 10
else:
return 0
p = 0
def scrabbleScore( S ):
if S == "":
return 0
else:
global p
p=p+letterScore(S[0])
scrabbleScore(S[1:])
return p
print "scrabbleScore('quetzal'): 25 ==", scrabbleScore('quetzal')
print "scrabbleScore('jonquil'): 23 ==", scrabbleScore('jonquil')
print "scrabbleScore('syzygy'): 25 ==", scrabbleScore('syzygy')
print "scrabbleScore('abcdefghijklmnopqrstuvwxyz'): 87 ==", scrabbleScore('abcdefghijklmnopqrstuvwxyz')
print "scrabbleScore('?!@#$%^&*()'): 0 ==", scrabbleScore('?!@#$%^&*()')
print "scrabbleScore(''): 0 ==", scrabbleScore('')
答案 0 :(得分:1)
我会将你的scrabbleScore重写为这样的
def scrabbleScore(S):
def helper(S, p):
if S == "":
return p
else:
p += letterScore(S[0])
return helper(S[1:], p)
return helper(S, 0)
这就是你如何写它。 p
被称为akkumulator,不应该是全局的(一般来说,应该避免全局变量)。我没有弄清楚为什么你的程序不起作用,但我会打印出正确的结果。
答案 1 :(得分:0)
它无法正常工作,因为您使用全局变量来存储中间结果。致电" scrabbleScore"第一次p值变为25,你需要重置它。
这里的解决方案是避免使用全局变量:
def scrabbleScore( S ):
p = 0
if S == "":
return 0
else:
p = p + letterScore(S[0])
p = p + scrabbleScore(S[1:])
return p
答案 2 :(得分:0)
每次调用p
后,您的变量scrabbleScore(S)
应再次初始化为零。这将解决您的问题。例如:
print "scrabbleScore('quetzal'): 25 ==", scrabbleScore('quetzal')
p=0
print "scrabbleScore('jonquil'): 23 ==", scrabbleScore('jonquil')