Python, функция иногда выдает none
Решил попытаться написать игру Коровы и Быки на Питоне. Написал первую функцию которая должна рандомить массив из трех чисел. Проверяя функцию заметил что иногда функция выдаёт "none". Понятия не имею с чем это может быть связано.
P.S. Изначально код был меньше, было if secretNum[0] == ([secretNum[1] or secretNum[2]) и еще одна подобная строка для проверки второго элемента массива. Поменял, думая что это поможет решить проблему, не помогло)
Вот код
#Импорт нужных модулей
import random
#Функция присваивания секретного числа
def setNum():
secretNum = []
secretNumSet = random.randint(100,999)
#Цикл разделяющий число int на массив
for i in str(secretNumSet):
secretNum.append(i)
#Проверка числа на одиннаковые цифры. Т.е. не равна ли первая цифра второй и т.д. Нужно для правильного числа по правилам игры
if secretNum[0] == secretNum[1]:
setNum()
elif secretNum[0] == secretNum[2]:
setNum()
elif secretNum[1] == secretNum[0]:
setNum()
elif secretNum[1] == secretNum[2]:
setNum()
else:
return secretNum #Если всё нормально, функция возвращает массив secretNum
#Присваивание массива secretNum через функцию setNum()
secretNum = setNum()
print(secretNum)#Удалить, написал для проверки правильности кода
Ответы (2 шт):
if secretNum[0] == secretNum[1]:
return setNum()
elif secretNum[0] == secretNum[2]:
return setNum()
elif secretNum[1] == secretNum[0]:
return setNum()
elif secretNum[1] == secretNum[2]:
return setNum()
else:
return secretNum
Либо:
if secretNum[0] == secretNum[1]:
secretNum = setNum()
elif secretNum[0] == secretNum[2]:
secretNum = setNum()
elif secretNum[1] == secretNum[0]:
secretNum = setNum()
elif secretNum[1] == secretNum[2]:
secretNum = setNum()
return secretNum
Более правильный код:
import random
def setNum():
num = list(str(random.randint(100, 999)))
if len(num) != len(set(num)):
return setNum()
return num
Я так понял, что вы хотели использовать рекурсию, тогда нужно setNum() внутри каждого (el)if заменить на return setNum().
#Функция присваивания секретного числа
def setNum():
secretNum = []
secretNumSet = random.randint(100,999)
#Цикл разделяющий число int на массив
for i in str(secretNumSet):
secretNum.append(i)
#Проверка числа на одиннаковые цифры. Т.е. не равна ли первая цифра второй и т.д. Нужно для правильного числа по правилам игры
if secretNum[0] == secretNum[1]:
return setNum()
elif secretNum[0] == secretNum[2]:
return setNum()
elif secretNum[1] == secretNum[0]:
return setNum()
elif secretNum[1] == secretNum[2]:
return setNum()
else:
return secretNum #Если всё нормально, функция возвращает массив secretNum
Однако, лучше использовать такой код, если целью является именно рекурсивная функция:
def setNum():
secretNumSet = random.randint(100, 999)
secretNum = [i for i in str(secretNumSet)] # число int на массив
if len(set(secretNum)) == len(secretNum):
return secretNum
return setNum()
Или такой код, если рекурсивная функция целью не является:
def setNum():
while True:
secretNumSet = random.randint(100, 999)
secretNum = [i for i in str(secretNumSet)] # число int на массив
if len(set(secretNum)) == len(secretNum):
break
return secretNum