循环继续循环,即使在终止消息之后

Loop continues looping, even after termination message

我在让 user input 在终止消息后停止循环时遇到了一些问题。基本上,在 Enter bet 字段中输入 0 (zero) 后,程序必须打印终止消息并结束。但是,它会在应该跳过时通过询问下一行输入 "Choose a number between 2 and 12" 来继续循环。 我知道 breakexit() 可以解决我的问题,但这些都不是可接受的解决方案。在 Enter bet 字段中输入 0 (zero) 后,我需要它来完成并打印终止消息。不继续执行程序。

示例需要输出:

you have 0 in your bank # starting amount
Enter bet (or 0 to quit): 0 
Thanks for playing!

我得到的是:

Enter bet (or 0 to quit): 0
Thanks for playing!
Choose a number between 2 and 12: # where the program continues to run 
# when it shouldn't. The user should only see this input field if they enter
# number above 0

这是代码

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): ')
        bet = int(get_bet)
        if get_bet == '0': 
            print('Thanks for playing!')
            return bank, 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

prog_info()
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 * 1.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!')

创建一个起始值为 500 美元的“银行”(变量)。

掷 2 个骰子

让玩家继续玩,直到他们输入“0”(零)作为赌注,或者当他们的银行达到“0”(零)时。

0 检查应该调用 exit

    if get_bet == '0': 
        print('Thanks for playing!')
        exit()

如果您不想使用 exitbreak,您需要使用条件

退出主循环
  • 更新total_bank

      if get_bet == '0': 
          print('Thanks for playing!')
      return bank, bet
    
  • 更新主循环

    bet = 1  # to start loop
    
    while rcnt < 4 and bet: # exit loop if bet=0
       rcnt = 0
       bank,bet = total_bank(bank)
       if not bet: continue  # exit game if bet = 0
       guess = get_guess()
       if guess == rollDice(rcnt+1):
           bank += bet * 2
       elif guess == rollDice(rcnt+2):
          bank += bet * 1.5
       elif guess == rollDice(rcnt+3):
           bank = bank
    else:
       if bet:  # bet = 0 if game end
           bank = bank - bet
           if bank == 0:
               print(f'You have ${bank} in your bank.')
               print('Thanks for playing!')
    

您将回到

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 * 1.5
    elif guess == rollDice(rcnt+3):
        bank = bank

total_bank(bank):

中的循环中断开后

你可以通过如下修改主循环来修改 if bet==0 break

while rcnt < 4:
    rcnt = 0
    bank,bet = total_bank(bank)
    if bet==0 :
       break;
    guess = get_guess()
    if guess == rollDice(rcnt+1):
        bank += bet * 2
    elif guess == rollDice(rcnt+2):
        bank += bet * 1.5
    elif guess == rollDice(rcnt+3):
        bank = bank

编辑 - 不间断地进行。

在执行循环前检查是否 bet!=0。 只需将赌注初始化为零以外的任何值。

bet=1
while (rcnt < 4) and (bet!=0):
    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 * 1.5
    elif guess == rollDice(rcnt+3):
        bank = bank

to get your first line of needed output change your print statement to

print('You have ${} in your bank.'.format(bank))