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

时间:2020-11-07 02:51:50

标签: python input printing python-3.8

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

NEEDED输出示例:

you have $500 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的“银行”(变量)。

  • 询问玩家下注
  • 必须为0(零)或更大,并且不能超过银行中当前的金额。

滚动2个骰子

  • 如果玩家猜测与第一轮相符,则将下注金额加倍至“庄家”
  • 如果玩家猜猜与第二轮相匹配,则将下注金额的1.5倍添加到“庄家”。
  • 如果玩家猜测与第3轮相匹配,则将下注金额添加到银行。 -如果玩家猜测与任何掷骰不符,则从“庄家”中减去下注。

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

  • 不使用BREAK或EXIT()

3 个答案:

答案 0 :(得分:3)

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!')
    

答案 1 :(得分: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

total_bank(bank):内部循环中断后

您可以通过如下修改修改bet == 0时中断的主循环

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

答案 2 :(得分:0)

要获得所需输出的第一行,请将打印语句更改为

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