openlang

Почему этот рандомизатор так часто показывает B?

Рандомизатор в этой программе постоянно выдаёт длинные серии B. Можно ли как-то сделать результаты более разнообразными?


import random
import pyglet
#opens window
screen = pyglet.window.Window(fullscreen=True)
caption = pyglet.text.Label('press A',
                          font_name='Times New Roman',
                          font_size=72,
                          x=screen.width//2, y=screen.height//2,
                          anchor_x='center', anchor_y='center')
alternate= pyglet.text.Label('press B',
                          font_name='Times New Roman',
                          font_size=72,
                          x=screen.width//2, y=screen.height//2,
                          anchor_x='center', anchor_y='center')
def refresh(elapsed):
    pick=random.SystemRandom().randint(1,2)
    if pick==1:
        screen.clear()
        caption.draw()
    else:
        screen.clear()
        alternate.draw()
pyglet.clock.schedule_interval(refresh,pick)
pyglet.app.run()
Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    При меньшем интервале я вижу больше разнообразия, например с 0.2

    
    pyglet.clock.schedule_interval(refresh, 0.2)

    поскольку каждая надпись показывается меньше времени.

    С pick в schedule_interval() есть проблема: возникает NameError: name 'pick' is not defined, поскольку pick является локальной переменной внутри refresh() и за пределами функции недоступна.

    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    Этот пример не запустится, поскольку переменная pick отсутствует в области видимости, где вызывается pyglet.clock.schedule_interval

    Ваше намерение не вполне понятно. Интервал действительно должен меняться от одного запуска программы к другому? Постоянный интервал кажется разумнее.

    Может помочь небольшая перестройка кода.

    Поведение во время выполнения немного странное, хотя это может быть особенностью pyglet или моим недостаточным пониманием. В любом случае этот вариант показывает то "Press A", то "Press B" с псевдослучайной частотой.

    
    from random import SystemRandom
    from pyglet import window, text, clock, app
    
    # pylint: disable=possibly-used-before-assignment,unused-argument
    
    # note use of variable names in uppercase denoting global scope
    
    TICK_SECONDS = 3.
    
    def refresh(elapsed: float) -> None:
        SCREEN.clear()
        RNG.choice(CAPTIONS).draw()
    
    if __name__ == "__main__":
        SCREEN = window.Window(fullscreen=True)
        label_options = {  # these parameters are common to both captions
            "font_name": "Times New Roman",
            "font_size": 72,
            "x": SCREEN.width // 2,
            "y": SCREEN.height // 2,
            "anchor_x": "center",
            "anchor_y": "center",
        }
        # create a tuple of the 2 captions
        CAPTIONS = text.Label("Press A", **label_options), text.Label("Press B", **label_options)
        RNG = SystemRandom()  # only do this once
        clock.schedule_interval(refresh, TICK_SECONDS)
        app.run()
    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Как в Java Mail показывать текстовое имя отправителя вместо его настоящего адреса электронной почты

    Я отправляю сообщения через Java Mail API. После доставки во входящих отображается адрес отправителя. Хочу показывать вместо…

    Ответы 2Последняя активность java
  2. Доступ к Dynamics CRM из TypeScript

    Мой код CRM выполняется в веб-ресурсе, поэтому для получения данных сущности приходится писать чтобы обратиться к этим данным…

    Ответы 2Последняя активность typescript
  3. Какой формат даты нужен заголовку HTTP-ответа в Gleam?

    Я хочу отправлять заголовок Date. Требуемый формат выглядит следующим образом: Вот мой текущий вариант кода:

    Ответы 3Последняя активность gleam