python - 在python中代码拼字游戏作弊器时添加通配符
问题描述
我正在尝试向我的拼字游戏架添加一个通配符(每个字符一个:一个 * 和一个?,总共最多两次),可以更改为任何单个字符。如果我输入 bo?*、* 和 ? 应该是 a~z 并且所有可能的单词都需要与 sowpods.txt 中的单词进行比较。我应该如何编辑此代码?:) 现在我的代码在没有通配符的情况下工作。提前致谢!
++ 当我打印结果时,它显示为 (10, 'bomb')。我怎样才能让它像(10,炸弹)?剥离或更换不起作用。
import sys
import string
scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2,
"f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3,
"l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1,
"r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4,
"x": 8, "z": 10}
# Get the Scrabble rack from the command line.
if len(sys.argv) < 2:
print("no rack error.")
exit(1)
rack = sys.argv[1]
rack_low = rack.lower()
# Turn the words in the sowpods.txt file into a Python list.
with open("sowpods.txt","r") as infile:
raw_input = infile.readlines()
data = [datum.strip('\n') for datum in raw_input]
# Find all of the valid sowpods words that can be made
# up of the letters in the rack.
valid_words = []
for word in data:
word_low = word.lower()
candidate = True
rack_letters = list(rack_low)
for letter in word_low:
if letter not in rack_letters:
candidate = False
break # No need to keep checking letters.
else:
rack_letters.remove(letter)
if candidate == True:
# Get the Scrabble scores for each word.
total = 0
for letter in word_low:
total = total + scores[letter]
valid_words.append([total, word_low])
# Print the valid words, sorted by Scrabble score.
valid_words.sort(reverse = True)
for entry in valid_words:
score = entry[0]
word_low = entry[1]
print((score, word_low))
print("Total number of words:", len(valid_words))
解决方案
我将假设所有空白图块都由相同的字符“*”表示。我不知道你为什么想要两个不同的,但如果你这样做,你可以适当地修改我的解决方案。
用一个函数和一个更短的 for 循环替换你的 for 循环(保持其他所有内容相同):
def can_make_word(word):
rack_letters = list(rack_low)
for letter in word_low:
if letter in rack_letters:
rack_letters.remove(letter)
elif '*' in rack_letters:
rack_letters.remove('*')
else:
return False
return True
for word in data:
word_low = word.lower()
if can_make_word(word_low):
# Get the Scrabble scores for each word.
total = 0
for letter in word_low:
total = total + scores[letter]
valid_words.append([total, word_low])
打印输出中出现单引号是因为您正在打印一个元组。它们不是字符串中的字符,因此您不能将它们剥离。如果您将打印语句(删除一组括号)重写为:
print(score, word_low)
您将10, bomb
在输出中看到而不是(10, 'bomb')
. 这是因为当 Python 打印一个元组时,它通过调用它的 str() 函数来格式化每个元素,该函数在单引号内显示字符串。您可以在 IDLE 中使用它或在交互式 Python 会话中查看它是如何工作的。
推荐阅读
- asp.net - 无法在 asp.net 中加载图像文件:System.IO.FileNotFoundException HResult=0x80070002 Message=data-science.png
- python - 如何将熊猫数据框的相邻列分组为三组?
- audio - 如何将 mp4 文件转换为具有相同持续时间的 wav?
- sonarqube - 如何限制用户更新错误、代码异味、漏洞、重复
- angular - 直接路由到指定页面
- node.js - 具有自定义 ON 条件的左外连接 sequelize
- mysql - 如何将 MySQL 配置为 Tomcat 9 域以获取用户凭据
- javascript - 根据使用角度js的要求的日期和时间格式
- python - 是否可以同时运行 pdb 和 unittest python 模块?
- algorithm - 二进制乘法加法