读取指定的文件并将其内容视为字符串列表(每行一个)。 检查输入文件中的以下条件:
该文件必须存在且可供阅读。换句话说,对open的调用不应该引发异常。
该文件必须包含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 :(得分: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 :(得分: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']
您可以根据需要进行调整。希望这会有所帮助。