Как мне использовать два логических значения в цикле while, например, когда A и B имеют значение true

#python

#python

Вопрос:

Я начинающий программист, и я пытаюсь создать игру в кости для 2 игроков. Я изначально установил значение для player_a и player_b равным false . Но когда я пытаюсь объединить их вместе в цикле while в одной строке, код, похоже, не работает. Вот код, мне все еще нужно поработать над парой вещей, так что…

 import random
import time

player_a = input("Player1, please type your name:")
time.sleep(1)
player_b = input("Player2, please type your name:")
time.sleep(1)
print("Welcome to Dice Roller", player_a, "and", player_b)

score_a = 0
score_b = 0
roll_a = False
roll_b = False

while roll_a and roll_b is False:      #what is the problem with this line because without this, i'm 
                                     not ablee to reset the turn and the end 
                                   
ans_a = input("Type roll to roll the dice:")
    if ans_a == "roll":
        roll_a = (random.randint(1, 6))
        time.sleep(1)
        print(player_a, "has rolled", roll_a)
    else:
        print("Please check your spelling")
    time.sleep(1)
    ans_b = input("Your turn to roll, type roll to roll the dice:")
    if ans_b == "roll":
        roll_b = (random.randint(1, 6))
        time.sleep(1)
        print(player_b, "has rolled", roll_b)
    if roll_a == roll_b:
        time.sleep(2)
        print("Tie")
    if roll_a > roll_b:
        score_a = roll_a - roll_b
        print(player_a, "has scored", score_a, "points")
    if roll_b > roll_a:
        score_b = roll_b - roll_a
        print(player_b, "has scored", score_b, "points")
        break
    roll_a = False
    roll_b = False 




    
  

Комментарии:

1. Вам нужно переписать условие для цикла while: while not all(roll_a, roll_b): или, альтернативно, это также можно сделать как while not roll_a and not roll_b: , но первая версия более чистая.

2. @pavel Эти два логически не эквивалентны.

3. @kaya3, да, спасибо…. Да, первая версия не будет работать.

Ответ №1:

Вы написали:

 while roll_a and roll_b is False:
  

это то же самое, что и все следующие:

 while (roll_a is True) and (roll_b is False):
while roll_a is True and roll_b is False:
while (roll_a) and (not roll_b):
while roll_a and not roll_b:
  

Вы хотите написать любое из следующих (все они эквивалентны):

 while (roll_a is False) and (roll_b is False):
while roll_a is False and roll_b is False:
while (not roll_a) and (not roll_b):
while not roll_a and not roll_b:
  

Комментарии:

1. О, верно, я не знаю, почему я не потрудился записать это так, ха-ха. В любом случае спасибо за помощь…

Ответ №2:

Используйте следующее

 while roll_a is False and roll_b is False:
  

Ответ №3:

Ваш while loop кажется нормальным, но проблемы возникают в roll_a roll_b переменных и. Вы инициализировали эти две переменные, для False которых boolean тип, но позже вы присваиваете этим переменным номера внутри while цикла !! . Вы могли бы хранить оценки из входящих score_a и score_b переменных.

Если концепция заключается в том, что игра будет продолжаться до тех пор, пока кто-нибудь не выиграет, см. Приведенный Ниже код.

 import random
import time

player_a = input("Player1, please type your name:")
time.sleep(1)
player_b = input("Player2, please type your name:")
time.sleep(1)
print("Welcome to Dice Roller", player_a, "and", player_b)

score_a = 0
score_b = 0
roll_a = False
roll_b = False

while roll_a is False and roll_b is False:

    ans_a = input("{}, type roll to roll the dice:".format(player_a))
    if ans_a == "roll":
        score_a = (random.randint(1, 6))
        time.sleep(1)
        print(player_a, "has rolled", score_a)
    else:
        print("Please check your spelling")
    time.sleep(1)
    ans_b = input("{}, your turn to roll, type roll to roll the dice:".format(player_b))
    if ans_b == "roll":
        score_b = (random.randint(1, 6))
        time.sleep(1)
        print(player_b, "has rolled", score_b)
    if score_a == score_b:
        time.sleep(2)
        print("Tie!!..")
    if score_a > score_b:
        score_a = score_a - score_b
        print(player_a, "has won with ", score_a, "points")
        roll_a = True
    if score_b > score_a:
        score_b = score_b - score_a
        print(player_b, "has won with ", score_b, "points")
        roll_b = True
  

Ответ №4:

Я не знаю, почему никто не дал этот простой ответ:

while roll_a and roll_b is False: просто заключите условия в, () чтобы сделать их одним объектом, подобным этому:

while (roll_a and roll_b) is False:

или еще лучше

while not (roll_a and roll_b):