解决文字游戏的软件包

wordsolver的Python项目详细描述


文字游戏求解器

Python3文字游戏解决方案。在

作者:克里斯托弗·马尔科姆(chrismalcolm)。在

支持以下文字游戏:

  • 困惑
  • 拼字游戏
  • 刽子手
  • 单词earch

安装

$ pip install wordsolver

使用

每个单词游戏都有一个专用的解算器类。这个类可以用来为它的文字游戏提供解决方案。要求解,首先必须将用于求解的单词添加到解算器实例中。可以通过列表、集合或文件名添加单词。如果从文件名加载,文件应包含用逗号、空格或换行符分隔的每个单词。下面给出了每种方法的示例。在

^{pr2}$

一旦解算器被初始化,它将通过solve方法读取以求解。下面给出了每个单词游戏解算器的简短描述。在

Boggle

为了解决Boggle,使用了BoggleSolver类。solve方法接受第一个参数作为表示电路板的2d列表。所有字母都必须大写,除“Qu”也可以接受。字母“Q”将始终替换为“Qu”。支持任何尺寸的电路板尺寸。解决方案以大写字符串列表的形式返回。在

solve方法还有一个可选的位置参数with_positions。如果设置为True,则返回解决方案的位置,每个解决方案都表示为一个元组。在

>>>fromwordsolverimportBoggleSolver>>>boggle_solver=BoggleSolver("dictionary.txt")>>>boggle_solver.solve([...["A","C","T"],...["N","O","I"]...])['ACTION','ACTON','CION','CITO','COIT','NAOI','OTIC','ICON','ACT','CIT','COT','CON','CAN','TIC','TOC','TON','NOT','OCA','ION']>>>>>>boggle_solver.solve([...["Qu","E","N","T"],...["E","X","D","L"],...["J","K","L","M"]...])['QUEEN','EXED','DEEK','DENT','JEED','KEEN','EEK','END','NEE','NED','EEN','XED','DEN','DEE','DEX','JEE','KEX']>>>>>>boggle_solver.solve([...["C","A","T"]...],with_positions=True)[('CAT',[[(0,0),(0,1),(0,2)]])]>>>

拼字游戏

为了解决拼字游戏,使用ScrabbleSolver类。solve方法接受两个参数。第一个是一个15x152d列表,表示拼字板。普通平铺应使用大写字母,空格应使用小写字母,空白处应使用通配符“*”。EMPTY_STANDARD变量也作为表示空的15x15板的速记。第二个参数是rack,它应该是一个rack tiles的列表,大写字母代表tiles,而“#”代表空白。解的位置以4个变量的元组形式返回:一个大写的单词字符串、x和y坐标以及一个布尔值,True表示水平,False表示垂直。在

还提供了一个get_score方法来检查单词位置的分数。此方法接受与前一个方法相同的参数,以及附加的放置参数。布局应该是一个由4个变量组成的元组:一个单词的字符串放在大写,x和y坐标和一个布尔值,True表示水平,False表示垂直。分数被返回。在

>>>fromwordsolverimportScrabbleSolver,EMPTY_STANDARD>>>scrabble_solver=ScrabbleSolver("dictionary.txt")>>>scrabble_solver.solve(EMPTY_STANDARD,["Z","O","D","I","A","C","S"])[('ZODIACS',3,7,False,108),('ZODIACS',7,3,True,108),('ZODIACS',6,7,False,94),...,('OI',6,7,False,4),('OI',7,6,True,4)]>>>>>>scrabble_solver.get_score(EMPTY_STANDARD,["A","#","E"],("ARE",7,7,False))4>>>>>>test_board=[...["T","E","S","T","*","*","*","*","*","*","*","*","*","*","*"],...["*","B","O","A","R","D","*","*","*","*","*","*","*","*","*"],...["*","O","*","P","*","O","*","*","*","*","*","*","*","*","*"],...["*","N","*","*","*","I","*","*","*","*","*","*","*","*","*"],...["*","Y","*","*","*","N","*","*","*","*","*","*","*","*","*"],...["*","*","*","*","*","G","R","E","E","T","*","*","*","*","*"],...["*","*","*","*","*","*","*","R","*","*","*","*","*","*","*"],...["*","*","*","*","*","*","C","A","T","c","H","*","*","*","*"],...["*","*","*","*","*","*","*","*","O","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","P","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"],...["*","*","*","*","*","*","*","*","*","*","*","*","*","*","*"]...]>>>scrabble_solver.solve(test_board,["X","I","N","G"])[('XI',4,3,True,31),('NIX',8,4,False,24),('TAPING',3,0,True,18),('OX',5,2,False,17),...,('IN',5,3,False,2)]>>>

