Python если ошибка оператора, возможно из-за операторов - PullRequest
1 голос
/ 11 апреля 2020

Уже поздно, и, возможно, мой мозг просто не работает, но у меня проблема с определением функции, которая берет итоговую оценку ученика и присваивает ей буквенную оценку.

def getlettergrade(fgrade): 
    if fgrade <= 59:
        return 'F'
     elif fgrade <= 69 and >= 60:
        return 'D'
     elif fgrade <= 79 and >= 70:
        return 'C'
     elif fgrade <= 89 and >= 80:
       return 'B'
     elif fgrade <= 100 and >= 90:
        return 'A'

Намерение состоит в том, чтобы отобразить эту карту на объект серии pandas из фрейма данных и поместить вывод в граф matplotlib, если это вообще актуально.

Ответы [ 4 ]

2 голосов
/ 11 апреля 2020

Я изменил вашу функцию, были ошибки отступов и сравнение отсутствовало fgrade во всех elif

import seaborn as sns

def getlettergrade(fgrade):
    if fgrade <= 59:
        return 'F'
    elif fgrade <= 69 and fgrade >= 60:
        return 'D'
    elif fgrade <= 79 and fgrade >= 70:
        return 'C'
    elif fgrade <= 89 and fgrade >= 80:
        return 'B'
    elif fgrade <= 100 and fgrade >= 90:
        return 'A'

temp = pd.DataFrame(np.random.choice(100, 100), columns=['grades'])
temp['grade_number'] = temp['grades'].apply(getlettergrade)

sns.countplot(x=temp['grade_number'])

Это будет график подсчета образцов с использованием seaborn

enter image description here

1 голос
/ 11 апреля 2020

Как отметил Ислам Ханафи, вы пропускаете первый член сравнения "> =".

elif fgrade <= 69 and >= 60:

становится:

elif fgrade <= 69 and fgrade >= 60:

Но вы также можете объединять операторы, такие как это:

elif 60 <= fgrade <= 69:

, что, на мой взгляд, немного более читабельно.

Наконец, вы также можете упростить условия и использовать строгие операторы для работы с десятичными оценками:

def getlettergrade(fgrade):
    if fgrade < 60:
        return 'F'
    elif fgrade < 70:
        return 'D'
    elif fgrade < 80:
        return 'C'
    elif fgrade < 90:
        return 'B'
    else:
        return 'A'

(но где «E» ???)

1 голос
/ 11 апреля 2020

Это очень просто, все, что вам нужно, это отредактировать условие, например elif fgrade <= 69 and fgrade >= 60: вместо elif fgrade <= 69 and >= 60:

0 голосов
/ 11 апреля 2020

Вы не можете сравнить оценку ни с одним. Попробуйте это

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

def getlettergrade(fgrade): 
    if fgrade <= 59:
        return 'F'
    elif 60 <= fgrade <= 69:
        return 'D'
    elif 70 <= fgrade <= 79 :
        return 'C'
    elif  80 <= fgrade <= 89:
       return 'B'
    elif 90 <= fgrade <= 100:
        return 'A'

nums = np.random.choice(100, 100)
grades = pd.DataFrame(nums, columns=['fgrades'])
plt.plot(grades)
plt.show()

введите описание изображения здесь

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