Как создать список с 3-значными числами, первая цифра вторая цифра = третья цифра

#python #list #generator

#python #Список #генератор

Вопрос:

Я новичок в Python и пытался решить эту проблему. Я хочу создать список 3-значных чисел, в которых first digit second digit = third digit и если сумма первых двух цифр больше 9, я хочу, чтобы третья цифра этого числа была второй цифрой суммы. например. 583, где 5 8 = 13, поэтому последняя цифра будет 3. Я хочу иметь 50 3-значных чисел, подобных этому, это то, что у меня есть до сих пор.

 import random as rd

N=50

ar1 = [rd.randint(100, 999) for i in range(N)]
  

Комментарии:

1. Судя по ответам, я не думаю, что вы очень четко сформулировали вопрос. Это помогло бы, если бы вы показали результат, на который надеетесь.

2. Существует только 45 значений, где у abc вас есть a!=0 и a b=c

Ответ №1:

Внимание

У вас есть только 45 разных 3-значных чисел abc a!=0 и a b=c .

Следующее решение использует ограничение, которое пытается избежать бесконечного цикла на случай, если вы задаете слишком много


Чтобы сгенерировать одно число, соответствующее вашему правилу, вам нужно сгенерировать 2 цифры, затем проверить, меньше ли их сумма 10 (чтобы быть одной цифрой)

 a, b = randrange(1, 10), randrange(10)
if a   b < 10:
    # you have the tuple (a, b, a   b)
  

Затем используйте цикл, пока не достигнете своего предела

 def generate(N=50, tries=1000):
    result = set()
    while len(result) != N and tries > 0:
        tries -= 1
        a, b = randrange(1, 10), randrange(10)
        if a   b < 10:
            result.add(int("".join(map(str, (a, b, a   b)))))
    return result
  

Вы получите список

 {257, 516, 134, 268, 909, 527, 145, 404, 279, 538, 156, 415, 549, 167, 808, 426, 303, 
 178, 819, 437, 314, 189, 448, 707, 325, 202, 459, 718, 336, 213, 729, 347, 606, 224, 
 101, 358, 617, 235, 112, 369, 628, 246, 505, 123, 639}
  

Комментарии:

1. ваше объяснение было очень полезным, но я хочу, чтобы результат был в виде чисел, а не в виде наборов

2. @ddnn5 прочитайте еще раз вверху, там всего 45 разных значений

3. @ddnn5 Sidenote: это кортежи, а не наборы. Наборы неупорядочены.

4. Я думаю, что я плохо объясняю. результат, который вы получили, — это то, что я искал. Я просто хочу, чтобы они выводились как 3-значные числа в списке

5. @ddnn5 вот что у вас есть, у вас есть не список, а не набор, это то же самое, или просто сделайте return list(result) в методе