Python:使用不同的字符串长度均匀地分隔输出数据
我试图使我的输出数据如下所示:Python:使用不同的字符串长度均匀地分隔输出数据,python,python-3.x,Python,Python 3.x,我试图使我的输出数据如下所示: ------------------------------------------------------- Grade Report for Programs ------------------------------------------------------- Jacobson, Mark 19.0 <--- 20,17,20 Snurd, Mortimur 16.5 <--- 20,19,18
-------------------------------------------------------
Grade Report for Programs
-------------------------------------------------------
Jacobson, Mark 19.0 <--- 20,17,20
Snurd, Mortimur 16.5 <--- 20,19,18,17,16,15,14,13
Luxemburg, Rosa 15.0 <--- 18,15,20,10,12
Atanasoff, John 20.0 <--- 20,20,20,20,20,20,20
Hopper, Grace 20.0 <--- 20,20,20,20,20,20
-------------------------------------------------------
Mark Jacobson,20,17,20
Mortimur Snurd,20,19,18,17,16,15,14,13
Rosa Luxemburg,18,15,20,10,12
John Atanasoff,20,20,20,20,20,20,20
Grace Hopper,20,20,20,20,20,20
这是我的代码,它收集名字和分数,打印出数据,包括姓、名、平均分数,然后是得出平均值的实际分数
file = input("Enter filename: ")
grade_file = open(file, 'r')
print()
print('---------------------------------------------------------')
print('\t\tGrade Report for Programs')
print('---------------------------------------------------------')
for text in grade_file:
end_of_name = text.find(',')
name_seperated = text.find(' ')
first_name = text[0:name_seperated]
last_name = text[name_seperated+1:end_of_name]
name_last_first = last_name + "," + " " + first_name
grades = text[end_of_name+1:]
start = 0
index = 0
sum_n = 0
average= 0
score = 0
count = 0
while index < len(grades):
if grades[index] == ',':
score = int(grades[start:index])
count += 1
sum_n = score + sum_n
start = index + 1
index += 1
count += 1
score = int(grades[start:index])
sum_n = score + sum_n
average = sum_n / count
print(name_last_first, " ", average, "<---", grades)
print('---------------------------------------------------------')
grade_file.close()
file=input(“输入文件名:”)
坡度_文件=打开(文件“r”)
打印()
打印(“----------------------------------------------------------------”)
打印(“\t\t程序的升级报告”)
打印(“----------------------------------------------------------------”)
对于grade_文件中的文本:
结束\u of_name=text.find(','))
name_separated=text.find(“”)
first\u name=文本[0:名称\u分隔]
last_name=文本[名称分离+1:名称的结尾]
name\u last\u first=last\u name+,“+”+first\u name
等级=文本[名称的结尾+1:]
开始=0
索引=0
和=0
平均值=0
分数=0
计数=0
而指数 打印(名称最后一个,平均值,“使用字符串格式和字段宽度说明符:
print('{:20s} {:4.1f} <--- {}'.format(name_last_first, average, grades))
一种方法是使用Python内置的C样式格式。请注意,负字段宽度表示字段左对齐:
>>> print("%-30s %4.1f" % ("Jacobson, Mark", 19.0))
Jacobson, Mark 19.0
>>>
或者,您可以使用stringformat
方法:
>>> print("{:30s} {:4.1f}".format("Jacobson, Mark", 19.0))
Jacobson, Mark 19.0
>>>
您还可以使用格式化的字符串文字(f字符串):
我发现最简单的答案就是使用一些基本的字符串算法
例如,假设要使变量在左对齐之前对齐20个空格,在“average”变量的情况下,您可以简单地执行此操作
print(name_last_first + (' ' * (20-len(name_last_first))) + average
+ "<----" + grades)
print(name_last_first+(''*(20 len(name_last_first)))+平均值
+“您可以使用以下代码:
handle = open('grade.txt')
name= list()
avg = list()
scores = list()
for line in handle:
line = line.strip()
spos = line.find(',')
scores.append(line[spos+1:])
words = line.split(',')
words = words
name.append(words[0])
add = 0
for i in range(1,len(words)):
add = add+int(words[i])
average = add/(len(words)-1)
avg.append(average)
for i in range(len(avg)):
tname = name[i].split()
fname = tname[0]
sname = tname[1]
order = sname+', '+fname
print("%-20s %-3.1f <--- %-30s " %(order,float(avg[i]),scores[i]))
handle=open('grade.txt'))
name=list()
平均值=列表()
分数=列表()
对于线输入句柄:
line=line.strip()
spos=line.find(“,”)
分数。追加(第[spos+1:]行)
words=line.split(',')
单词
name.append(单词[0])
相加=0
对于范围(1,len(单词))中的i:
add=add+int(单词[i])
平均数=加/(长(字)-1)
平均附加值(平均值)
对于范围内的i(len(avg)):
tname=name[i].split()
fname=tname[0]
sname=tname[1]
订单=sname+','+fname
印刷品("%-20s%-3.1f感谢您的快速且详细的反馈!这正是我想要的!至于csv模块,我一定会研究它!只是这是一个课堂作业,为了帮助我们掌握课堂上的内容,老师喜欢我们使用我们已经学到的东西!我们还试图找出o这是一种不用csv模块就能阅读我们自己的csv代码的方法!但是非常感谢您的解释!
>>> name = "Jacobson, Mark"
>>> average = 19.0
>>> print(f"{name:30s} {average:4.1f}")
Jacobson, Mark 19.0
>>>
print(name_last_first + (' ' * (20-len(name_last_first))) + average
+ "<----" + grades)
handle = open('grade.txt')
name= list()
avg = list()
scores = list()
for line in handle:
line = line.strip()
spos = line.find(',')
scores.append(line[spos+1:])
words = line.split(',')
words = words
name.append(words[0])
add = 0
for i in range(1,len(words)):
add = add+int(words[i])
average = add/(len(words)-1)
avg.append(average)
for i in range(len(avg)):
tname = name[i].split()
fname = tname[0]
sname = tname[1]
order = sname+', '+fname
print("%-20s %-3.1f <--- %-30s " %(order,float(avg[i]),scores[i]))