@oyshomusic

Как сделать генерацию случайных номеров?

Помогите реализовать генерацию 10 случайных номеров (длинной от 9 до 9 символов), которые не повторяются между собой. Всё это должно быть на отдельной html странице.
Полностью идея звучит так: Нажимаю на кнопку "Сгенерировать номера", меня перебрасывает на страницу, на которой уже появился список из 10 номеров.

Все ответы которые находил, немного не соответствуют тому, что мне необходимо.
Буду благодарен за каждый полезный ответ.
  • Вопрос задан
  • 1482 просмотра
Решения вопроса 1
@dmshar
Или что-то вы не доопределили, или вопрос тривиальный ( если на считать загадочной фразы "10 случайных номеров (длинной от 9 до 9 символов)").

Генерируем число в диапазоне от 0 до 999999999
Проверяем его неповторность среди ранее сгененированных (которых не больше 10). Если он уникальный - заносим в список.

import random
num_list=[]
while len(num_list)<10:
    num=str(random.randint(0,999999999)).zfill(9)
    if not num in num_list:
        num_list.append(num)


Результат - список из десяти неповторяющихся строк (номеров???), например:
print (num_list)
['936581612', '321889578', '969427733', '735243872', '700272151', '018002065', '721644810', '501566972', '283087031', '614022666']


Далее - помещайте этот список на ту страницу, куда вас должно "перебрасывать".

Ежели все таки длина ваших "номеров" должна быть 1 до 9 символов, тогда zfill() убираем из кода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Snova_s_vami
@Snova_s_vami
JavaScript ES5-8, TypeScript, Angular
Создайте new map или лучше new set объект, добавляйте туда сгенерированный значения пока десять не наберётся. Перед добавлением проверяйте нет ли такого внутри, иначе заново генерировать. Это буквально цикл while set.size < 10.
Отдельная html это отдельная страница на сервере, сгенерировать в реальном времени из скрипта, несколько я знаю, не выйдет. Можете записать сгенерированные значения в куки, сессию или локалсторэдж, думаю куки подходящее и самое стабильное. После перехода на эту заранее подготовленную страницу, считываете свои знания и выводите их пользователю или если их нет, пишете что тут используются куки, пусть включают.
Насчёт самой генерации, просто рандомные элементы массива с символами или по кодам символов, в интернете много вариантов есть.
Ответ написан
Комментировать
@KIPPY
Я начинающий программист, не судите строго.
Данный вариант сохраняет всё в текстовый документ. Но думаю вы без труда адаптируете под свои нужды

import random


def generator(r):       # r = количество номеров на выходе
    for k in range(r):
        numbers = []   # Объявляем массив, в который будут закидываться генерируемые значения
        for i in range(9):      # range(Х), Х = количество требуемых цифр
            j = random.randint(0, 9)        # Собственно сам генератор
            numbers.append(j)       # Добавляем сгенерированное число в массив
        str_num = ''.join(map(str, numbers))        # Переводим полученный массив в строку
        with open('test.txt', 'a+') as f:       # Открываю файл(вместо "а+" нужно поставить "w")
            f.write(str(str(str_num) + '\n')     # Записываю в файл построчно


# Проверка на уникальность из текстового документа
def unicle():
    with open('test.txt', 'r') as f:        # Снова открываем, только уже в режиме чтения
        num = f.readlines()     # Считываем строки в массив
        num1 = 0
        i = 0       # счётчик
        s = len(num)        # Определяем, сколько в полученном массиве номеров
        while i < s:        # Ключевой цикл для проверки на уникальность
            n1 = num[num1]      # Выбираем объект из массива
            while num.count(n1) > 1:        # Проверка на наличие копий
                num.remove(n1)      # Если да - удаляем номер (новый не генерируется)
                i += 1      # Увеличиваем счётчик дополнительно при удалении, чтобы не возникло ошибок из-за уменьшения количества строк
            i += 1      # Основной счётчик +1
            num1 += 1       # Переход к следующему элементу из массива
        str_num = ''.join(map(str, num))        # Переводим массив в строку
    with open('test.txt', 'r+') as f:
        f.write(str(str_num))       # Перезаписываем результаты в этот же документ

ну и пишем, соответственно:
generator(10)
unicle() - хотя последнее можно добавить в генератор, чтоб красивее смотрелось
P.S. Можно вообще всё в одну функцию запихнуть
Да, да, я знаю, что в проверке на уникальность файл дважды открывается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы