我必须编写一个导入文本文件的程序,计算测试平均值然后将其打印到表中。除了表的格式之外,我已经能够完成所有工作。
以下是表格的外观
阅读六项考试和分数
TEST---------------SCORE
objects------------88
loops--------------95
selections---------86
variables----------82
files--------------100
functions----------80
Average is
我无法弄清楚如何在此处获得对象,循环,选择等等。但这就是表格的设置方式。我只是无法将得分排在得分栏中。
这是我的代码。
def main():
print('Reading six tests and scores')
print('TEST\tSCORE')
test_scores = open('tests.txt', 'r')
total_score = 0
counter = 0
line = test_scores.readline()
while line != '':
name = line.rstrip('\n')
score = int(test_scores.readline())
total_score += score
print(name, score, sep='\t')
line = test_scores.readline()
counter += 1
test_scores.close()
average_test = total_score / counter
print('Average is', format(average_test, '.1f'))
main()
答案 0 :(得分:2)
您可以使用'{:-<20}{}'.format(test, score)
左对齐并使用&#39; - &#39;来填充20个字符:
def main():
print('Reading six tests and scores')
print('{:-<20}{}'.format('TEST', 'SCORE'))
with open('tests.txt') as f:
scores = {test.rstrip('\n'): int(score) for test, score in zip(f, f)}
for test, score in scores.items():
print('{:-<20}{}'.format(test, score))
print('\nAverage is {:.1f}'.format(sum(scores.values()) / len(scores)))
>>> main()
Reading six tests and scores
TEST----------------SCORE
objects-------------88
loops---------------95
functions-----------80
selections----------86
variables-----------82
files---------------100
Average is 88.5
注意:我转而使用with
语句来提供对文件的适当处理,并构建了{test: score}
的字典。考虑到zip(f, f)
和test
在不同的行上,score
是一次逐步浏览文件的小技巧。
答案 1 :(得分:0)
按标签分隔列可能不是一个好主意,因为很难预测需要多少个标签。您可以使用打印格式,例如:
print('{:20} {}'.format(name, score))
这会将name
打印为20个字符,然后score
。我假设你的表中的-
只是间隔字符。如果您想获得想象力,可以阅读该文件一次并找到name
中最长的max_name_length
,然后执行:
print('{:{}} {}'.format(name, max_name_length, score))
查看有关格式规范字符串in the official documentation的完整详细信息。