Validating user input to see if in range of numbers, if not loop back to ask for user input again
如果玩家输入任何超出范围或无效值,我希望它循环回来让他再次下注。
当我用int()包装raw_input时,我可以得到这个中途工作。
但是,如果说玩家不小心输入一个字母或者只是输入而没有输入任何东西,那么就会抛出错误,从而停止游戏/剧本。
因此,如果玩家确实犯了这样的错误,我需要它再循环回"放下你的赌注",而不是抛出错误并使脚本崩溃。
1 2 3 4 5 6 7 8 9 10 | 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 2 3 4 | try: chips_bet = int(raw_input("Place your bet!")) except ValueError: betAmount() |
您正在构建一个新的数字列表,然后检查
1 | if 0 <= chips_bet <= chip_count_player1: |
基本思想可以像这样实现
1 2 3 4 5 6 7 8 9 | 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 |
你可以将你的提示/输入/验证循环分成一个小函数,然后调用它(将重试循环与程序逻辑分开更容易)
例如,这不会抛出,只会返回一个经过验证的数字:
1 2 3 4 5 6 7 8 | def safe_int_input(prompt, validate): while True: try: val = int(raw_input(prompt)) if validate(val): return val except: pass print"invalid input" |
你会这样称呼它:
1 2 | chips_bet = safe_int_input("Place your bet!", lambda v:(v >= 0 and v <= chip_count_player1)) |