【问题标题】:Is it possible to end a while loop with a try/except statement?是否可以使用 try/except 语句结束 while 循环?
【发布时间】:2020-11-06 19:52:25
【问题描述】:

所以这里的目标是结束我的while loop,或者我的脚本,如果用户的银行金额达到0 (zero),或者如果用户输入0 (zero) 的投注金额来终止脚本。问题是我不允许使用break 语句,尽管该程序与exit() 完美配合,但我也不能使用它,因为我们还没有通过本书“到达那里”(讲师想要我们使用我们在书中学到的东西,而不是我们已经知道的东西)。 我真的很难过。部分原因是我在 try/except 语句上遇到了很多困难,所以也许我只是在那里做错了,或者我需要尝试不同的循环。也许你们可以帮忙? 将在下面发布我的代码。就我而言,一切正常,但我不能使用exit()break,所以我需要一些关于另一种面向python 基础的方法的建议...... 那么我可以使用 try/except 吗?如果是这样,怎么做? 我需要程序继续循环,除非银行达到0 (zero) 或用户输入等于0 (zero),这就是我选择while loop 的原因。我需要使用不同的循环方法吗? 非常感谢您的帮助,我提前感谢大家。

import random

def rollDice(cnt):
    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    x = int(die1 + die2)
    print('Roll #', cnt, 'was', x)
    return x

def total_bank(bank):
    bet = 0
    while bet <= 0 or bet > min([500,bank]):
        print(f'You have ${bank} in your bank.')
        get_bet = input('Enter your bet (or 0 to quit): ')
        if get_bet == '0': 
            print('Thanks for playing!')
            exit()
        bet = int(get_bet)
    return bank,bet

def get_guess():
    guess = 0
    while (guess < 2 or guess > 12):
        try:
            guess = int(input('Choose a number between 2 and 12: '))
        except ValueError:
            guess = 0
        return guess

bank = 500
guess = get_guess
rcnt = 1

while rcnt < 4:
    rcnt = 0
    bank,bet = total_bank(bank)
    guess = get_guess()
    if guess == rollDice(rcnt+1):
        bank += bet * 2
    elif guess == rollDice(rcnt+2):
        bank += bet * .5
    elif guess == rollDice(rcnt+3):
        bank = bank
    else:
        bank = bank - bet
        if bank == 0:
            print(f'You have ${bank} in your bank.')
            print('Thanks for playing!')
            exit()

【问题讨论】:

    标签: python terminate try-except


    【解决方案1】:

    您当然可以使用异常退出循环;只需在 while 循环内引发异常,然后在循环外捕获它:

    def total_bank(bank):
        bet = 0
        try:
            while bet <= 0 or bet > min([500,bank]):
                print(f'You have ${bank} in your bank.')
                get_bet = input('Enter your bet (or 0 to quit): ')
                if get_bet == '0': 
                    print('Thanks for playing!')
                    raise StopIteration()
                bet = int(get_bet)
        except StopIteration:
            pass
        return bank,bet
    

    但更简单的是从循环内部返回:

    def total_bank(bank):
        bet = 0
        while bet <= 0 or bet > min([500,bank]):
            print(f'You have ${bank} in your bank.')
            get_bet = input('Enter your bet (or 0 to quit): ')
            bet = int(get_bet)
            if get_bet == '0': 
                print('Thanks for playing!')
                return bank, bet
            return bank, bet
    

    【讨论】:

    • 另一种选择是创建一个变量 stop=False 并向 while 添加一个条件,例如 `while bet min([500,bank]) 或 stop == False´ 和您可以在 if 中将 stop 更改为 true
    • 第二个解决方案的唯一问题是它现在为我的银行引发了 NoneType 错误,在 while 循环中的 bet = total_bank(bank) 语句。
    • 我认为这是因为你需要在 while 语句之前 bet=0 否则 bet 不会被定义但我不确定
    • @FlavioMoraes 是的,我只是尝试这样做,但它也不起作用。我不确定我应该怎么做。 Tbh exit() 本来可以解决我的问题,但不幸的是,我不允许包含我当前的任何知识。我将不得不继续玩弄它,直到我弄明白为止。也许其他人可能会有一些建议。无论如何,如果不是因为错误,我认为这个解决方案将是一个完美、简单的解决方案。
    • 您是否尝试过我在 if 中添加条件的建议?
    【解决方案2】:

    我对 try 和 except 函数不是很了解,但是使用 try 块你可能会引发错误并像这样结束程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2013-04-10
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      相关资源
      最近更新 更多