0

ユーザー入力をテストしようとしていますが、最初からしか機能しないようです。最初に正しいデータを指定すると機能しますが、最初に間違ったデータを指定し、再度プロンプトが表示された後に正しいデータを使用すると、正しいデータとして認識されません。初めて機能するのに、その後は機能しない理由は何ですか? ここにコードがあります、

testDate = open("Sales.txt")




def DateTest(Date, Position):

    firstTry = True
    validSyntax = False
    Done = False
    while Done == False:

        while validSyntax == False:

            if firstTry == True:
                print "debug 2"
                try:
                    Date = Date.strip().split(',')
                    Year = int(Date[0])
                    Month = int(Date[1])
                    Day = int(Date[2])
                    Date = (Year, Month, Day)
                except:
                    print "That is invalid input."
                    firstTry = False
                else:
                    validSyntax = True
                    print "ok got it"

            elif firstTry == False:
                NewDate = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)
                try :
                    NewDate = startDate.strip().split(',')
                    Year = int(NewDate[0])
                    Month = int(NewDate[1])
                    Day = int(NewDate[2])
                    NewDate = (Year, Month, Day)
                except:
                    print "That is invalid input."
                else:
                    validSyntax = True
                    print" ok got it"

        if validSyntax == True:
            for line in testDate:
                line = line.strip().split(',')
                yearTest = int(line[0])
                monthTest = int(line[1])
                dayTest = int(line[2])
                dateTest = (yearTest, monthTest, dayTest)
                if Year == yearTest:
                    if Month == monthTest:
                        if Day == dayTest:
                            Done = True
                            print "success"
4

2 に答える 2

0

現在機能していない理由に対処するには: を設定したことがないstartDateため、次の試みは機能しstrip().split()ません:

            NewDate = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)
            try :
                NewDate = startDate.strip().split(',') // startDate isnt set

あなたが試すことができます

           startDate = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)
            try :
                NewDate = startDate.strip().split(',')

反復セクションを統合するためにコードをリファクタリングすることに挑戦できるというコメンターに同意します。

于 2012-06-18T01:21:38.907 に答える
0

リファクタリングされたバージョンは次のとおりです。

import time

DATE_FORMAT = '%Y,%m,%d'

def parse_date(date_str, fmt=DATE_FORMAT):
    try:
        return time.strptime(date_str.strip(), fmt)
    except ValueError:
        return None

def get_date(adj='', fmt=DATE_FORMAT, prompt='Please enter the {}date (like {}): '):
    prompt = time.strftime(prompt.format(adj.strip()+' ' if adj.strip() else '', fmt))
    # repeat until a valid date is entered
    while True:
        inp = raw_input(prompt)
        res = parse_date(inp, fmt)
        if res is None:
            print('Invalid input')
        else:
            return res

def get_test_date(date, adj='', fmt=DATE_FORMAT):
    return parse_date(date, fmt) or get_date(adj, fmt)

def find_date_in_file(fname, date_str='', adj=''):
    test_date = get_test_date(date_str, adj)
    with open(fname) as inf:
        for line in inf:
            if test_date == parse_date(line):
                print('Found!')
                return test_date

def main():
    find_date_in_file('Sales.txt', '2012,01,05', 'closing')

if __name__=="__main__":
    main()
于 2012-06-18T16:10:06.970 に答える