1

Как вывести случайное пятизначное число, где сумма всех цифр четна и первая и последняя цифры равны, случайное трехзначное число раз?

Qwertiy
  • 123,725
  • 2
    Что у вас не получается? – Кирилл Малышев Dec 22 '17 at 15:16
  • Конкретно вывести случайное число случайное кол-во раз – Семён Dec 22 '17 at 15:16
  • 2
    Можно поконкретнее? Вы не знаете, как сгенерировать случайное число? Не понимаете как получить число, удовлетворяющее критериям? Не умеете выводить числа и пользоваться циклом? Может быть, какие-то идеи уже есть? – Кирилл Малышев Dec 22 '17 at 15:18
  • Знаю как сгенерировать, но как сгенерировать определенное кол-во или же рандомное не понимаю как – Семён Dec 22 '17 at 15:19
  • Используйте цикл, как было сказано выше – Владимир Мартьянов Dec 22 '17 at 15:20
  • Перебирайте в цикле случайные числа отбирая подходящие, пока не наберется нужное кол-во. Можно и более интеллектуально подойти, например последнюю цифру устанавливать в первую, в предпоследнюю выбирать из четных или нечетных, в зависимости от четности остальных цифр. – Vladimir Gamalyan Dec 22 '17 at 15:20
  • Сумма чего должна быть чётной? // https://ru.stackoverflow.com/a/453060/178988 – Qwertiy Dec 22 '17 at 16:15
  • @Qwertiy цифр наверное, апичатался просто. – Vladimir Gamalyan Dec 22 '17 at 16:55
  • @ВладимирМартьянов, можно и без цикла :) Хотя, не совсем, потому что сумму цифр всё равно циклом считать. – Qwertiy Dec 22 '17 at 17:08
  • Да, сумма цифр) – Семён Dec 22 '17 at 17:42

4 Answers4

1

Можно сгенерировать все допустимые 5-значные числа и выбрать одно случайно:

import random

def valid(n):
    digits = list(map(int, str(n)))
    return digits[0] == digits[-1] and sum(digits) % 2 == 0

ndigits = 5
valid_numbers = list(filter(valid, range(10**(ndigits - 1), 10**ndigits)))
n = random.choice(valid_numbers)

Затем вывести его случайное трехзначное число раз:

for _ in range(random.randrange(100, 1000)):
    print(n)

Входной диапазон чисел маленький, поэтому какие-либо оптимизации здесь излишни.

jfs
  • 52,361
  • Никто и не заметил, что нужно выводить одно и то же число трехзначное кол-во раз =) Плюс. – Vladimir Gamalyan Dec 23 '17 at 14:28
0
  1. Сгенерировать первую и последнюю цифру digit
  2. Сгенерировать середину числа mid
  3. Если у середины нечётная сумма цифр, уменьшить её на 1
    (первая и последняя цифры одинаковы, поэтому на чётность суммы не влияют)
  4. Собрать всё в единое число

https://ideone.com/hvvZWg

import random

def sum_digits(x):
  res = 0

  while x:
    res += x % 10
    x //= 10

  return res

def gen_smth(N):
  digit = random.randint(1, 9)
  mid = random.randint(0, 10**N - 1)
  if sum_digits(mid) % 2: mid -= 1
  return (digit * 10**N + mid) * 10 + digit

for _ in range(100):
  print(gen_smth(3))
Qwertiy
  • 123,725
-1

медленный, но более понятный способ

import random

res = []
rnd = lambda d=5: random.randint(10**(d-1), 10**d-1)  # случайное пятизначное число
max_l = random.randint(100, 999)  # случайное трехзначное число раз

while len(res) < max_l:
    r5 = rnd(5)
    str_r = tuple(map(int, str(r5)))
    if (not sum(str_r) % 2) and (str_r[0] == str_r[-1]):  # где сумма всех чисел четна и первая и последняя цифры равны
        res.append(r5)
print(len(res), res[0])  # 859 58955
vadim vaduxa
  • 8,897
-1

Надо сгенерировать случайное число из диапазона 10000-99999. Потом сгенерировать другое число из диапазона 100-999 и задать цикл.