0

我正在尝试分析用户输入并且只允许输入整数。我已经成功地只允许在一定范围内使用 100 的面额,但我无法弄清楚如何提示用户在输入随机字符串时重新输入数据。尝试使用“try”命令只会导致程序卡住:

while True:
  try:
    bet=int(raw_input('Place your bets please:'))
  except ValueError:
    print 'l2type'
#The following receives a betting amount from the user, and then assesses whether it is a legal bet or not. If not, the user is prompted to enter a legal bet.
while True:
 if bet%100==0 and 100<=bet<=20000:
    print bet,"Your bet has been accepted, can you make a million?"
    break
 else:
    print bet,"Please enter a legal bet. The table minimum is 100, with a maximum of 20000 in increments of 100."
    bet = input('Place your bets please:')
4

2 回答 2

3

您有拒绝非整数输入的正确方法,但如果您的用户输入有效输入,您需要跳出循环。使用 break 语句:

while True:
    try:
        bet=int(raw_input('Place your bets please:'))
        break # we only get here if the input was parsed successfully
    except ValueError:
        print 'l2type'

您可能还想在循环内移动范围检查。如果超出范围的输入自然不会导致异常,请使用 if 语句确保仅在输入完全有效时才执行“break”。

于 2013-03-31T19:32:25.087 回答
-2

我更喜欢我的递归版本:

def ask_bet(prompt):
    bet = raw_input(prompt)

    # Validation. If the input is invalid, call itself recursively.
    try:
        bet = int(bet)
    except ValueError:
        return ask_bet('Huh? ')
    if bet % 100 != 0:
        return ask_bet('Huh? ')
    if not 100 <= bet <= 20000:
        return ask_bet('Huh? ')

    # The input is fine so return it.
    return bet

ask_bet("Place your bets please: ")

在我看来,这比 while 循环更干净、更容易阅读。在第一次迭代之后,您不必担心什么是属性值?添加新的验证规则也很简单。

一般来说,我尽量避免使用 while 循环来支持递归版本。当然,并非一直如此,因为它更慢并且堆栈不是无限的。

于 2013-03-31T20:31:09.707 回答