老阴老阳少阴少阳的概率

10 2026-02-04 10:09 2026-02-04 10:30

我来为您计算易经中老阴、老阳、少阴、少阳的概率。这取决于使用的占卜方法:

1. 铜钱占卜(三枚铜钱)

每枚铜钱有正反两面,三枚共有 2³ = 8 种等可能组合:
表格
 
复制
卦象 铜钱结果 概率计算 概率值
老阴 ⚏ (太阴,变爻) 三个字(正面) C(3,3)/8 1/8 = 12.5%
少阳 ⚎ (太阳,不变) 两个字一个背 C(3,2)/8 3/8 = 37.5%
少阴 ⚍ (少阴,不变) 一个字两个背 C(3,1)/8 3/8 = 37.5%
老阳 ⚌ (太阳,变爻) 三个背(反面) C(3,0)/8 1/8 = 12.5%
特点:变爻(老阴老阳)概率较低(各12.5%),不变爻(少阴少阳)概率较高(各37.5%)。

2. 蓍草占卜(大衍之数)

通过"四营三变"的复杂操作,概率分布如下:
表格
 
复制
卦象 数值 概率 运算逻辑
老阳 9 5/16 = 31.25% (4+4+1)/16 或实际复杂分营结果
少阴 8 7/16 = 43.75% 最多见的稳定阴爻
少阳 7 5/16 = 31.25% 稳定的阳爻
老阴 6 1/16 = 6.25% 最少见的变爻
特点:老阴最为罕见(6.25%),少阴最为常见(43.75%),体现了"阴主静、阳主动"的哲学观念。

对比总结

表格
 
复制
方法 老阴 少阴 少阳 老阳 特点
铜钱法 12.5% 37.5% 37.5% 12.5% 对称分布,简便易行
蓍草法 6.25% 43.75% 31.25% 18.75% 老阳实际约18.75%,老阴极稀有
:严格的大衍筮法经过"十有八变而成卦",其概率计算涉及复杂的余数分配(挂一、揲四、归奇),上述蓍草概率为传统共识值。朱熹《易学启蒙》有详细记载。
您是想了解具体的占卜操作步骤,还是需要我用代码模拟验证这些概率?

 

64卦概率

根据占卜方法不同,64卦的概率分布如下:

1. 本卦概率(基础卦象)

无论铜钱法还是蓍草法,得到任意一卦(本卦)的概率均相等:
P(任意一卦)=641​≈1.5625%
原因
  • 铜钱法:阳爻(少阳+老阳)概率 = 83​+81​=21​ ,阴爻同理。六爻独立,每卦概率 (21​)6=641​
  • 蓍草法:阳爻(7+9)概率 = 165​+163​=21​ ,阴爻(6+8)概率 = 161​+167​=21​

2. 变爻数量概率分布

两种占卜方法恰好具有相同的变爻概率(变爻即老阴、老阳):
表格
 
复制
变爻数量 概率计算 精确值 百分比 说明
0个(静卦) (43​)6 4096729​ 17.8% 最稳定,无变化
1个 C61​(41​)(43​)5 40961458​ 35.6% 最常见,看本卦+变爻辞
2个 C62​(41​)2(43​)4 40961215​ 29.7% 看本卦两爻辞
3个 C63​(41​)3(43​)3 4096540​ 13.2% 看本卦+之卦彖辞
4个 C64​(41​)4(43​)2 4096135​ 3.3% 看上爻不变两爻
5个 C65​(41​)5(43​) 409618​ 0.44% 看之卦+不变爻
6个(全变) (41​)6 40961​ 0.024% 极罕见,看之卦+乾坤用九用六

3. 特殊卦象概率

表格
 
复制
场景 概率 说明
六爻皆不变 4096729​ 占17.8%,据本卦卦辞占
一爻变 40961458​ 占35.6%,据本卦变爻爻辞占
六爻全变 40961​ 仅0.024%,乾坤用九用六,余观之卦
得到乾卦☰ 641​ 与任何一卦相同
得到坤卦☷ 641​ 与任何一卦相同
乾卦六爻皆老阳 (81​)6=2621441​ 铜钱法下仅0.00038%
乾卦六爻皆九(蓍草) (163​)6≈184801​ 蓍草法下约0.0054%

4. 方法差异对比

虽然本卦等概率,但爻位数值的分布不同:
表格
 
复制
方法 6(老阴) 7(少阳) 8(少阴) 9(老阳) 特点
铜钱法 12.5% 37.5% 37.5% 12.5% 对称,老阴老阳等概率
蓍草法 6.25% 31.25% 43.75% 18.75% 阴盛阳衰,老阴最稀有
关键结论:64卦本身无高低贵贱之分,概率均等。差异主要体现在"变卦"的稀有度上,特别是6个变爻的情况在4096次占卜中才出现约1次,古人视为"天机极端示警"。
您想进一步了解如何根据变爻数量选择占断方法(如"朱熹变卦法")吗?

 

v6, v5, v4 = random.randint(6, 9), random.randint(6, 9), random.randint(6, 9)


