Python 'while' с двумя условиями: "и" или "или" - PullRequest
0 голосов
/ 12 января 2019

Это очень простая программа броска костей, которая продолжает бросать два кубика, пока не получит двойные шестерки. Так что мое заявление while структурировано как:

while DieOne != 6 and DieTwo != 6:

По какой-то причине программа заканчивается, как только DieOne получает шестерку. DieTwo вообще не рассматривается.

Но если я заменю and на or в операторе while, программа функционирует отлично. Это не имеет смысла для меня.

import random
print('How many times before double 6s?')
num=0
DieOne = 0
DieTwo = 0

while DieOne != 6 or DieTwo != 6:
    num = num + 1
    DieOne = random.randint(1,6)
    DieTwo = random.randint(1,6)
    print(DieOne)
    print(DieTwo)
    print()
    if (DieOne == 6) and (DieTwo == 6):
        num = str(num)
        print('You got double 6s in ' + num + ' tries!')
        print()
        break

1 Ответ

0 голосов
/ 13 января 2019

TLDR внизу.

Прежде всего, пока циклы выполняются, если выполняется следующее условие, поэтому

DieOne != 6 or DieTwo != 6:

должен возвращать true при упрощении, чтобы функция while работала

Операторы и возвращают значение true, если оба условия выполнены, поэтому цикл while будет выполняться только тогда, когда он равен True и True .

So

while DieOne != 6 and DieTwo != 6:

не будет работать, если один из кубиков бросит 6, например:

Если DiceOne бросил 4, а DiceTwo бросил 6, цикл while не запустится, потому что DieOne! = 6 имеет значение true, а DieTwo! = 6 - false. Я положил этот ход мысли в код ниже.

while DieOne != 6 and DieTwo != 6:
while True and False:
while False: #So it won't run because it is false

Оператор или работает по-разному, оператор или возвращает true, когда one из условий выполняется, поэтому цикл while будет выполняться, когда он True или True , True или False или _False или True. Так

while DieOne != 6 or DieTwo != 6:

будет работать, если только одна из костей бросит шестерку. Например:

Если DiceOne бросил 4, а DiceTwo бросил 6, цикл while будет запущен, потому что DieOne! = 6 имеет значение true, а DieTwo! = 6 - false. Я поместил этот ход мыслей в код ниже.

while DieOne != 6 or DieTwo != 6:
while True or False:
while True: #So it will run because it is true

TLDR / Обзор:

while True: #Will run
while False: #Won't run

И

while True and True: #Will run
while True and False: #Won't run
while False and True: #Won't run
while False and False: #Won't run

Или:

while True or True: #Will run
while True or False: #Will run
while False or True: #Will run
while False or False: #Won't run
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...