2013-04-16 41 views
0

該文件必須包含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 '_'") 
+0

從文件中讀取行,並檢查它們的長度? – alexis

+0

這段代碼有很多錯誤...我不認爲最初的if將永遠是真的... –

+0

你的問題的標題提到了一個文件,但是在你從代碼中讀取的代碼中。另外,第一個條件是無意義的:字符串對象的長度何時不等於它自己的長度? – chb

回答

0
with open("my_file.txt") as f: 
    lines = f.readlines() 
    assert all(len(line) == len(lines[0]) for line in lines[1:]) 
    assert len(lines) == len(lines[0]) 

也許......不知道什麼挺你問

+0

只需將第4行更改爲'assert len(lines)in範圍(3,11)'。 –

+0

我想你還需要在範圍(3,11)'中添加'assert len(lines [0])。 –

0
def check_file(f): 
    for i, line in enumerate(f): 
     if i > 10: return False 
     for j, c in enumerate(line.rstrip('\n')): 
      if j > 10: return False 
      if c not in 'xXyY_': 
       return False 
     if j < 3: return False 
    if i < 3: return False 

    return True 
相關問題