Языки программирования

Генератор случайных чисел на Python

В этой статье мы напишем программу «Угадай число», которая будет работать на основе генератора чисел. Если вы новичок в Python, тогда советуем сначала изучить статью «Циклы в Python» и потом возвращаться к этой статье.

Модуль random предоставляет функции для генерации случайных чисел, букв, случайного выбора элементов последовательности. Рассмотрим функции модуля:

random.seed([X], version=2) — инициализация генератора случайных чисел. Если X не указан, используется системное время.

random.getstate() — внутреннее состояние генератора.

random.setstate(state) — восстанавливает внутреннее состояние генератора. Параметр state должен быть получен функцией getstate().

random.getrandbits(N) — возвращает N случайных бит.

random.randrange(start, stop, step) — возвращает случайно выбранное число из последовательности.

random.randint(A, B) — случайное целое число N, A ≤ N ≤ B.

random.choice(sequence) — случайный элемент непустой последовательности.

random.shuffle(sequence, [rand]) — перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

random.sample(population, k) — список длиной k из последовательности population.

random.random() — случайное число от 0 до 1.

random.uniform(A, B) — случайное число с плавающей точкой, A ≤ N ≤ B (или B ≤ N ≤ A).

random.triangular(low, high, mode) — случайное число с плавающей точкой, low ≤ N ≤ high. Mode — распределение.

random.betavariate(alpha, beta) — бета-распределение. alpha>0, beta>0. Возвращает от 0 до 1.

random.expovariate(lambd) — экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.

random.gammavariate(alpha, beta) — гамма-распределение. Условия на параметры alpha>0 и beta>0.

random.gauss(значение, стандартное отклонение) — распределение Гаусса.

random.lognormvariate(mu, sigma) — логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma. mu может иметь любое значение, и sigma должна быть больше нуля.

random.normalvariate(mu, sigma) — нормальное распределение. mu — среднее значение, sigma — стандартное отклонение.

random.vonmisesvariate(mu, kappa) — mu — средний угол, выраженный в радианах от 0 до 2π, и kappa — параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.

random.paretovariate(alpha) — распределение Парето.

random.weibullvariate(alpha, beta) — распределение Вейбулла.

В нашей программе мы будем использовать функцию randint(). Полный листинг программы:
import random

print("*" * 10, "Угадай число", "*" * 10)

print("Компьютер будет загадывать число от 1 до 100. Попробуйте угадать число. Для выхода введите 0")

answer = 1
score = 0
i = 0

while answer:
    if answer == 0:
        break

    rand = random.randint(1, 100)
    answer = int(input("Число загадано. Попробуйте отгадать: "))
    if answer == rand:
        score = score + 1
        print("Красавчик!")
    else:
        print("Неудачник! Пробуй еще...")
    i = i + 1
print("Всего ты отгадал чисел ", score, "из", i)
print("Приходи когда поумнеешь!")

input("Нажмите Enter для выхода")
Наша программа в цикле while проверяет введенное пользователем значение. Если оно совпадает со сгенерированным в начале итерации случайным значением, значит, выводится соответствующее сообщение и увеличивается значение переменной score.

Параллельно мы ведём счетчик итераций, чтобы знать, сколько попыток совершил пользователь (переменная i). также наша программа выводит статистику по окончанию игры.

rand = random.randint(1, 100) — используем функцию randint и задаем диапазон загадываемых чисел от 1 до 100. Диапазон можно изменить.

Нижеуказанная инструкция выполняет большую роль в нашей программе:
if answer == 0:
    break
Если пользователь введет 0, выполнение будет прервано.

В нашей программе есть небольшой недочет. При чтении данных мы не производим проверку их корректности.

Если пользователь введет строку вместо числа, то выполнение программы будет остановлено, а на консоли будет изображено сообщение об ошибке. Для обработки таких исключений используются блоки try..except.

Вы можете улучшить нашу программу и добавить исключения самостоятельно. В комментариях ждём ваших предложений по поводу улучшений данного кода.

Видео по разработке программы:
Самоучитель по Python