Как этот код форматирует список до желаемого результата? - PullRequest
0 голосов
/ 06 декабря 2018

Я новичок в изучении Python и у меня проблемы со списками.

Это был урок нашей прошлой недели, и мне нужна помощь, чтобы понять, как команды в этом коде работают, чтобы изменить вывод списка,Команды, которым нас учили в списках и форматировании: split(), strip(), slice(), append() и format()

Более конкретно, часть, которую я не совсем понимаю, - это какПрограмма понимает, какие части являются именами и какие части являются оценками?Где он отделяет имена от оценок и для чего мы используем кортеж?

Приведенный нам список выглядит следующим образом:

Hopper, Grace 100 98 87 97 Кнут,Дональд 82 87 92 81 Гольдберг, Адель 94 96 90 91 Керниган, Брайан 89 74 89 77 Лисков, Барбара 87 97 81 85

и желаемый результат должен выглядеть следующим образом

Вывод

Код, который мы написали в классе:

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 голосов
/ 06 декабря 2018

Звучит так, будто вам никогда не говорили, что такое строки и символы.Понимание этих концепций даст вам некоторую справочную информацию, чтобы понять, что происходит.

Вы можете думать о слове как о строке.Буквы в этом слове являются символами.

Предложение также является строкой.Единственная разница между словом и строкой - это пробелы между словами.Компьютер не заботится, является ли символ в строке пробелом или буквой.Мы должны указать компьютеру удалить пробелы.

Таким образом, вся функция 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'.

Спросите своего учителя, почему подсчет начинается с нуля на компьютерах, это должно быть забавным обсуждением.

Надеюсь, это немного вас расстроит.

0 голосов
/ 06 декабря 2018

Я предполагаю, что каждый вход находится на отдельной строке, т.е.

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

Таким образом, вход, скорее всего, отформатирован, так что вы можете жестко закодировать разделение имен и оценок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...