簡體   English   中英

驗證用戶輸入以查看是否在數字范圍內,如果不是,則循環返回以再次請求用戶輸入

[英]Validating user input to see if in range of numbers, if not loop back to ask for user input again

如果玩家輸入了任何超出范圍或無效的值,我希望它返回以要求他再次下注。

當我用int()包裝raw_input時,我可以完成一半的工作。

但是,如果說玩家不小心鍵入了一個字母,或者只是直接按Enter鍵卻沒有鍵入任何內容,則會拋出錯誤,從而停止游戲/腳本。

因此,如果玩家確實犯了這樣的錯誤,我需要它再次循環回到“下注”,而不是拋出錯誤並使腳本崩潰。

def betAmount():
    if number_of_hands == 1:
        if chip_count_player1 > 0:
            global chips_bet
            chips_bet = raw_input("Place your bet!")
            if chips_bet in range(0, chip_count_player1 + 1):
                print "Your bet is within range"
            else:
                print "NOT IN RANGE"
                betAmount()
  1. 您需要將chips_bet轉換為chips_bet的數字

     try: chips_bet = int(raw_input("Place your bet!")) except ValueError: betAmount() 
  2. 您正在構造一個新的數字列表,然后檢查是否有chips_bet 那是低效的。 你可以這樣檢查

     if 0 <= chips_bet <= chip_count_player1: 
  3. 基本思路可以這樣實現

     bet = getBet() ... def getBet(maximum): bet = -1 while (bet < 0) or (bet > maximum): try: bet = int(raw_input("Place your bet!")) except ValueError: pass return bet 

您可以將提示/輸入/驗證循環拆分為一個小函數,然后調用該函數(將重試循環與程序邏輯分開會更容易)

例如,這不會拋出,只會返回一個經過驗證的數字:

def safe_int_input(prompt, validate):
    while True:
        try:
            val = int(raw_input(prompt))
            if validate(val):
                return val
        except: pass
        print "invalid input"

並且您可以這樣稱呼它:

chips_bet = safe_int_input("Place your bet! ",
                          lambda v:(v >= 0 and v <= chip_count_player1))

暫無
暫無

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

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