使用正确的版本检查用户输入是否正确

时间:2014-09-24 15:52:00

标签: python list file

好的,所以我的程序的全部意义在于用户必须解决从外部文件读入的编码拼图。然后,用户猜测哪个字母与编码拼图中的符号匹配,然后他们可以将其添加到线索列表中。

我的程序中的一个选项允许用户检查他们输入的线索是否与解决的版本一致。解析后的版本是从外部文件读入的,这需要通过线索列表进行检查。

到目前为止,我有一段基本的代码,但是继续发生的是我得到的输出是“你得分为0分”,即使我输入的一些配对是正确的。

到目前为止,我的代码代码是这个......

def check_clues():
    count = 0
# TRIES TO OPEN FILE SOLVED.TXT
    try:
        with open('solved.txt') as r:
# READS THROUGH ALL THE LINES IN SOLVED.TXT
             solved = r.readlines()
# WILL DISPLAY AN ERROR MESSAGE IF SOLVED.TXT IS NOT FOUND
    except:
        print("Error finding file")
# WILL TRY AND OPEN THE FILE 'clues.txt'
    try:
        with open('clues.txt') as r: 
             clues = r.readlines()
    except:
        print("Error finding ")


# GOES THROUGH BOTH THE USERS CLUES AND SOLVED.TXT TO SEE HOW MANY CLUES ARE THE SAME
    for clue in clues:
        if clue in solved:
            count += 1
# Prints the amount of clues the user got right out of 10
    print('You got:', count, 'correct!')

以下是solve.txt文件中的内容:

ACQUIRED
ALMANAC
INSULT
JOKE
HYMN
GAZELLE
AMAZON
EYEBROWS
AFFIX
VELLUM

以下是clues.txt中的内容

A#
M*
N%

但是请注意clues.txt是用户可以添加的列表。因此,如果用户决定输入S和&,则会将此作为S&

添加到clues.txt中

下面是文件words.txt,其中包含用户必须解决的编码字列表...

#+/084&"
#3*#%#+
8%203:
,1$&
!-*%
.#7&33&
#*#71%
&-&641'2
#))85
9&330*

1 个答案:

答案 0 :(得分:0)

我使用你提供的东西来帮忙。如果您拥有列出的所有文件,我相信这是您正在寻找的内容。基本上我使用了words.txtsolved.txt文件并创建了一个字典,将所有符号映射到正确的字母。然后我用这本词典来比较每个线索,看看它们是否匹配。这会增加计数,你会得到正确的输出。

原始代码的问题在于,您只是在搜索线索是否在已解决的文本文件中。例如,您搜索第一条线索A*是否在单词文本文件中。显然它不是因为该文件中没有*。所以你需要一些基线/比较它。这就是为什么在这种情况下我创建了一个字典。我还删除了你的try / except循环,因为如果文件丢失,你的程序在技术上应该永远不会运行。在这种情况下,即使缺少文件产生多个错误输出,您的异常也将允许程序继续运行。如果没有找到或专门处理文件,它应该停止,不允许它像往常一样继续运行。如果你走这条路,我也建议只使用except WindowsError以避免捕获任何其他可能的例外。

def check_clues():
    # Dictionary to hold all of the symbol/letter combos
    coded_dict = {}

    # Go through each symbol/letter combination together
    with open("words.txt") as fw, open("solved.txt") as fs:
        for fw_line, fs_line in zip(fw, fs):
            for fw_symbol, fs_letter in zip(fw_line.strip(), fs_line.strip()):
                # Add the symbol/letter combination to the dictionary
                coded_dict[fw_symbol] = fs_letter

    correct_clues = []
    with open("clues.txt") as fc:
        for fc_line in fc:
            # If the symbol is in the dictionary and the letter matches the symbol
            if fc_line[1] in coded_dict and coded_dict[fc_line[1]] == fc_line[0]:
                # Add a correct clue to your list
                correct_clues.append(fc_line.strip())

    print("You got a total of {0} correct: {1}".format(len(correct_clues), ", ".join(correct_clues)))

if __name__ == "__main__":
    check_clues()

如果您需要我详细说明,请告诉我。