找回密码
 立即注册
查看: 30|回复: 0

[技术交流] 其实这样随机才是真随机

[复制链接]
发表于 昨天 21:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

×
不知道为什么,自己写出的随机数反而不均匀
  1. from random import *

  2. def erjin():#使用时返回0 or 1
  3.     return randint(0,1)
  4. """
  5. random_list = []

  6. count = 0
  7. fl = -1

  8. max_ = 0

  9. for i in range(200):
  10.     a=erjin()
  11.     if(a!=fl):
  12.         if(count>max_):
  13.             max_=count
  14.         fl = a
  15.         count = 1
  16.     else:
  17.         count+=1
  18.         
  19.     random_list.append(a)

  20. w = 40
  21. h = 5

  22. for i in range(0,h):
  23.     for j in range(0,w):
  24.         print(random_list[i*w+j],end=' ')
  25.     print("\n")

  26. print(f"最多连续{max_}枚硬币")
  27. """

  28. def test():
  29.     random_list = []

  30.     count = 0
  31.     fl = -1

  32.     max_ = 0

  33.     for i in range(200):
  34.         a=erjin()
  35.         if(a!=fl):
  36.             if(count>max_):
  37.                 max_=count
  38.             fl = a
  39.             count = 1
  40.         else:
  41.             count+=1
  42.             
  43.         random_list.append(a)

  44.     w = 40
  45.     h = 5
  46.     """
  47.     for i in range(0,h):
  48.         for j in range(0,w):
  49.             print(random_list[i*w+j],end=' ')
  50.         print("\n")
  51.     """
  52.     """print(f"最多连续{max_}枚硬币")"""
  53.     return max_
  54. u = 0
  55. r=50000

  56. for k in range(r):
  57.     u+=test()

  58. print(f"平均{u/r}枚")
  59.    

复制代码

它们总是有连在一起的情况
但是他们才是真随机

为什么呢?
因为真随机是不会记录上次的结果的

但是部分游戏会用算法处理过的随机
如《我的世界》中流浪商人在世界创建的24000tick后开始尝试生成流浪商人(玩家和加载村庄(因该是基岩版)周围)
此后每24000tick后尝试一次生成
初始尝试又2.5%概率生成
后来如果生成失败则概率加2.5%
最高7.5%

直到生成后恢复2.5%
流浪商人72000tick
后消失

这样的随机是不是更稳定一些了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|鱼C工作室 ( 粤ICP备18085999号-1 )

GMT+8, 2026-11-4 19:51

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表