CDoc
CDoc

Reputation: 397

Repeat loop step until a condition is met

Trying to repeat a loop step until my function returns True for that name, in Python. The following code is what I have so far.

import random

names = [
    "John",
    "Mike",
    "Jimmy",
    "Curt",
    "Ted",
    "Bob",
    "Dean"
]

def randomAnswer():
    return bool(random.getrandbits(1))

for name in names:
    print("Name {} returned {}".format(name, randomAnswer()))

The script above returns an output similar to this one.

Name John returned True
Name Mike returned True
Name Jimmy returned False
Name Curt returned True
Name Ted returned False
Name Bob returned False
Name Dean returned False

The desired output is something like this.

Name John returned True
Name Mike returned True
Name Jimmy returned False
Name Jimmy returned False
Name Jimmy returned False
Name Jimmy returned True
Name Curt returned True
Name Ted returned False
Name Ted returned True
Name Bob returned False
Name Bob returned True
Name Dean returned False
Name Dean returned False
Name Dean returned True

Upvotes: 0

Views: 782

Answers (3)

Carlos Melus
Carlos Melus

Reputation: 1552

I believe the simplest way around could be checking the actual condition you want to check (the random answer):

import random

def randomAnswer():
    return bool(random.getrandbits(1))

names = [
    "John",
    "Mike",
    "Jimmy",
    "Curt",
    "Ted",
    "Bob",
    "Dean"
]

for name in names:
    answer = randomAnswer()
    while not answer:
        print(f"Name {name} returned {answer}")
        answer = randomAnswer()
    print(f"Name {name} returned {answer}")

The output from the code above is:

Name John returned False
Name John returned False
Name John returned True
Name Mike returned True
Name Jimmy returned True
Name Curt returned True
Name Ted returned False
Name Ted returned False
Name Ted returned True
Name Bob returned True
Name Dean returned True

Upvotes: 1

Dzemo997
Dzemo997

Reputation: 336

Use while loop with counter and increment that counter only if condition is true. Something similar to this:

import random

names = [
    "John",
    "Mike",
    "Jimmy",
    "Curt",
    "Ted",
    "Bob",
    "Dean"
]

def randomAnswer():
    return bool(random.getrandbits(1))

i = 0

while i < len(names):
    answer = randomAnswer()
    print("Name {} returned {}".format(names[i], answer))

    if answer:
        i += 1

Upvotes: 2

Eladtopaz
Eladtopaz

Reputation: 1054

You could add an if statement to check if randomAnswer returned True or False:

import random

names = [
    "John",
    "Mike",
    "Jimmy",
    "Curt",
    "Ted",
    "Bob",
    "Dean"
]

def randomAnswer():
    return bool(random.getrandbits(1))

for name in names:
    result = randomAnswer()
    if result:
        print("Name {} returned {}".format(name, result))
        continue
    else:
        print("Name {} returned {}".format(name, result))
        while not result:
            result = randomAnswer()
            print("Name {} returned {}".format(name, result))

Upvotes: 1

Related Questions