2013-04-03 36 views
1

我在我的程序中遇到了一個我正在寫的問題。我已經將這個問題縮小到了這兩個功能。當您調用函數enterPasswords,輸入無效數據(如「a」)時,會出現問題,然後通過輸入有效數據(如「hello」)來突破passwordLength函數。我在那裏留下了一些打印語句來幫助你看到問題。我試着添加回報,但同樣的問題仍然存在。Python:這兩個函數有什麼錯?

任何意見將不勝感激。如果你能告訴我爲什麼會出現問題,我確信我可以自己修復它。謝謝。

def passwordLength(password): 
     if (len(password) < 4) or (len(password) > 15): 
      print("Error from server: Your password must be at least four and at most fifteen characters long.") 
      enterPasswords() 


    def enterPasswords(): 
     password = input("Input password: ") 
     passwordLength(password) 
     print(password) 
     password2 = input("Re-enter password: ") 
     print(password, password2) 


    enterPasswords() 

這裏是我的問題的圖像(什麼我想知道的是,爲什麼沒有在節目結束,我一直強調的,爲什麼它堅持下去,爲什麼是「一」是印刷朝向端):

http://i.imgur.com/LEXQFTO.png

+0

,我無法重現你的問題。你可以發佈一個示例對話框,以便我們看到它是怎麼出錯的?你有一些奇怪的邏輯正在進行(例如,我可以輸入一個無效的密碼,然後是一個有效的密碼,然後確認無效的密碼),但程序確實運行。 –

+0

我已經使用描述和問題圖片編輯了我的帖子。謝謝你的回覆。 – user2240694

回答

4

看來,如果用戶在第一輸入的密碼無效,則重複 - 然而,如果用戶完成這個成功,則返回到初始?。相反,嘗試

def passwordLength(password): 
    if (len(password) < 4) or (len(password) > 15): 
     print("Error from server: Your password must be at least four and at most fifteen characters long.") 
     return False 
    return True 


def enterPasswords(): 
    password = input("Input password: ") 
    while not passwordLength(password): 
     password = input("Input password: ") 

    print(password) 
    password2 = input("Re-enter password: ") 
    print(password, password2) 

這將繼續要求用戶重新輸入密碼,首先,直到它是有效的,也只有這樣它會要求用戶確認。

+0

感謝您的反饋,我曾嘗試以您的方式實施我的計劃。我只是想知道爲什麼我的方式不按我想要的方式工作。 – user2240694

+0

@ user2240694正如我在我的文章中提到的那樣,以及您發佈的圖片說明,您的問題來自您從'passwordLength'調用'enterPasswords'函數的事實。 'enterPasswords'要求密碼兩次 - 但是,如果它無效,它會轉到'passwordLength',它啓動另一個'enterPasswords'會話。這會導致多次重新輸入提示。 所以,你可以 1.做類似的事情,以我做了什麼,讓'passwordLength'一個完全獨立的功能,去除'enterPasswords'代碼 2.休息的圓形性質,如果'使用 –

+0

哦,我passwordLength'請參閱,因爲輸入無效數據時enterPasswords函數沒有完成執行,程序將始終返回到輸入有效數據時停止的位置。我現在明白了這個問題,謝謝! – user2240694

0

passwordLength()中的密碼變量與enterPasswords()中的變量完全無關。行爲可能也不像你期望的那樣。試試這樣的:

def passwordLength(pw): 
    return 4 <= len(pw) <=15 

def getPw(): 
    return input("Enter password: ") 

def enterPasswords(): 
    pw = getPw() 
    while not passwordLength(pw): 
     print("Incorrect password length.") 
     pw = getPw() 

    # ... 
0

你的功能正在互相調用一個壞的方式。如果你試圖按照你的算法(使用你提到的'a'和'hello')的情況,你可能會看到這個問題。

這裏是一個解決方案:

def passwordLength(password): 
    if (len(password) < 4) or (len(password) > 15): 
     print("Error from server: Your password must be at least four and at most fifteen characters long.") 
     return False 
    else : return True  


def enterPasswords(): 
    passwordOK = False 
    while not passwordOK : 
     password = input("Input password: ") 
     passwordOK = passwordLength(password) 
    print(password) 
    password2 = input("Re-enter password: ") 
    print(password, password2) 

enterPasswords()