簡體   English   中英

函數在第二次調用后不返回值

[英]Function not returning values after being called for a second time

我正在嘗試完成一個python Hangman miniproject,以幫助我學習編碼。

我創建了一個函數,希望可以要求玩家輸入字母,檢查字母是否只有1個字母,並確保它不是數字。

這是我到目前為止的代碼:

def getLetter():
    letter = raw_input('Please enter a letter...')

    if letter.isdigit() == True:
        print('That is a number!')
        getLetter()

    if len(str(letter)) >1:
        print("Sorry, you have to enter exactly ONE letter")
        getLetter()

    else:
        return letter

當第一個輸入正確時,即正常工作。 一個字母。 但是,如果輸入不正確,例如'ddddd',則程序會要求輸入另一個字母,但將返回初始輸入('ddddd')而不是新輸入,或者什么都不返回。

如何使其返回新輸入? 我需要清除raw_input嗎? 如果是這樣,怎么辦?

您不會返回遞歸調用的結果; 調用getLetter()任何地方都會丟棄返回值。

在這些調用之前添加return以將結果傳遞到調用鏈:

return getLetter()

但是,你不應該使用遞歸可言 ; 使用循環代替:

def getLetter():
    while True:
        letter = raw_input('Please enter a letter...')

        if letter.isdigit() == True:
            print('That is a number!')
            continue

        if len(str(letter)) >1:
            print("Sorry, you have to enter exactly ONE letter")
            continue

        return letter

每個遞歸調用都會添加到調用堆棧中,該堆棧的大小不是無限的。 最終,總是輸入數字的用戶會破壞您的程序! 有關更多信息,請參見要求用戶提供輸入,直到他們給出有效答復為止

def get_valid_letter():    
    while True:

        letter = raw_input('Please enter a letter...')
        if letter.isdigit() == True:
            print('That is a number!')

        elif len(str(letter)) >1:
            print("Sorry, you have to enter exactly ONE letter")

        else:
            return letter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM