Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在验证用户输入,以查看是否在数字范围内,如果不在,则返回以再次请求用户输入_Python_Loops - Fatal编程技术网

Python 正在验证用户输入,以查看是否在数字范围内,如果不在,则返回以再次请求用户输入

Python 正在验证用户输入,以查看是否在数字范围内,如果不在,则返回以再次请求用户输入,python,loops,Python,Loops,如果玩家输入任何超出范围或无效值,我希望它返回,要求他再次下注 当我用int()包装原始输入时,我可以实现这一点 但是,如果玩家无意中键入了一个字母,或者只是在没有键入任何内容的情况下按enter键,则会抛出一个错误,从而停止游戏/脚本 因此,如果玩家确实犯了这样的错误,我需要它再次循环到“下注”,而不是抛出错误并破坏脚本 def betAmount(): if number_of_hands == 1: if chip_count_player1 > 0:

如果玩家输入任何超出范围或无效值,我希望它返回,要求他再次下注

当我用int()包装原始输入时,我可以实现这一点

但是,如果玩家无意中键入了一个字母,或者只是在没有键入任何内容的情况下按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()
  • 您需要将
    筹码\u-bet
    转换为如下数字

    try:
        chips_bet = int(raw_input("Place your bet!"))
    except ValueError:
        betAmount()
    
    if 0 <= chips_bet <= chip_count_player1:
    
    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
    
  • 您正在构建一个新的数字列表,然后检查
    筹码是否在其中。这是低效的。你可以这样检查

    try:
        chips_bet = int(raw_input("Place your bet!"))
    except ValueError:
        betAmount()
    
    if 0 <= chips_bet <= chip_count_player1:
    
    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
    

    如果0您可以将prompt/input/validate循环拆分为一个小函数,只需调用它即可(将重试循环与程序逻辑分开比较容易)

    例如,这不会抛出,只会返回一个已验证的数字:

    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))
    
    chips\u bet=safe\u int\u输入(“下注!”,
    
    lambda v:(v>=0和v您可能想看看昨天问的这个问题: