python中的列表只返回第一行

时间:2015-11-16 19:07:33

标签: python

我在单独的文本文件中有两个列表,"消息"和"代码"。我的程序将打开它们并阅读它们。我的程序是一个代码兑换器,它将获取代码并将其兑换为消息。

lstCodes = open("codes.txt").readlines()
lstMessages = open("messages.txt").readlines()

我将用户输入作为具有以下类的代码。

class DateCheck:
    def __init__(self, date1):
        self.date1 = date1
        if date1 == datetime.date(xxxx,x,xx):
            print('Correct! \n')
            checkx = input('Are you ready to type in your final secret code? YES = 1, NO = 0: \n')
            dcodex = input("Enter Code: \n")
            #progressB=progress(50,.04)
            LoopCheck(checkx, dcodex)
        else:
            print('Wrong code')

一旦要求用户输入代码,它就会将其传递给另一个类,该类将在文本文件中查找该代码,如果找到则返回messages.txt中的消息。

class LoopCheck:
    def __init__(self, check, code):
        self.check = check
        self.code = code
        if code in lstCodes:
            print(lstMessages[lstCodes.index(code)])
        else:
            print("Wrong Code")

继续这个问题,它只适用于code.txt中的第一个代码和message.txt中的第一个消息。当我输入正确的代码2时,它返回"错误"。我试过看我如何阅读这些名单,但我无法弄清楚我做错了什么。我确定这是一个小错误,但我还没能弄清楚。

#messages.txt
message1
message2

#codes.txt
xxxx
xxxx

2 个答案:

答案 0 :(得分:0)

最好是使用字典:

codes = {}
with open("codes.txt") as cod_fobj, open("messages.txt") as mess_fobj:
    for code, mess in zip(cod_fobj, mess_fobj):
        codes[code.strip()] = mess.strip()

现在:

>>>> codes['code1']
'message1'

支票可能如下所示:

if code in codes:
    print(codes[code])
else:
    print("Wrong Code")

或者:

try:
    print(codes[code])
except KeyError:
    print("Wrong Code")

答案 1 :(得分:0)

我想我弄清楚出了什么问题。我将created_at = Column(TIMESTAMP, default=datetime.utcnow, server_onupdate=text(''), nullable=False) 上的格式更改为:

codes.txt

我还将#codes.txt xxxx, xxxx, xxxx 更改为lstCodes = open("codes.txt").readlines()所以现在当我在lstCodes = open("codes.txt").read().split(',')中查找代码时,它会返回其索引,然后我在code.txt上查找索引号并且返回与之关联的消息。