【问题标题】:Loop continues looping, even after termination message循环继续循环,即使在终止消息之后
【发布时间】:2020-11-07 02:51:50
【问题描述】:

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

示例需要输出:

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()

【问题讨论】:

  • 添加一个 if 语句,如果它发现数字为零,它将打破它。

标签: python input printing python-3.8


【解决方案1】:

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

【讨论】:

  • 有什么方法可以在不使用 break 或 exit() 的情况下做到这一点?
  • 这个编辑效果好多了,我终于可以让它正确打印了。十分感谢你的帮助!在过去的 3 周里,这个项目让我发疯了。
【解决方案2】:

你要返回

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 初始化为除零以外的任何值。

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

【讨论】:

  • 但是有没有办法在没有 break 或 exit() 语句的情况下做到这一点?我需要能够在没有这些语句的情况下做到这一点,否则我会使用 break 来开始。
  • 我添加了一个方法
  • 很抱歉这么多麻烦,但它仍然无法正常工作。它继续打印“在 2 到 12 之间选择一个数字”输入。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2020-08-19
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多