循环继续循环,即使在终止消息之后也是如此



我在让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倍添加到"银行">
  • 如果玩家猜测匹配第三卷,则将赌注金额添加到银行。-如果玩家的猜测与任何滚动都不匹配,那么从"银行"中减去赌注

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

  • 不使用BREAK或EXIT((

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):内部环路断开后

如果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

编辑-不间断地做。

检查是否下注=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

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

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

最新更新