刽子手

对于求解Hangman,使用HangmanSolver类。solve方法接受两个参数,它们都是字符串。第一个参数是当前对该单词的尝试,用“#”表示任何缺失的字母。第二个参数是一个字符串,其中包含每个猜测但不正确的字母。请注意,解算器会自动假定当前尝试中的所有字母不会在最后一个单词中重新出现。可能的解决方案列表将作为列表返回。在

可以使用guess_distribution方法来获得解中每个字母的概率。返回的元组对的列表,其中包含每个字母及其概率。在

>>>fromwordsolverimportHangmanSolver>>>hangman_solver=HangmanSolver("dictionary.txt")>>>hangman_solver.solve("UN###","ABET"){'UNRIG','UNCOY','UNHIP','UNFIX','UNGOD','UNDOS','UNLID','UNZIP','UNRID','UNDID','UNCOS','UNRIP','UNSOD','UNMIX','UNIFY','UNKID'}>>>hangman_solver.guess_distrubtion("UN###","ABET")[('I',0.6875),('D',0.4375),('O',0.3125),('P',0.1875),('S',0.1875),...,('H',0.0625),('J',0),('V',0),('Q',0),('W',0)]>>>

单词搜索

为了解决单词搜索,使用WordSearchSolver类。solve方法接受表示单词search的2d列表作为其第一个参数。支持任何尺寸的尺寸。以元组的形式返回每个解决方案,单词作为第一个变量,其起始x,y坐标作为第二个变量,最后一个x,y坐标作为最后一个变量。在

还可以通过可选的位置参数directions指定检查单词的方向。该列表应包含以下罗盘方向的任何组合(“N”、“NE”、“E”、“SE”、“S”、“SW”、“W”、“NW”)。只有在罗盘方向上阅读的单词才会出现在解答中。没有th是参数,默认行为是检查所有方向。在

>>>importwordsolverimportWordSearchSolver>>>wordsearch_solver=WordSearchSolver("dictionary.txt")>>>wordsearch_solver.solve([...["C","O","A","T"],...["R","E","C","O"],...["A","R","T","E"],...["M","E","S","S"]...])[('MA',(0,3),(0,2)),('MAR',(0,3),(0,1)),('MARC',(0,3),(0,0)),...,('ECO',(3,2),(1,0))]>>>>>>wordsearch_solver.solve([...["C","O","A","T"],...["R","E","C","O"],...["A","R","T","E"],...["M","E","S","S"]...],directions=["E","W"])[('COAT',(0,0),(3,0)),('OAT',(1,0),(3,0)),('AT',(2,0),(3,0)),('RE',(0,1),(1,1)),...,('EM',(1,3),(0,3))]

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

推荐PyPI第三方库


热门话题
有没有一种方法可以将不同的java web应用程序组合到一个web应用程序(war)中而不相互影响?   java一次屏蔽两位   java如何在多个类上初始化元素?   java在后台服务中处理通知或使用GCM(或其他推送通知服务)   java从const方法调用JNI函数   javascript如何使用函数/方法返回?   Java优化:声明类变量与使用临时变量   java字符算术基数8 vs基数10   Java流收集要存储的对象列表   swing我正在用Java中的keyListener制作一个精灵移动器   在Gradle构建脚本中使用Scala(或java)方法   java Android Mediaplayer下一步按钮不起作用   Java Sound API在播放音频文件后将其锁定   java将变量从外部类传递到内部类的最佳方法   使用play framework的博客web应用程序出现java逻辑错误   java我们可以在Spring批处理中处理大型zip文件吗?   java如何检查JTable的选定行的特定列中的值是否已经在JList中?