Почему Python выдает ошибку рекурсии при использовании метода, который принадлежит внешнему пакету - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь построить функции, которые вычисляют среднее значение, медиану и режим данного списка.Только для режима я использую from statistics import mode (все остальное - вручную), но когда дело доходит до вывода результата, только строка кода с использованием метода mode() дает мне ошибку рекурсии.

Этомой код:

import pandas as pd
from statistics import mode

dataFrame = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv")

area = dataFrame['area'].tolist()
rain = dataFrame['rain'].tolist()

months = dataFrame['month'] = dataFrame['month'].map({'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6, 'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12}).tolist()

def mean(numbers):
  meanOfNumbers = (sum(numbers))/(len(numbers))
  return meanOfNumbers

def median(numbers):
  if(len(numbers) % 2 == 0):
    medianOfNumbers = (numbers[int((len(numbers))/2)] + numbers[int((len(numbers))/2-1)])/2
  else:
    medianOfNumbers = numbers[int((len(numbers)-1)/2)]
  return medianOfNumbers

def mode(numbers):
  modeOfNumbers = int(mode(numbers))
  return modeOfNumbers

print("The mean of the months is: " + str("%.2f" % round(mean(months))))
print("The median of the months is: " + str("%.2f" % round(median(months))))
print("The mode of the months is: " + str(mode(months)))

И это ошибка:

The mean of the months is: 7.00
The median of the months is: 8.00
---------------------------------------------------------------------------
RecursionError                            Traceback (most recent call last)
<ipython-input-29-ad10a2f4e71b> in <module>()
     33 print("The mean of the months is: " + str("%.2f" % round(mean(months))))
     34 print("The median of the months is: " + str("%.2f" % round(median(months))))
---> 35 print("The mode of the months is: " + str(mode(months)))
     36 
     37 

<ipython-input-29-ad10a2f4e71b> in mode(numbers)
     28 
     29 def mode(numbers):
---> 30   modeOfNumbers = int(mode(numbers))
     31   return modeOfNumbers
     32 

... last 1 frames repeated, from the frame below ...

<ipython-input-29-ad10a2f4e71b> in mode(numbers)
     28 
     29 def mode(numbers):
---> 30   modeOfNumbers = int(mode(numbers))
     31   return modeOfNumbers
     32 

RecursionError: maximum recursion depth exceeded

1 Ответ

0 голосов
/ 03 января 2019

Внутри mode вы пытаетесь вызвать statistics.mode, но когда вы пишете mode(numbers), это означает, что определенная вами функция называется mode. Так что это бесконечная рекурсия.

Если у вас должна быть функция с именем mode, а также для использования statistics.mode, вы можете использовать ее квалифицированное имя, чтобы определить, какое из них вы имеете в виду.

import statistics

...

def mode(numbers):
    return int(statistics.mode(numbers))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...