Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用不同的字符串长度均匀地分隔输出数据_Python_Python 3.x - Fatal编程技术网

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
>>> 
或者,您可以使用string
format
方法:

>>> 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]))