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)

    因为每个标签显示的时间更短。

    schedule_interval() 中的 pick 有问题,会出现 NameError: name 'pick' is not defined,因为 pick 是 refresh() 内部的局部变量,在函数外不能使用。

    从英语翻译查看原文
  2. 固定链接

    这个例子无法运行,因为调用 pyglet.clock.schedule_interval 的作用域中没有变量 pick

    你的意图不太清楚。你真的希望每次运行程序时,间隔都不一样吗?固定间隔似乎更合理。

    调整一下结构也许有用。

    运行时行为有点奇怪,不过可能只是 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 发送消息。邮件到达后,收件箱显示的是发件地址。我想用一些文本替代这个地址。这应该是可以的,因为我收到的 facebook 邮件在收件箱里显示 "Facebook - Message title",而不是 "mail…

    回复 2最近活动 java
  2. 从 TypeScript 访问 Dynamics CRM

    我的 CRM 代码在网页资源中运行,所以要获取实体数据,就得写成 这样来读取数据。 可惜用 typescript 编写时,这个表达式无法编译。现在我手动把 window.parent 加到 Xrm.Page 前面……(Xrm 类型定义已经装好了),这…

    回复 2最近活动 typescript
  3. Gleam 的 HTTP 响应头需要怎样的日期格式?

    我想发送一个 Date 响应头。所需的格式如下。 这是我目前尝试的代码。

    回复 3最近活动 gleam