Пока цикл не разрывается (питон) - PullRequest
0 голосов
/ 04 апреля 2019

Здесь на основании условий установлено значение коров . И если cows равно 4 , тогда цикл while должен прерваться. Но здесь break обрабатывается так, как будто его нет.

import random

r = random.randint
def get_num():
 return "{0}{1}{2}{3}".format(r(1, 9), r(1, 9), r(1, 9), r(1, 9))

n = get_num()
print(n)
n = [z for z in str(n)]

def game():
    cows = 0
    bulls = 0
    print()

    usr_num = [i for i in input("enter:\n")]
    usr_set = set(usr_num)

    while True:
        for x in usr_set:
            if usr_num.count(x) >= n.count(x):
                cows += n.count(x)
                bulls += usr_num.count(x) - n.count(x)
            elif usr_num.count(x) < n.count(x):
                cows += usr_num.count(x)
                bulls += n.count(x) - usr_num.count(x)

        print("cows: ", cows, "   bulls: ", bulls)

        if cows == 4:
            print("correct!")
            break
        else:
            game()

game()

Когда коровы = 4 , правильно напечатано, но перерыв не показывает своего эффекта

И если мы немного изменим код. Вместо коров , если мы поставим 4 (если утверждение)

def game():
    cows = 0
    bulls = 0
    print()

    usr_num = [i for i in input("enter:\n")]
    usr_set = set(usr_num)

    while True:
        for x in usr_set:
            if usr_num.count(x) >= n.count(x):
                cows += n.count(x)
                bulls += usr_num.count(x) - n.count(x)
            elif usr_num.count(x) < n.count(x):
                cows += usr_num.count(x)
                bulls += n.count(x) - usr_num.count(x)

        print("cows: ", cows, "   bulls: ", bulls)

        if 4 == 4:
            print("correct!")
            break
        else:
            game()

game()

Тогда перерыв работает.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Я только что попытался запустить ваш код, и здесь есть больше проблем с вашим скриптом, чем просто цикл while.

Но попробуйте этот небольшой скрипт, чтобы узнать, как работает цикл while:

# While loop test

i=0
j=5
while True:
    if i >= j:
        break
    else:
        print(f"{i} < {j}")
        i +=1

Надеюсь, это поможет.есть игра.

0 голосов
/ 04 апреля 2019

Вы повторяетесь каждый раз, когда делаете еще один раунд, что означает, что когда вы break, вы заканчиваете тем, что выходите из последней рекурсии.

Вместо использования хвостовой рекурсии попробуйте переместить while True:

def game():
    while True:
        cows = 0
        bulls = 0
        print()

        usr_num = [i for i in input("enter:\n")]
        usr_set = set(usr_num)

        for x in usr_set:
            if usr_num.count(x) >= n.count(x):
                cows += n.count(x)
                bulls += usr_num.count(x) - n.count(x)
            elif usr_num.count(x) < n.count(x):
                cows += usr_num.count(x)
                bulls += n.count(x) - usr_num.count(x)

        print("cows: ", cows, "   bulls: ", bulls)

        if cows == 4:
            print("correct!")
            break

Таким образом, мы не повторяем, поэтому наш перерыв работает так, как вы ожидаете: см. repl.it

...