我正在用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('')
它不能正常工作,因为您正在使用全局变量来存储中间结果。第一次调用“scrabbleScore”后,p值将变为25,您需要重置它。在
这里的解决方案是完全避免使用全局变量:
每次调用
p
之后,变量p
应再次初始化为零。这会解决你的问题。示例:我会把你的拼字游戏分数改写成这样
你可以这样写。
p
被称为akkumulator,不应该是全局变量(通常,应该避免全局变量)。我没弄明白你的程序为什么不起作用,但我会打印出正确的结果。在相关问题 更多 >
编程相关推荐