Не выдает четырехзначное число без одинаковых цифр

a = int(random.uniform(1, 9))
b = int(random.uniform(0, 9))
c = int(random.uniform(0, 9))
d = int(random.uniform(0, 9))

while nig < 10:
    `while b == a:
        b = int(random.uniform(0, 9))

    while c == a and c == b:
        c = int(random.uniform(0, 9))

    while d == a and d == c and d == b:
        d = int(random.uniform(0, 9))`





    number_sof_comp = str(a) + str(b) + str(c) + str(d)
    print(number_sof_comp)
    nig = nig+1

Эта программа должна выдавать число без повторяющихся цифр, например 3456, 9748 пример как не должно быть 3445, 7897. Она выдает просто случайное число.


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

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

создание переменных надо занести в цикл. Также в while and надо поменять на or. И место uniform лучше использовать randrange

import random


nig = 0

while nig < 10:
    a = random.randrange(1, 10)
    b = random.randrange(10)
    c = random.randrange(10)
    d = random.randrange(10)
    
    while b == a:
        b = random.randrange(10)

    while c == a or c == b:
        c = random.randrange(10)
        
    while d == a or d == c or d == b:
        d = random.randrange(10)
    
    number_sof_comp = str(a) + str(b) + str(c) + str(d)
    print(number_sof_comp)
    nig = nig+1
→ Ссылка
Автор решения: n1tr0xs

Еще можно использовать itertools.permutations:

from itertools import permutations

numbers = []
digits = 4

for tup in permutations(map(str, range(10)), 4):
    if tup[0] == '0':
        continue
    print(tup)
    numbers.append(int(''.join(tup)))
→ Ссылка