Как вывести случайное пятизначное число, где сумма всех цифр четна и первая и последняя цифры равны, случайное трехзначное число раз?
Asked
Active
Viewed 1,314 times
1
-
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 Answers
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
- Сгенерировать первую и последнюю цифру
digit - Сгенерировать середину числа
mid - Если у середины нечётная сумма цифр, уменьшить её на 1
(первая и последняя цифры одинаковы, поэтому на чётность суммы не влияют) - Собрать всё в единое число
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
-
Вместо
sum_digits(mid)подошло бы более мутноеsum(map(ord, str(mid)))=) – Vladimir Gamalyan Dec 22 '17 at 17:58 -
@Семён, N=3 - количество цифр в центральной части (как и в соседнем ответе). – Qwertiy Dec 22 '17 at 19:02
-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 и задать цикл.