繁体   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