Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
This is a very simple dice roll program that keeps rolling two dice until it gets double sixes. So my while statement is structured as:
while DieOne != 6 and DieTwo != 6:
For some reason, the program ends as soon as DieOne
gets a six. DieTwo
is not considered at all.
But if I change the and
to an or
in the while statement, the program functions perfectly. This doesn't make sense to me.
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
–
–
–
TLDR at bottom.
First off, while loops run if the following condition is true, so
DieOne != 6 or DieTwo != 6:
must return true when simplified, for the while funtion to run
The and operator returns true if both conditions are true, so the while loop will only run when it is True and True.
So the following won't run if either of the dice rolled a 6 for example:
while DieOne != 6 and DieTwo != 6:
If DieOne rolled a 4 and DieTwo rolled a 6, the while loop won't run because DieOne != 6 is true, and DieTwo != 6 is false. I put this train of thought into code below.
while DieOne != 6 and DieTwo != 6:
while True and False:
while False: #So it won't run because it is false
The or operator works differently, the or operator returns true when one of the conditions is true, so the while loop will run when it is True or True, True or False, or _False or True.
while DieOne != 6 or DieTwo != 6:
will run if only either dice rolled a six. For example:
If DieOne rolled a 4 and DieTwo rolled a 6, the while loop will run because DieOne != 6 is true, and DieTwo != 6 is false. I put this train of thought into code below.
while DieOne != 6 or DieTwo != 6:
while True or False:
while True: #So it will run because it is true
TLDR/Review:
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
–
if (DieOne == 6) and (DieTwo == 6):
num = str(num)
print('You got double 6s in ' + num + ' tries!')
print()
break
–
Hmm. Boil it down to a single condition, both_6:bool
, based on multiple conditions:
import random
num = 0
both_6 = False
while not both_6:
num += 1
DieOne = random.randint(1,6)
DieTwo = random.randint(1,6)
if (DieOne==6) and (DieTwo==6):
both_6 = True
print(f"\nIt took you {num} attempts to get double sixes!\n")
It took you 25 attempts to get double sixes!
It feels like multiple conditions is broken
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.