2013-04-16 46 views
1

讀取指定的文件並將其內容視爲字符串列表(每行一個)。 檢查輸入文件中的以下條件:如何檢查文件中的行數是否等於每行中的字符數?

該文件必須存在並可供閱讀。換句話說,打開電話不應引發異常。

該文件必須包含3到10行文本。也就是說,3是最小可接受的行數,10是最大行數。

所有行必須包含完全相同數量的字符。

每行必須包含3到10個字符。也就是說,3是可接受的最小字符數,10是最大值。每行字符數不必等於文件中的行數。

唯一可接受的字符是'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 '_'") 
+1

而你的問題是? – whatsisname

+0

如何檢查文件中的行數是否等於每行中的字符數? @whatsisname – 2013-04-16 21:53:50

+0

@ user88453你想確定文件是否代表一個方形矩陣? – 2013-04-16 22:20:48

回答

2

此代碼檢查文件中行​​數是否等於每行中的字符數。它不檢查任何其他標準,因爲它們不是問題的一部分。

with open('input.txt') as in_file: 
    lines = [ line.rstrip('\n') for line in in_file] 

if any(len(line) != len(lines) for line in lines): 
    print "NOT SQUARE!" 
else: 
    print "SQUARE!" 
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'] 

您可以根據需要調整。希望這可以幫助。

相關問題