代码之家  ›  专栏  ›  技术社区  ›  maxhub

而循环不会在应该的时候断开

  •  0
  • maxhub  · 技术社区  · 3 年前
    def NewCard():
      draw_card = input("Would you like to draw a new card? 'hit' or 'pass': ").lower()
      if draw_card == "hit":
        new_card =  cards[random.randint(0, cards_length)]
        player_cards.append(new_card)
        print(f"Your new hand is {player_cards}")
      elif draw_card == "pass":
         playerturn = False
         return playerturn 
    
    while playerturn == True:
      Check_Scores()
      NewCard()
    ComputerPlays()
    

    应该发生的是,当用户键入“pass”时,while循环将中断,继续执行下一个代码。但实际情况是,循环会永远重复。整个块在另一个更大的函数中,这就是它缩进的原因

    4 回复  |  直到 3 年前
        1
  •  0
  •   SmartOinker    3 年前
    playerturn = True
    
    def NewCard():
      global playerturn
      draw_card = input("Would you like to draw a new card? 'hit' or 'pass': ").lower()
      if draw_card == "hit":
        new_card =  cards[random.randint(0, cards_length)]
        player_cards.append(new_card)
        print(f"Your new hand is {player_cards}")
      elif draw_card == "pass":
         playerturn = False
         return playerturn 
    
    while playerturn == True:
      Check_Scores()
      NewCard()
    ComputerPlays()
    

    您需要添加一个 global playerturn 在你的内心 NewCard() 函数使代码正常工作。这是因为 playerturn = False 排队 纽卡 函数实际上创建了一个局部变量 playerturn 并将其设置为 False 在功能范围内,并且不会影响 playerturn 外面 纽卡 作用有关python作用域的更多信息,请阅读本文 article .

        2
  •  0
  •   QWERTYL    3 年前

    这个 playerturn 变量 NewCard 函数是局部的,而不是全局的。试试这个:

    while playerturn == True:
      Check_Scores()
      playerturn = NewCard()
    
        3
  •  0
  •   maxhub    3 年前
    def NewCard():
      draw_card = input("Would you like to draw a new card? 'hit' or 'pass': ").lower()
      if draw_card == "hit":
        new_card =  cards[random.randint(0, cards_length)]
        player_cards.append(new_card)
        print(f"Your new hand is {player_cards}")
      elif draw_card == "pass":
         global playerturn
         playerturn = False
     
    
    while playerturn == True:
      Check_Scores()
      NewCard()
    ComputerPlays()
    

    将playerturn设置为全局解决了我的问题

        4
  •  0
  •   khandelwal.pranshu    3 年前

    这里是变量 playerturn 作用 NewCard() 是函数本身的局部。使用全局变量playerturn或修改循环,如下所示

    while playerturn==True:
        Check_Scores()
        playerturn=NewCard()