这是一个生成 -illion 数(即以 -illion 结尾的数词)的 Python 脚本。其基于斯比斯·赛比安的扩展乔纳森·鲍尔 -illions 系统(Sbiis Saibian's Extended Jonathan Bower's -illions System)构造 -illion 数,支持第一层级至第三层级,之后可能会支持第四层级。
主脚本是 ssejb_illions_sys.py,其中 gen_tier1_illion, gen_tier2_illion, gen_tier3_illion 用于生成 -illion 数,gen_class1_separator, gen_class2_separator, gen_class3_separator 用于生成类分隔符,用法详见函数文档。
关于斯比斯·赛比安的扩展乔纳森·鲍尔 -illions 系统对层级分界线和 -ilion 数的命名法,请见命名法。
之后应该会考虑将此脚本做成模块上传到 pypi 上。
def gen_class1_separator(n, prefix=False, *, abbr=False):此函数用于生成第一层级分界线。
- 类型:
int - 描述: 第一层级分界线索引,1~999 以内,超出范围时抛出异常。
- 类型:
bool - 默认值:
False - 描述: 返回前缀格式。
- 类型:
bool - 默认值:
False - 描述: 返回缩写格式。
- 类型:
str - 描述: 第一层级分界线。
def gen_class2_separator(n, prefix=False, *, abbr=False):此函数用于生成第二层级分界线。
- 类型:
int - 描述: 第二层级分界线索引,1~999 以内,超出范围时抛出异常。
- 类型:
bool - 默认值:
False - 描述: 返回前缀格式。
- 类型:
bool - 默认值:
False - 描述: 返回缩写格式。
- 类型:
str - 描述: 第二层级分界线。
def gen_class3_separator(n, *, abbr=False):此函数用于生成第三层级分界线。
- 类型:
int - 描述: 第三层级分界线索引,1~999 以内,超出范围时抛出异常。
- 类型:
bool - 默认值:
False - 描述: 返回缩写格式。
- 类型:
str - 描述: 第三层级分界线。
def gen_tier1_illion(n, *, check_argu=True, abbr=False):此函数用于生成第一层级的 -illion 数,同时返回用科学计数法表示的值及其序号。
- 类型:
int - 描述: 第一层级分界线索引,1~999 以内。
- 类型:
bool - 默认值:
True - 描述: 启用时自动校验字典键值合法性,禁用后跳过校验。
- 类型:
bool - 默认值:
False - 描述: 控制返回名称是否为缩写形式(仅影响命名部分)。
tuple[str, str, str] # (-illion 数, 科学计数法, 序号)- -illion 数:根据
abbr生成的完整 -illion 数(如septenvigintiquadringentillion)或缩写(如SpVQae) - 科学计数法:-illion 数对应的值
- 序号:-illion 数的序号
当 check_argu=True 时,可能会抛出 ValueError,触发条件:第一层级分界线索引超出 1~999 范围
print(gen_tier1_illion(427))输出:
('septenvigintiquadringentillion',
'1e1284')print(gen_tier1_illion(427, abbr=True))输出:
('SpVQae',
'1e1284')科学计数法 = 1e(3*第一层级分界线索引 + 3)
def gen_tier2_illion(groups, *, check_argu=True, abbr=False):此函数用于生成第二层级的 -illion 数,同时返回用科学计数法表示的值及其序号。
-
类型:
dict -
描述: 定义第二类组的映射关系。
格式:
- 键:第二层级分界线索引(0~999 的整数)
- 值:第一层级分界线索引(1~999 的整数)
- 类型:
bool - 默认值:
True - 描述: 启用时自动校验字典键值合法性,禁用后跳过校验。
- 类型:
bool - 默认值:
False - 描述: 控制返回名称是否为缩写形式(仅影响命名部分)。
tuple[str, str, str] # (-illion 数, 科学计数法, 序号)- -illion 数:根据
abbr生成的完整 -illion 数(如quattuorquadraginti...illion)或缩写(如QaQagi...Spg) - 科学计数法:-illion 数对应的值
- 序号:-illion 数的序号
当 check_argu=True 时,可能会抛出 ValueError,触发条件:
- 第二类组映射表非字典类型
- 第二层级分界线索引超出 0~999 范围
- 第一层级分界线索引超出 1~999 范围
- 第二类组映射表的最大的第二层级分界线索引为 0
print(gen_tier2_illion({12: 45, 0: 75, 978: 44, 1: 42}))输出:
('quattuorquadragintiocteheptaconteennahecto-quinquadragintidueco-doequadragintimilli-quinseptuagintillion',
'1e(132e2934 + 135e36 + 126e3 + 228)')print(gen_tier2_illion({12: 45, 0: 75, 978: 44, 1: 42}, abbr=True))输出:
('QaQagiOtHpcEnht-QiQagiDeVc-DQagiMi-QiSpg',
'1e(132e2934 + 135e36 + 126e3 + 228)')对于 第二层级分界线索引 > 0 的情况:
每个第二类组贡献项 = (3 * 第一层级分界线索引)e(3 * 第二层级分界线索引)
对于 第二层级分界线索引 = 0 的情况:
每个第二类组贡献项 = 3 * 第一层级分界线索引 + 3
最终结果:
科学计数法 = 1e(各个第二类组贡献项相加)
def gen_tier3_illion(class2_groups, *, check_argu=True, abbr=False):此函数用于生成第三层级的 -illion 数,同时返回用科学计数法表示的值及其序号。
-
类型:
dict -
描述: 定义第二类组的映射关系。
格式:
-
键:
有两种格式:
- 表示第三类组映射表
- 格式:
第三类组映射表,形如
((第三层级分界线索引, 第二层级分界线索引), ...)的元组(实际上是用元组表示的字典) - 索引约束:
- 第三层级分界线索引:0~999 的整数,且一个第二&三层级分界线映射表中最大的第三层级分界线索引不能为 0,同时单个个第二&三层级分界线映射表中不能出现重复的第三层级分界线索引
- 第二层级分界线索引:1~999 的整数
- 格式:
第三类组映射表,形如
- 表示第二层级分界线索引(0~999 的整数)
- 表示第三类组映射表
-
值:第一层级分界线索引(1~999 的整数)
-
- 类型:
bool - 默认值:
True - 描述: 启用时自动校验字典键值合法性,禁用后跳过校验。
- 类型:
bool - 默认值:
False - 描述: 控制返回名称是否为缩写形式(仅影响命名部分)。
tuple[str, str, str] # (-illion 数, 科学计数法, 序号)- -illion 数:根据
abbr生成的完整 -illion 数(如dokaocta...septingentillion)或缩写(如DoKaOtc...Spe) - 科学计数法:-illion 数对应的值
- 序号:-illion 数的序号
当 check_argu=True 时,可能抛出 ValueError,触发条件:
- 第二类组映射表非字典类型
- 第二类组映射表的键非元组或数字类型
- 第二类组映射表的第一层级分界线索引超出 1~999 范围
- 当第二类组映射表的键表示第三类组映射表时:
- 单个第三类组映射表的最大第三层级分界线索引为 0
- 单个第三类组映射表存在重复的第三层级分界线索引
- 第三类组映射表的第三层级分界线索引超出 0~999 范围
- 第三类组映射表的第二层级分界线索引超出 1~999 范围
- 当第二类组映射表的键表示第二层级分界线索引时,其值超出 1~999 范围
如果 tier2_groups 不为 None,则还可能抛出 gen_tier2_illion 函数可能抛出的异常。
print(gen_tier3_illion({
((2, 13), (0, 1), (1, 14)): 5,
((6, 13), (0, 1), (1, 14)): 5,
((6, 13), (0, 1), (1, 15)): 5,
((6, 13), (0, 2), (1, 15)): 5,
((6, 13), (4, 15), (3, 110)): 120,
((17, 13), (8, 15), (7, 110)): 120,
((672, 13), (27, 15), (45, 110)): 120,
((0, 1), (4, 1)): 120,
((3, 1), ): 120
}, {15: 1, 4: 1}))输出:
('viginticentitreceexozacodavecehectetecpetapenteceiczeto-viginticentitrecezedakapenteceyottavecehectezetto-viginticentitreceexapenteceteravecehectegigo-quintreceexapentecekillamicro-quintreceexapentecekillamilli-quintreceexatetrecekillamilli-viginticentiteramilli-viginticentigigo-quintrecemegatetrecekillamilli-penteco-picillion',
'1e(3e(39e2016 + 330e135 + 45e81) + 3e(39e51 + 45e24 + 330e21) + 3e(39e18 + 45e12 + 330e9) + 3e(39e18 + 45e3 + 6) + 3e(39e18 + 45e3 + 3) + 3e(39e18 + 42e3 + 3) + 3e(3e12 + 3) + 3e(3e9) + 3e(39e6 + 42e3 + 3) + 3e45 + 3e12 + 3)')print(gen_tier3_illion({
((2, 13), (0, 1), (1, 14)): 5,
((6, 13), (0, 1), (1, 14)): 5,
((6, 13), (0, 1), (1, 15)): 5,
((6, 13), (0, 2), (1, 15)): 5,
((6, 13), (4, 15), (3, 110)): 120,
((17, 13), (8, 15), (7, 110)): 120,
((672, 13), (27, 15), (45, 110)): 120,
((0, 1), (4, 1)): 120,
((3, 1), ): 120
}, {15: 1, 4: 1}, abbr=True))输出:
('VCeiTrVceExoZcDaVcHteTecPtaPtVceIcZo-VCeiTrVceZDkaPtVceYtaVcHteZto-VCeiTrVceExaPtVceTeaVcHteGo-QiTrVceExaPtVceKlaMc-QiTrVceExaPtVceKlaMi-QiTrVceExaTtVceKlaMi-VCeiTeaMi-VCeiGo-QiTrVceMgaTtVceKlaMi-PtVc-Pc',
'1e(3e(39e2016 + 330e135 + 45e81) + 3e(39e51 + 45e24 + 330e21) + 3e(39e18 + 45e12 + 330e9) + 3e(39e18 + 45e3 + 6) + 3e(39e18 + 45e3 + 3) + 3e(39e18 + 42e3 + 3) + 3e(3e12 + 3) + 3e(3e9) + 3e(39e6 + 42e3 + 3) + 3e45 + 3e12 + 3)')- 当第二类组映射表的键表示第二层级分界线索引时:
- 对于
第二层级分界线索引 > 0的情况:每个第二类组贡献项 = (3 * 第一层级分界线索引)e(3 * 第二层级分界线索引) - 对于
第二层级分界线索引 = 0的情况:每个第二类组贡献项 = 3 * 第一层级分界线索引 + 3
- 对于
- 当第二类组映射表的键表示第三类组映射表时:
- 对于
第三层级分界线索引 > 0的情况:每个第三类组贡献项 = (3 * 第二层级分界线索引)e(3 * 第三层级分界线索引) - 对于
第三层级分界线索引 = 0的情况:每个第三类组贡献项 = 3 * 第二层级分界线索引 - 然后构造第二类组贡献项:
每个第二类组贡献项 = (3 * 第一层级分界线索引)e(各个第三类组贡献项相加)
- 对于
- 最后,构造结果:
科学计数法 = 1e(各个第二类组贡献项相加)