Python-为什么我的函数在print语句中正确使用变量,但在调用时却不正确?

时间:2019-05-14 11:51:58

标签: python

美好的一天,

我已经开始使用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

我无法理解为什么当我立即输入一个好的输入时,“返回猜测”为什么会正常工作,而当我第一次输入一个错误的输入时却无法理解。

希望你们中的一位能为我澄清一下。

1 个答案:

答案 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())