1

指定されたファイルを読み取り、その内容を文字列のリスト (1 行に 1 つ) として扱います。入力ファイルで次の条件をチェックします。

ファイルが存在し、読み取り可能である必要があります。つまり、open の呼び出しで例外が発生してはなりません。

ファイルには 3 ~ 10 行のテキストが含まれている必要があります。つまり、許容される最小行数は 3 で、最大行数は 10 です。

すべての行には、正確に同じ数の文字が含まれている必要があります。

各行には 3 ~ 10 文字を含める必要があります。つまり、許容される最小文字数は 3 で、最大許容文字数は 10 です。1 行あたりの文字数は、ファイルの行数と同じである必要はありません。

使用できる文字は、、、、、および'x'のみ'X'です。'y''Y''_'

correct_string = False
while correct_string is False:

    string = input("Enter a string? ")
    if len(string) != len(string):
        print("Error: string must have the same number of characters.")
    else:
        incorrect_char = False
        for i in string:
            if i != "X" and i != "x" and i != 'Y' and i != 'y' and i != "_":
                incorrect_char = True
        if incorrect_char is False:
            correct_string = True
        else:
            print("Invalid Character. Contains characters other than 'X', 'x', 'Y' 'y',and '_'")
4

2 に答える 2

1

これはあなたが求めていることを行い、有効であればリストを返します。そうでない場合は、例外が発生します。必要に応じてカスタマイズできます。

def load_file(filename):

    valid_chars = set('xXyY_')
    min_len = 3
    max_len = 10
    data = []

    # load the file
    with open(filename) as f:
        num_rows = 0
        for line in f:
            line = line.rstrip()
            print line, len(line)
            num_rows += 1
            # load validation
            if num_rows > max_len:
                raise Exception('Max rows exceeded')
            if len(line) > max_len:
                raise Exception('Max columns exceeded')
            if not set(line) <= valid_chars:
                print set(line), valid_chars
                raise Exception('Invalid input')
            data.append(line)

    if num_rows < min_len:
        raise Exception('Not enough rows')

    # validate row length
    if any( len(line) <> num_rows for line in data):
        raise Exception('Invalid row length')

    return data

呼び出すには:

>>> load_file('test.txt')
['xxx', 'xYx', 'xXx']

必要に応じて微調整できます。お役に立てれば。

于 2013-04-17T01:10:29.133 に答える