2016-02-23 2 views
0

Я собираюсь на это некоторое время, но я не совсем уверен, как справиться с этим. У меня есть трех элементы данных sets- оценки (AF, подсчитывает количество сортов в каждом ранге), количества (программа печатает таблицу подсчета по рангу), и проценты (разделяющее количество в общей сложности в набор данных, чтобы получить процент в каждом ранге).Как сделать таблицу с тремя наборами данных?

Конечный результат должен выглядеть примерно так, как указано в 7 классах (целых). (пример пользователя введенные данные: [88, 76, 89, 78, 74, 87, 95])

>>> GRADE COUNT PERCENTAGE 
>>> A  2  28.6% 
>>> B  2  28.6% 
>>> C  3  42.9% 
>>> D  0  0% 
>>> F  0  0% 

В настоящее время это мой долгий, утомительный, элементарный код. Мне сложно выполнять и правильно работать, и я, вероятно, не делаю это нормально.

def grade_scores(scoreList): 
    for score in scoreList: #shows the scores in the score list, uses ddata from previous function 
     if score >= 91: 
      Ascore = 'A' 
      Acount +=1 
      sum(Ascore)/Acount len(scoreList) = Apercentage 
     elif score >= 81 and score <=90: 
      Bscore = 'B' 
      Bcount +=1 
      sum(Bscore)/Bcount len(scoreList) = Bpercentage 
     elif score >= 71 and score <=80: 
      Cscore = 'C' 
      Ccount +=1 
      sum(Cscore)/Ccount len(scoreList) = Cpercentage 
     elif score >= 61 and score <=70: 
      Dscore = 'D' 
      Dcount +=1 
      sum(Dscore)/Dcount len(scoreList) = Dpercentage 
     else: 
      Fscore = 'F' 
      Fcount +=1 
      sum(Dscore)/Dcount len(scoreList) = Dpercentage 
    for i in range(scoreList): 
     print ('Grade', '\t', 'Count', '\t', 'Percentage') 
     print(Ascore, end="\t", Acount, end="\t", Apercentage) 
     print(Bscore, end="\t", Bcount, end="\t", Bpercentage) 
     print(Cscore, end="\t", Ccount, end="\t", Cpercentage) 
     print(Dscore, end="\t", Dcount, end="\t", Dpercentage) 
     print(Fscore, end="\t", Fcount, end="\t", Fpercentage) 

Я хотел бы надеяться, чтобы сделать его более стиля сетки, но вместо этого я не думаю, что это правильно и, кажется, не работает должным образом (я также получаю ошибку о «Len» в 6-й строке). Я ценю любой вклад в это.

+1

Используйте для вашего счета, счет, и процент - это поможет вам много – Ian

+0

спасибо! Но как я могу включить списки для данных, если это пользовательский ввод? Я пытаюсь использовать бесплатную книгу «Как думать, как компьютерный ученый», чтобы помочь мне, но до сих пор не много читал о наборах данных с пользовательского ввода. – Jennga

ответ

0

Не совсем уверен, что вы имели в виду под вопросом, но, скорее всего, сообщение об ошибке, скорее всего, вызвано TypeError, поскольку вы используете переменную scoreList в функции range(), которая принимает целые числа, а целые числа нет длины).

Также вы можете рассмотреть возможность использования списков для упорядочивания данных.

Для стиля сетки, вы должны использовать метод .format(), чтобы помочь вам с печатью строки:

# Assuming you have 3 lists: 
# grade = ['A','B','C','D','E'] 
# count = [2, 2, 3, 0, 0] Have another function capture user input 
#       and convert it into this list. 
# percentage = [28.6, 28.6, 42.9, 0, 0] Same as above^

print("SCORE COUNT PERCENTAGE") 
for i in range(len(grade)): 
    print(" {}  {}  {} %".format(grade[i], count[i], percentage[i])) 

Для Элифа условных, вы должны придерживаться того, что у вас уже есть. Тем не менее, вы можете изменить имена переменных немного, как лучший способ сделать это с помощью списков:

for i in range(len(gradeInputList)): 
    if grade >= 90: 
    count[0] += 1 # Increase index 0 (Corresponds to value A) by 1 
    elif grade >= 80 and < 90: 
    count[1] += 1 
    # Omitted code here, you get the idea 
    # ... 
    else: 
    count[4] += 1 

И в конце концов, вы могли бы иметь еще один цикл, который вычисляет среднее:

for i in range(len(count)): 
    average[i] = count[i]/sum(count) * 100 # Calculates the percentage 

Ну, надеюсь, это помогло! :)

+0

Не жестко закодированная таблица, как показано выше В основном столбцы для каждого набора данных. Я знаю, что его трудно объяснить сам, у меня есть более ранняя функция (которую я должен был включить), которая позволяет пользователю вводить набор данных и вычисляет средний, минимальный и максимальный баллы . – Jennga

+0

@Jennga У меня есть ответ на мой ответ на основе вашего ответа. – Jerrybibo

+0

Спасибо!Мне жаль, что я не хочу быть трудным, но как насчет эль-петли? Должен ли я включать эту информацию, поскольку она необходима для ранжирования? У меня просто так много проблем, чтобы понять, правильно ли было то, что я делал, в первую очередь с «Ascore», «Acount», «Apercentage», если это правильный способ пойти с этим. Спасибо за помощь! – Jennga

0

Если вы хотите напечатать что-то в формате сетки, используйте пакет табуляции. Это легко и удобно. Вот пример кода:

from tabulate import tabulate 
table = [["spam",42],["eggs",451],["bacon",0]] 
headers = ["item", "qty"] 
print tabulate(table, headers, tablefmt="grid") 

Эта печать: список

+--------+-------+ 
| item | qty | 
+========+=======+ 
| spam | 42 | 
+--------+-------+ 
| eggs | 451 | 
+--------+-------+ 
| bacon |  0 | 
+--------+-------+ 
Смежные вопросы