簡體   English   中英

Python拼字游戲挑戰找到有效的單詞

[英]Python Scrabble challenge find valid words

我正在嘗試完成一個基本的python項目,該項目基本上需要一個輸入,並仔細檢查有效拼字游戲的列表,並確定在輸入后可以使用哪些拼字游戲。

第一部分比較容易,但是實際上很重要的部分是給我一些問題。

這是我到目前為止的內容:

import argparse
import sys

"""

Step 1: Get input from the user

"""

parser = argparse.ArgumentParser()
parser.add_argument("rack", type=str, help = "letters on the rack (no spaces)")
args = parser.parse_args()

rack = args.rack
rack = rack.upper()
rack = sorted(rack)

"""

Step 2: Open the sowpods.txt file, read the contents and turn it into a list

"""

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

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}

file = "sowpods.txt"
length = file_len(file)

file = open("sowpods.txt", 'r')
file_list = list(file)

for i in range(length):
    value = file_list[i]
    value = value.rstrip('\n')
    file_list[i] = value

"""

Step 3: Find valid words

"""

#for x in range(len(file_list)):
for x in range(82980,83000):
    tmp = rack
    test = file_list[x]
    pos = []

    if len(test) > len(tmp):
        break
    else:
        for y in range(len(test)):
            letter = test[y]
            if letter in tmp[y:(len(tmp))]:
                pos.append(letter)
        print(pos)

我確定這很混亂,因為我已經有一段時間沒有編程了,但是我只想弄清楚程序檢查有效性的部分。 現在,循環遍歷了一個范圍,在這個范圍內,我知道可以從機架上發出一些字,但是我被卡住了。 我在這篇文章中提供了一些幫助,但老實說,我不確定當前發生了什么。

我在這里可能會有點頭疼,但我仍然想弄清楚這一點。

檢查單詞是否有效的最簡單方法是使用collections.Counter 您將機架中每個字母的出現次數和每個拼字游戲單詞的每個字母出現次數取差。 如果從機架上取下字母后,拼字游戲的字詞已無所剩,那么您可以制作拼字游戲的字詞。

示例代碼(使用提供的詞典代替系統詞典):

from collections import Counter

with open('/usr/share/dict/words') as fin:
    lines = (word.strip().upper() for word in fin)
    words = [(word, Counter(word)) for word in lines]

rack = Counter('AEDTUMS')
for scrabble_word, letter_count in words:
    # Using length here to limit output for example purposes
    if len(scrabble_word) >= 6 and not (letter_count - rack):
        print(scrabble_word)

會給你:

MEDUSA
AMUSED
SAUTED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM