美好的一天,
我已经开始使用python,并在制作了一些脚本(骰子生成,madlibs,子手)之后,尝试使用战舰脚本。
我意识到这种编码可能不是最有效的编码方式,但是我目前的目标是在有限的理解下使其工作。
在脚本的一部分中,我有函数来照顾玩家的猜测。
def turn():
board = ['A', 'B', 'C']
guess = input('Enter the target coordinate: ')
try:
if guess[:1].upper() in board and int(guess[1:]) in range(1,11):
guess = guess.upper()
print('Targeting %s!' % (guess))
return guess
elif guess == 'quit': quit
else:
print('Please enter a proper coordinate using A thru J and 1 thru 10.')
turn()
except:
print('Please enter a proper coordinate using A thru J and 1 thru 10.')
turn()
print(turn())
如果我输入“ a2”,则会显示以下内容
Targeting A2!
A2
符合我的期望
当我输入错误的输入'bla'或'a13'时,系统提示我输入新的输入。到目前为止,一切都按预期进行,但是当我现在输入正确的输入“ a2”时,我得到以下信息
Targeting A2!
None
我无法理解为什么当我立即输入一个好的输入时,“返回猜测”为什么会正常工作,而当我第一次输入一个错误的输入时却无法理解。
希望你们中的一位能为我澄清一下。
答案 0 :(得分:4)
您需要返回递归调用的结果,否则它们将隐式为None
。
注意:Python中的每个方法/函数都有一个返回值。如果未明确设置,则默认为None
。
def turn():
board = ['A', 'B', 'C']
guess = input('Enter the target coordinate: ')
try:
if guess[:1].upper() in board and int(guess[1:]) in range(1,11):
guess = guess.upper()
print('Targeting %s!' % (guess))
return guess
elif guess == 'quit':
quit
else:
print('Please enter a proper coordinate using A thru J and 1 thru 10.')
return turn() # return the result of the recursive call
except:
print('Please enter a proper coordinate using A thru J and 1 thru 10.')
return turn() # return the result of the recursive call
print(turn())