一个分析骰子符号的模块

py-rolldice的Python项目详细描述


py rolldice

一个python模块,用于解析掷骰子和掷骰子的字符串表示(也称为骰子表示法)。

用法:

用法很简单。只需使用以下命令安装py rolldice即可:

python -m pip install py-rolldice

然后照常导入并运行掷骰子功能:

import rolldice
result, explanation = rolldice.roll_dice('12d6 + 10')

就这样。该函数接受骰子掷骰的字符串表示形式,并按该顺序返回一个包含数值结果和构造的表示字符串的元组。

函数和浮动:

默认情况下,骰子滚动器将解析浮点数和一组有限的函数调用。如果需要,可以禁用此功能:

roll_dice('abs(-2)') # Will work
roll_dice('abs(-2)', functions=False) # Won't work

roll_dice('3 / 2') # Division will return a float
roll_dice('3 / 2', floats=False) # Division will be floor division

roll_dice('4.5') # Will work
roll_dice('4.5', floats=False) # Won't work

这些也适用于骰子袋类。

骰子语法:

dice语法基于CritDice语法。

基本语法:

4d10 + 17: Roll a 10-sided die 4 times and add 17 to the result
2d20 - 3: Roll a 20 sided die 2 times and subtract 3
1d4 * 3: Roll a 4 sided die once and multiply by 3
d4 * 3: Same as above, leaving out the number of dice will default to 1
5d6 / 3: Roll 5d6 and divide by 3
5d6 // 3: Same as above but floor division
2d10 ** 1d20: Roll 2d10 and exponentiate to the power of 1d20. Completely useless. Please never do this.
1d6 ** 1d6 ** 1d6 ** 1d6: OH GOD PLEASE NO

你明白了。空格是可选的,实际上可以插入卷中的任何位置。1 5 d 2 0 + 3 5实际上有效。接线员跟着彭达斯。例如:

roll_dice('2*3+5') # Will return 11, following PEMDAS
roll_dice('2*(3+5)') # Will return 16, using parentheses precedence

骰子滚动也支持一些功能,除了因为我可以。

abs(2d6-7): Absolute value of 2d6-7
gcd(2d6, 2d6): GCD of 2d6 and 2d6
lcm(7, 4d20): LCM of 7 and 4d20
floor(2d6 / 2): Floor of 2d6 / 2
ceil(2d6 / 2): Ceiling of 2d6 / 2
prime(2d6): 1 if 2d6 is prime else 0

可以添加其他功能。

关于指数运算的注意事项:

我已经做了一个检查,试图保护您的软,脆弱的CPU免受pow()函数的威胁,但您仍然必须小心。 指数是正确的关联,因为数学。

高级语法:

保持最高(k):

习惯于保持最高的滚动。后面可以跟一个数字来保持骰子的数量,或者不跟任何东西来表示只保留一个。

4d10K: Roll 4d10 and keep only the highest roll
7d12K3: Roll 7d12 and keep the highest three rolls
7d12K3 + 4: Roll as above then add 4
保持最低(k):

同上,但保持最低。

3d3k: Roll 3d3 and keep the lowest roll
100d6k99: Roll 100d6 and keep all but the highest.
2d20k: Roll 2d20 and keep the lowest. This is a disadvantage roll in 5e
最高下降(x):

用来放下最高的一卷。后面可以跟一个数字来丢骰子,也可以不跟任何东西来表示只丢了一个。

6d8X: Roll 6d8 and drop the lowest
5d10X3 Roll 5d10 and drop the highest 3
最低下降(x):

你明白了。

爆炸骰子(!):

爆炸骰子通常被称为“规则6”或“规则10”,因为它是在暗影运行。只要掷骰子通过指定的比较,就会掷另一个骰子并添加到总数中。重复此过程,直到滚动与比较不匹配的数字。

2d20!: Roll 2d20 and explode every time a 20 is rolled
7d20!3: Roll 7d20 and explode every time a 3 is rolled
4d6! Roll 4d6 and explode every time a 6 is rolled
d20!>10: Roll a d20 and explode every time a number higher than 10 is rolled
3d12!<2: Roll 3d12 and explode every time a 1 is rolled.
计算成功次数(>;或<;):

计算高于或低于某个值的卷数。

4d20>19: Rolls 4d20 and counts the number of rolls above 19
10d12<3: Rolls 10d12 and counts the number of rolls below 3
计数失败(f):

除了计数成功之外,还要指定一个额外的“失败”条件。每次失败将减少1分,而每次成功仍将增加1分。

10d10>6f<3: Roll 10d10 and count successes over 6 and failures under 3
4d20<5f>19: Roll 4d20 and count successes under 5 and failures over 19
5d100<5f>3: Invalid, you cannot have your failure and success comparison both be more than or less than.
穿透骰子(!p):

穿透骰子和爆炸骰子是一样的,除了所有爆炸骰子加上-1修正。

2d20!: Roll 2d20 and penetrate every time a 20 is rolled
7d20!3: Roll 7d20 and penetrate every time a 3 is rolled
4d6! Roll 4d6 and penetrate every time a 6 is rolled
d20!>10: Roll a d20 and penetrate every time a number higher than 10 is rolled
3d12!<2: Roll 3d12 and penetrate every time a 1 is rolled.
单个修饰语(a,s,m):

加、减或乘每个骰子卷。

2d20a3: Add three to each roll
4d12s4: Subtract four from each roll
6d4m3: Multiply each roll by 3
重拨号码(R或R):

在1、特定数字或比较上重新滚动。r在不满足条件之前重新滚动,r仅重新滚动一次。

4d20R: Reroll until there are no ones
5d6r6: Reroll once on a 6
7d12R>4: Reroll until there are no numbers above 4

骰子袋类:

dicebag类提供了一种简单的方法来存储特定的卷并重新滚动。 用法:

from rolldice import *
dicebag = DiceBag() #Initializes with a roll of '0'
# OR
dicebag = DiceBag('12d6 + 2d20K') #Initializes with a roll of '12d6 + 2d20K'

result, explanation = dicebag.roll_dice() #Repeat as needed

# The last roll is also stored in dicebag.lastroll
assert result = dicebag.last_roll and explanation = dicebag.last_explanation

就这些!

计划功能:

  • [X]允许在特定数字上爆炸,而不仅仅是比较
  • [X]按critice语法计算失败次数
  • [X]穿透骰子
  • [X]dicebag对象,用于重复掷骰子并作为对象存储。
  • [X]在给定条件下重新滚动一次或任意次数
  • [X]正确分析pemdas
  • [X]安全的数学分析器
  • [X]更好的支持所有优点的AST解析器

建议

如果你对功能有任何其他想法,只需提出建议,我会看看我能做什么!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在JavaFX中使用FXML创建自定义对话框?   在应用程序完全关闭之前对服务器的java Android请求   java Formatter类不会在每次写入文本文件后保留数据   Gremlin Spark Java Maven项目查询响应缓慢   eclipse Java服务器和客户端   bean的属性id的java无getter方法   java将空值分配给int   安卓 studio 2.2中的java Sqlite   java如何为字符串到文件句柄的映射创建清理器?   java计算返回多个数据的标准差   联机运行JAVA应用程序并连接到网站以更新内容   使用Java DBCP连接到Cassandra   java寻找无向图中两个节点之间断开连接的最小权重   netbeans Java服务器软件在编译为可执行Jar时不接收连接   java从Json文件中获取数据   java如何使用protobufgradleplugin指定Protobuf路径   pdf iText冲压Java   java迫使Akka流将各个阶段融合在一起