Получает вывод «None», но не уверен, что именно вызывает его - PullRequest
0 голосов
/ 25 октября 2019

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

None                #Not quite sure where this came from
(26.54, 4269775.77) #This is calculated correctly

<histogram 1> #This is rendered correctly
<histogram 2> #This is also rendered correctly

, тогда как ожидаемый результат должен быть просто

(26.54, 4269775.77)

<histogram 1>
<histogram 2>

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

def compute_statistics(age_and_salary_data):
    t = full_data
    age = t.column('Age')
    salary = t.column('Salary')
    age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
    print(age_and_salary_data.hist('Age', bins = (np.arange(18,np.max(age)+1,1))))
    average_age = np.mean(age)
    average_salary = np.mean(salary)
    average_list = (np.round(average_age, 2), np.round(average_salary,2))
    return age_and_salary_data.hist('Salary', bins = np.arange(0,np.max(salary)+1, 1000000))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)

Когда я запускаю это через грейдер, меня встречает следующее, почему я получаю ответ неправильно.

>>> round(float(compute_statistics(full_data)[0]), 2) == 26.54
None
TypeError: 'NoneType' object is not subscriptable

# Error: expected
#     True
# but got
#     Traceback (most recent call last):
#       ...
#     TypeError: 'NoneType' object is not subscriptable

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

В вашей записной книжке: compute_statistics(full_data) вызывается, что print s один результат из .hist метода, а затем return s другой. В обоих случаях метод возвращает None, поэтому print отображает это, а затем значение return ed также равно None, но ничто в вашем коде не использует его. Затем вы print(average_list), что дает вам последнее значение в консоли, а также вы видите гистограммы.

Метод .hist предположительно создает гистограммы как побочный эффект и возвращает None, потому чтонет возвращаемого значения.

round(float(compute_statistics(full_data)[0]), 2) == 26.54

Так выглядит код тестирования. Он ожидает получить значения average_list обратно при вызове compute_statistics, чтобы он мог извлечь средний возраст, округлить его и сравнить с ожидаемым значением. Однако вместо этого он получает None, который не может быть подписан.

Тестовый код не имеет значения, что вы print. (Я предполагаю, что внутри предоставленной библиотеки datascience метод .hist выполняет какое-то отслеживание, чтобы убедиться, что вы сделали ожидаемые вызовы для отрисовки этих гистограмм.)

Снова прочитайте спецификацию назначения и выполнитеуверен, что вы понимаете разницу между return значениями и print значениями.

0 голосов
/ 25 октября 2019

Продолжал играть с функцией и смог избавиться от надоедливого None, удалив оператор print в функции compute_statistics и отобразив гистограмму как возврат, как и с другой гистограммой. Для справки:

def compute_statistics(age_and_salary_data):
    age = full_data.column('Age')
    salary = salary_data.column('Salary')
    age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
    average_age = np.mean(age)
    average_salary = np.mean(salary)
    average_list = (np.round(average_age, 2), np.round(average_salary,2))
    return age_and_salary_data.hist('Salary', bins = np.arange(min(salary),max(salary)+1, 1000000)), age_and_salary_data.hist('Age', bins = (np.arange(min(age),max(age)+1,1)))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)

Хотя это решило мою проблему, и я думаю, что это можно было бы считать ответом, я все еще не уверен, зачем делать то, что я делал, вместо того, чтобы вместо него использовать инструкцию для печати, и любая оценка будет оценена

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