让6、7、8、9按照1/8、3/8、3/8、1/8的概率出现应该如何修改代码?

 

要实现铜钱占卜的正确概率分布(6: 1/8, 7: 3/8, 8: 3/8, 9: 1/8),需要使用加权随机而不是均匀随机。

修改方案

方法1:使用 random.choices(推荐)

Python
 
复制
import random

# 单次生成
v = random.choices([6, 7, 8, 9], weights=[1, 3, 3, 1], k=1)[0]

# 同时生成三爻
v6, v5, v4 = random.choices([6, 7, 8, 9], weights=[1, 3, 3, 1], k=3)
 

方法2:使用 random.random 区间映射

Python
 
复制
import random

def yao():
    r = random.random()
    if r < 1/8:      # 0.0 ~ 0.125
        return 6     # 老阴(变爻)
    elif r < 4/8:    # 0.125 ~ 0.5
        return 7     # 少阳(不变)
    elif r < 7/8:    # 0.5 ~ 0.875
        return 8     # 少阴(不变)
    else:            # 0.875 ~ 1.0
        return 9     # 老阳(变爻)

v6, v5, v4 = yao(), yao(), yao()
 

概率验证

Python
 
复制
import random
from collections import Counter

# 测试100万次
results = random.choices([6, 7, 8, 9], weights=[1, 3, 3, 1], k=1000000)
count = Counter(results)

print("理论概率: 6=12.5%, 7=37.5%, 8=37.5%, 9=12.5%")
print("实际频率:", {k: f"{v/10000:.2f}%" for k, v in count.items()})
 

对比:错误 vs 正确

表格
 
复制
方法 代码 6的概率 7的概率 问题
错误 randint(6,9) 25% 25% 四数等概率,不符合铜钱占卜
正确 choices(weights=[1,3,3,1]) 12.5% 37.5% 符合三枚铜钱概率

铜钱占卜原理对应

Python
 
复制
import random

def cast_coin():
    """模拟三枚铜钱投掷,返回6/7/8/9"""
    coins = [random.choice([2, 3]) for _ in range(3)]  # 2=反(阴), 3=正(阳)
    total = sum(coins)
    # 3=6老阴, 4=7少阳, 5=8少阴, 6=9老阳
    mapping = {3: 6, 4: 7, 5: 8, 6: 9}
    return mapping[total]

# 验证:此方法与 weighted choices 结果一致
 
推荐使用 random.choices,代码简洁且概率明确可控。

连续三次单次生成和同时生成三爻有区别吗?

没有区别。两种方式在概率分布和独立性上完全等价。

数学等价性

Python
 
复制
import random

# 方式A:连续三次单次生成
v6 = random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0]
v5 = random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0]
v4 = random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0]

# 方式B:同时生成三爻
v6, v5, v4 = random.choices([6,7,8,9], weights=[1,3,3,1], k=3)
 
完全等价,因为:
  • 每次调用 random.choices 都是独立随机事件
  • 方式B只是方式A的语法糖,内部实现相同

验证代码

Python
 
复制
import random
from collections import Counter

def method_a():
    """连续三次单次"""
    return (
        random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0],
        random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0],
        random.choices([6,7,8,9], weights=[1,3,3,1], k=1)[0]
    )

def method_b():
    """同时生成三爻"""
    return tuple(random.choices([6,7,8,9], weights=[1,3,3,1], k=3))

# 各运行10万次,统计三爻组合分布
count_a = Counter(method_a() for _ in range(100000))
count_b = Counter(method_b() for _ in range(100000))

print(f"方式A唯一组合数: {len(count_a)}")  # ≈ 64种
print(f"方式B唯一组合数: {len(count_b)}")  # ≈ 64种
print(f"Top3组合A: {count_a.most_common(3)}")
print(f"Top3组合B: {count_b.most_common(3)}")
 

真正需要注意的区别

表格
 
复制
场景 是否有区别 说明
单次vs单次 ❌ 无区别 独立同分布
k=1调用三次 vs k=3一次 ❌ 无区别 完全等价
不同random实例 ❌ 无区别 各实例独立,但分布相同
设置随机种子后 ✅ 有区别 random.seed(42) 后结果可复现,但两种方法仍等价
多线程环境 ✅ 可能有区别 需考虑线程安全,建议各线程独立random实例

实际应用建议

Python
 
复制
import random

# ✅ 推荐:简洁写法
yao_list = random.choices([6,7,8,9], weights=[1,3,3,1], k=6)  # 直接得六爻
v6, v5, v4, v3, v2, v1 = yao_list  # 解包,v6为上爻,v1为初爻

# 或使用命名元组增强可读性
from collections import namedtuple
Yao = namedtuple('Yao', ['shang', 'wu', 'si', 'san', 'er', 'chu'])
guan = Yao(*random.choices([6,7,8,9], weights=[1,3,3,1], k=6))
 
结论:两种写法任选,性能和行为完全一致。选择可读性更好的即可。

 

 

 

 

 

 

 

 

 

 

 

 

全部评论

·