Если обе переменные равны нужно остановить программу и вывести результат

Не работает оператор break, пишет none, а потом краш. Как исправить код, чтобы при получении двух одинаковых значений он останавливался.

import random


def lucky():
    x = random.randrange(1, 65)
    y = random.randrange(1, 65)
    print(x, y)
    equal(x, y)


def equal(x, y):
    while x != y:
        print(lucky())
        if x == y:
            break
        print(x, y)


lucky()

Ответы (1 шт):

Автор решения: CrazyElf

Например, так:

import random

def lucky():
    x = random.randrange(1, 65)
    y = random.randrange(1, 65)
    print(x, y)
    return x, y

def equal():
    while True:
        x, y = lucky()
        if x == y:
            break

equal()

Пример вывода:

21 10
52 10
30 34
8 23
23 26
7 16
42 14
19 39
48 32
19 53
60 64
44 41
9 49
46 47
43 6
1 60
41 31
31 4
22 60
27 54
52 30
28 50
48 25
43 16
28 20
64 13
15 50
18 16
8 64
19 51
21 2
35 38
34 35
53 62
53 52
10 10

Вкратце про ошибки и т.д.:

  • не нужно несколько раз печатать одно и то же, печатайте x и y где-то в одном месте
  • для того, чтобы проверять результат работы одной функции в другой функции, нужно возвращать из той результат и присваивать его куда-то
  • используйте "бесконечный" цикл while с условием и break внутри цикла - это удобно
  • если функция ничего не возвращает, то на самом деле она возвращает None, который вы и печатали
  • старайтесь не использовать рекурсию (циклический вызов функции самой из себя сразу или по цепочке управления), тщательно не продумав архитектуру кода, в рекурсии очень легко запутаться и сделать её бесконечной, что у вас и произошло
→ Ссылка