此代码如何将列表格式化为所需的输出?

时间:2018-12-06 16:38:24

标签: python list

我是一名Python初学者,在列表方面遇到了麻烦。

这是我们上周的课程,我需要帮助了解此代码上的命令如何操作以更改列表输出。 我们在列表和格式上教过的命令是split()strip()slice()append()format()

更特别的是,我不完全了解的部分是程序如何理解名称的哪些部分以及成绩的哪些部分?它在哪里从年级中拆分名称,我们将元组用于什么?

给我们的清单就是这样

  

Hopper,Grace 100 98 87 97   唐纳德·努斯82 87 92 81   戈德堡,阿黛尔94 96 90 91   克尼根(Brian)89 74 89 77   芭芭拉·利斯科夫87 97 81 85

,所需的输出应如下所示

Output

我们在课堂上写的代码是:

exam1_score = 0
exam2_score = 0
exam3_score = 0
exam4_score = 0
name = ""
scores=[]

f=open("scores.txt","r")

for line in f:
    temp_list = []
    name = line[0:18]
    list = line[19:len(line)].split()

    ex1_score = int(list[0])
    ex2_score = int(list[1])
    ex3_score = int(list[2])
    ex4_score = int(list[3])
    avg_score = float(float(ex1_score+ex2_score+ex3_score+ex4_score)/float(4))

    temp_list.append(name)
    temp_list.append(ex1_score)
    temp_list.append(ex2_score)
    temp_list.append(ex3_score)
    temp_list.append(ex4_score)

    temp_list.append(avg_score)

    scores.append(tuple(temp_list))
    scores = sorted(scores)



print("{:20s}{:6s}{:6s}{:6s}{:6s}{:10s}".format("Name", "Exam1", "Exam2", "Exam3", "Exam4", "Mean"))


ex1_mean = 0
ex2_mean = 0
ex3_mean = 0
ex4_mean = 0
avg_mean = 0

for baslik in scores:
    print ("{:20s}{:6d}{:6d}{:6d}{:6d}{:10.2f}".format(baslik[0],baslik[1],baslik[2],baslik[3],baslik[4],baslik[5]))

    ex1_mean = ex1_mean+baslik[1]
    ex2_mean = ex2_mean+baslik[2]
    ex3_mean = ex3_mean+baslik[3]
    ex4_mean = ex4_mean+baslik[4]
    avg_mean = avg_mean+baslik[5]

print ("{:20s}{:6s}{:6s}{:6s}{:6s}{:10.2s}".format("Exam Mean",str(ex1_mean/len(scores)),str(ex2_mean/len(scores)),str(ex3_mean/len(scores)),str(ex4_mean/len(scores)),str(avg_mean/len(scores))))
f.close()

2 个答案:

答案 0 :(得分:0)

我想每个输入都在不同的行上,即

Hopper, Grace     100 98 87 97 
Knuth, Donald     82 87 92 81 
Goldberg, Adele   94 96 90 91 
Kernighan, Brian  89 74 89 77 
Liskov, Barbara   87 97 81 85

前18个字符包含名称,因为我们有以下一行:

name = line[0:18]

然后,我们用

分割剩余的字符串
list = line[19:len(line)].split()

因此,输入很可能是格式化的,以便您可以对名称和等级的拆分进行硬编码。

答案 1 :(得分:0)

从未听说过像您这样的声音是什么字符串和字符。了解这些概念将为您提供一些背景信息,以了解发生了什么情况。

您可以将一个单词视为一个字符串。该单词中的字母是字符。

句子也是一个字符串。单词和字符串之间的唯一区别是单词之间的空格。计算机不会在乎字符串中的字符是空格还是字母。我们必须告诉计算机删除空格。

因此,所有split()函数所做的(默认情况下)都是在空格上分隔一个句子。它会将所有这些单词放入列表中。

例如,假设最后一个句子存储在可变句子中。

在python中看起来像这样:

sentence = "It takes all those words and puts them into a list"

现在说我们只想要列表中的每个单词。

broken_sentence = sentence.split()

结果将是如果您使用以下命令打印broken_sentence

print(broken_sentence)

您会得到

('It','takes','all','those','words','and','puts','them','into','a','list')

现在计算机有一个列表。如果要使用单词It,可以通过索引或切片来访问它。

print(broken_sentence[0]) will print the FIRST element in the list which is 'It'.

问老师,为什么在计算机中计数从零开始,这应该是一个有趣的讨论。

希望这会对您有所帮助。