Loop Loop Odd Bug Python

时间:2017-09-17 15:06:36

标签: python while-loop

我是一个尝试学习Python的菜鸟。我做了一个功能,允许用户从列表中删除项目,一次选择1个,然后从列表中删除它(基本上,选择骰子重新注册我的Yahtzee游戏)。因此,我希望用户能够从列表中删除1个或更多项目,并且当用户在第22行决定他们不想再重新掷骰子时,使用while循环退出。该功能似乎工作正常,除非用户选择1个骰子重新注册(比如6),然后选择' y'重新滚动另一个,然后选择另一个骰子,然后选择 n ,这会导致while循环错误地在第21行和第25行之间循环并返回到21(要求用户输入 n 两次,而不是一次退出循环。我在Repl.it上的代码是here

同样,如果你选择至少2个骰子去除,问题似乎只会发生。

dice1 = [1,2,3,4,5,6]

def sub_dice():
  while True:
    try:
      print 'line 6'
      subtract1 = int(raw_input('What dice do you want to reroll?'))
    except ValueError:
      print('Enter a number corresponding to the dice you want to reroll')
      continue
    if subtract1 not in dice1:
      print('You must select 1 of the dice from the table to remove')
    else:
      break

  if subtract1 in dice1:
    dice1.remove(subtract1)
    print "The remaining dice are " + str(dice1)

  while True:
    print 'line 21'
    more = raw_input("Do you want to reroll another dice, 'Y' or 'N?'")

    if more.lower() == 'n':
      print 'line 25'
      print "On that turn, you kept " + str(dice1)
      return len(dice1)
      break

    elif (more.lower() != 'y') and (more.lower() != 'n'):
      print('You must select Y or N')
      print 'line 32'

    elif more.lower() == 'y':
      print 'line 35'
      sub_dice()

sub_dice()

*您可以通过输入6来查看问题,例如输入6,然后输入y,然后输入5,然后输入' n',此时您将看到它循环回到第21行并再次询问您是否需要即使你已经表明没有,也要重新掷骰子。

1 个答案:

答案 0 :(得分:1)

行为的原因是您从内部调用sub_dice()。阅读递归函数,因为我不确定你是否打算这样做。

当您输入' n'您正在退出嵌套的sub_dice()调用,因此它只返回原始调用,而不是像您期望的那样退出程序。