Я новичок в программировании и пытаюсь создать небольшой скрипт, в котором пользователи могут выставлять свои оценки и быстро видеть, сколько баллов они получили.

Но я не могу правильно оформить вывод.

#lists with necessary functions

subject = ["Literature", "Programming", "Math", "Spanish", "Project Skills", "P.E","Network Engineering 1"]
subjectPoints = [3,3,3,2,2,3,3]
grades = [0,0,0,0,0,0,0]

#Loop1 to to ask the user for his grades
for x in range (0,7):
    grades[x] = float(input("Fill in your grade for - " + subject[x] + ': '))
    if grades[x] < 1.0 or grades[x]> 10.0:
        grades[x] = float( input( "Invalid grade, please fill in a grade between 1 and 10 - " + subject[x] + ': ' ) )


#loop2 to show the grades and points per subject
for i in range(0,7):
    if subjectPoints[i]< 5.5:
        subjectPoints[i] = 0
    print("subject: " ,'{:<12s} {:>20} {:<6.0f} {:>6s} {:>6.0f}'.format(subject[i],'grades: ', subjectPoints[i], 'Points earned: ', subjectPoints[i]))

The output is as follows: 
subject:  Literature              grades: 0     Points earned:      0
subject:  Programming             grades: 0     Points earned:      0
subject:  Math                    grades: 0     Points earned:      0
subject:  Spanish                 grades: 0     Points earned:      0
subject:  Project Skills            grades: 0     Points earned:      0
subject:  P.E                     grades: 0     Points earned:      0
subject:  Network Engineering 1            grades: 0     Points earned:      0

1
delallbugs 21 Авг 2020 в 11:20

2 ответа

Лучший ответ

Project Skills и Network Engineering 1 длиннее 12 символов, но находятся в столбце, отформатированном с помощью {:<12s}. Я бы увеличил число 12, чтобы охватить максимально длинную строку в этом столбце.

Вы можете сократить {:>20s} для grades:, поскольку это будет не более 7 символов. Также обратите внимание на то, что вам не хватает s в этой строке формата (в настоящее время это {:>20}).

Например:

print("subject: " ,'{:<22s} {:>10s} {:<6.0f} {:>6s} {:>6.0f}'.format(...)

Дает:

subject:  Literature               grades:  0      Points earned:       0
subject:  Programming              grades:  0      Points earned:       0
subject:  Math                     grades:  0      Points earned:       0
subject:  Spanish                  grades:  0      Points earned:       0
subject:  Project Skills           grades:  0      Points earned:       0
subject:  P.E                      grades:  0      Points earned:       0
subject:  Network Engineering 1    grades:  0      Points earned:       0
1
tmdavison 21 Авг 2020 в 08:37

Если вас устраивают пакеты, вы можете использовать пакет texttable (https: // pypi .org / project / texttable /), который позаботится о вашем форматировании, вам нужно только передать в него данные, настроить типы данных и указать стиль таблицы.

Примеры находятся на https://github.com/foutaise/texttable/.

0
leotrubach 21 Авг 2020 в 08:42